28 #include "../ArrayOfSets.hpp" 29 #include "../Macros.hpp" 30 #include "../limits.hpp" 31 #include "../output.hpp" 75 virtual std::string
repr()
const = 0;
82 virtual long long size()
const = 0;
90 virtual PyObject *
operator[](
long long const setIndex ) = 0;
96 virtual std::type_index
valueType()
const = 0;
103 virtual void eraseSet(
long long const setIndex ) = 0;
111 virtual void insertSet(
long long const setIndex,
long long const capacity ) = 0;
121 virtual long long removeFromSet(
long long const setIndex,
void const *
const values,
long long const numVals ) = 0;
131 virtual long long insertIntoSet(
long long const setIndex,
void const *
const values,
long long const numVals ) = 0;
155 template<
typename T,
157 template<
typename >
class BUFFER_TYPE >
168 m_arrayOfSets( arrayOfSets )
177 if( accessLevel >= static_cast< int >( LvArray::python::PyModify::RESIZEABLE ) )
185 virtual std::string
repr() const final
override 186 {
return system::demangleType< ArrayOfSets< T, INDEX_TYPE, BUFFER_TYPE > >(); }
189 virtual long long size() const final
override 190 {
return integerConversion< long long >( m_arrayOfSets.size() ); }
193 virtual PyObject *
operator[](
long long const setIndex )
final override 195 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( setIndex );
197 T
const * data = slice;
198 constexpr INDEX_TYPE strides = 1;
199 INDEX_TYPE
size = slice.size();
204 virtual std::type_index
valueType() const final
override 205 {
return std::type_index(
typeid( T ) ); }
208 virtual void eraseSet(
long long const setIndex )
final override 210 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( setIndex );
211 m_arrayOfSets.eraseSet( convertedIndex );
215 virtual void insertSet(
long long const setIndex,
long long const capacity )
final override 217 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( setIndex );
218 INDEX_TYPE convertedCapacity = integerConversion< INDEX_TYPE >( capacity );
219 m_arrayOfSets.insertSet( convertedIndex, convertedCapacity );
224 void const *
const values,
225 long long const numVals )
final override 227 INDEX_TYPE convertedIndex = integerConversion< INDEX_TYPE >( setIndex );
228 T
const * begin =
static_cast< T
const *
>( values );
229 T
const * end = begin + numVals;
230 return integerConversion< long long >( m_arrayOfSets.removeFromSet( convertedIndex, begin, end ) );
235 void const *
const values,
236 long long const numVals )
final override 238 INDEX_TYPE convertedSetIndex = integerConversion< INDEX_TYPE >( setIndex );
239 T
const * begin =
static_cast< T
const *
>( values );
240 T
const * end = begin + numVals;
241 return integerConversion< long long >( m_arrayOfSets.insertIntoSet( convertedSetIndex, begin, end ) );
254 PyObject *
create( std::unique_ptr< internal::PyArrayOfSetsWrapperBase > && arrayOfSets );
269 template<
typename T,
typename INDEX_TYPE,
template<
typename >
class BUFFER_TYPE >
270 std::enable_if_t< internal::canExportToNumpy< T >, PyObject * >
273 auto tmp = std::make_unique< internal::PyArrayOfSetsWrapper< T, INDEX_TYPE, BUFFER_TYPE > >( arrayOfSets );
virtual ~PyArrayOfSetsWrapperBase()=default
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> create(T &value)
Create a NumPy 1D array of length 1 containing the scalar value.
Definition: numpyHelpers.hpp:147
PyModify
An enumeration of the various access policies for Python objects.
Definition: pythonHelpers.hpp:131
virtual void setAccessLevel(int const accessLevel) final override
Set the access level for the array.
Definition: PyArrayOfSets.hpp:175
virtual void eraseSet(long long const setIndex) final override
Erase the set at index setIndex.
Definition: PyArrayOfSets.hpp:208
virtual std::string repr() const =0
Return a string representing the underlying ArrayOfSetsType.
virtual int getAccessLevel() const
Return the access level for the array.
Definition: PyArrayOfSets.hpp:62
PyArrayOfSetsWrapper(ArrayOfSets< T, INDEX_TYPE, BUFFER_TYPE > &arrayOfSets)
Construct a new Python wrapper around arrayOfSets.
Definition: PyArrayOfSets.hpp:166
int m_accessLevel
access level for the ArrayOfSets.
Definition: PyArrayOfSets.hpp:143
virtual void eraseSet(long long const setIndex)=0
Erase the set at index setIndex.
This class serves to provide a sliced multidimensional interface to the family of LvArray classes...
Definition: ArraySlice.hpp:89
Provides a virtual Python wrapper around an ArrayOfSets.
Definition: PyArrayOfSets.hpp:49
virtual long long size() const =0
Return the size of the array (number of sets).
virtual long long insertIntoSet(long long const setIndex, void const *const values, long long const numVals)=0
Insert values into a set.
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> create(ArrayOfSets< T, INDEX_TYPE, BUFFER_TYPE > &arrayOfSets)
Create a Python object corresponding to arrayOfSets.
Definition: PyArrayOfSets.hpp:271
virtual std::string repr() const final override
Return a string representing the underlying ArrayOfSetsType.
Definition: PyArrayOfSets.hpp:185
virtual std::type_index valueType() const =0
Return the type of the values stored in the sets.
PyTypeObject * getPyArrayOfSetsType()
Return the Python type for the ArrayOfSets.
Forward declarations of Python Objects.
virtual PyObject * operator[](long long const setIndex)=0
Return an immutable 1D NumPy array representing the set at index setIndex.
virtual long long removeFromSet(long long const setIndex, void const *const values, long long const numVals) final override
Remove values from the a set.
Definition: PyArrayOfSets.hpp:223
virtual long long insertIntoSet(long long const setIndex, void const *const values, long long const numVals) final override
Insert values into a set.
Definition: PyArrayOfSets.hpp:234
PyArrayOfSetsWrapperBase()
Construct an empty PyArrayOfSetsWrapperBase.
Definition: PyArrayOfSets.hpp:138
The top level namespace.
Definition: Array.hpp:24
virtual void insertSet(long long const setIndex, long long const capacity) final override
Insert a new set at index setIndex.
Definition: PyArrayOfSets.hpp:215
This class implements an array of sets like object with contiguous storage.
Definition: ArrayOfArrays.hpp:22
Contains methods to help with conversion to python objects.
Provides a concrete implementation of PyArrayOfSetsWrapperBase.
Definition: PyArrayOfSets.hpp:158
virtual std::type_index valueType() const final override
Return the type of the values stored in the sets.
Definition: PyArrayOfSets.hpp:204
virtual long long removeFromSet(long long const setIndex, void const *const values, long long const numVals)=0
Remove values from the a set.
ArrayOfSets< T, INDEX_TYPE, BUFFER_TYPE > & m_arrayOfSets
The wrapped ArrayOfSets.
Definition: PyArrayOfSets.hpp:246
virtual PyObject * operator[](long long const setIndex) final override
Return an immutable 1D NumPy array representing the set at index setIndex.
Definition: PyArrayOfSets.hpp:193
virtual void insertSet(long long const setIndex, long long const capacity)=0
Insert a new set at index setIndex.
virtual void setAccessLevel(int const accessLevel)=0
Set the access level for the array.
std::enable_if_t< internal::canExportToNumpy< T >, PyObject *> createNumPyArray(T *const data, bool const modify, int const ndim, INDEX_TYPE const *const dimsPtr, INDEX_TYPE const *const stridesPtr)
Return a NumPy ndarray view of data.
Definition: numpyHelpers.hpp:107
virtual long long size() const final override
Return the size of the array (number of sets).
Definition: PyArrayOfSets.hpp:189