Data.h¶
-
class
Cubism::Block::DataBase¶ Type-less base class for a data block.
For byte-level operations on the data only.
Subclassed by Cubism::Block::Data< T, Entity, DIM, BlockAlloc >, Cubism::Block::Data< T, Entity, DIM, Alloc< T > >, Cubism::Block::Data< TField::DataType, TField::EntityType, TField::IndexRangeType::Dim, Cubism::AlignedBlockAllocator< TField::DataType > >
Public Functions
-
inline virtual void *
getBlockPtr()¶ Mutable pointer to address of first data element.
- Return
Address of first data block byte
-
inline virtual const void *
getBlockPtr() const¶ Immutable pointer to address of first data element.
- Return
Address of first data block byte
-
inline virtual size_t
getBlockBytes() const¶ Number of bytes occupied by block.
- Return
Number of block bytes
-
inline virtual size_t
getDataElementBytes() const¶ Number of bytes occupied by a single data element.
- Return
Number of block bytes
-
inline virtual size_t
getBlockSize() const¶ Number of data elements contained in block.
- Return
Number of block data elements
-
inline virtual void *
-
template<typename
T, Cubism::EntityTypeEntity, size_tDIM, typenameBlockAlloc= AlignedBlockAllocator<T>>
classCubism::Block::Data: public Cubism::Block::DataBase¶ Generic block data.
Data type that manages memory allocation and data access for the specified index range spanned by the data.
Note
The memory allocation for a block may be larger than the minimum required data specified by the index range.
- Template Parameters
T: Data typeEntity: Entity typeDIM: Data dimensionalityBlockAlloc: Allocator type
Public Functions
-
inline explicit
Data(const IndexRangeType &r)¶ Base constructor for single block allocation.
The index range defines the spatial dimensionality of the data. The block memory is touched by the thread that calls the constructor.
- Parameters
r: Index range of data
-
inline
Data(const Data &c, const MemoryOwner owner)¶ General purpose copy-constructor mainly for data views.
The block memory is touched by the thread that calls the constructor.
- Parameters
c: Data block to copy fromowner: Memory ownership
-
inline
Data(const IndexRangeType &r, DataType *ptr, const size_t bytes)¶ Low-level constructor for externally managed memory.
The block owns the memory but does not deallocate it at destruction.
- Parameters
r: Index range of data pointed to by ptrptr: Block data pointer to first elementbytes: Number of bytes of block data.
-
inline
Data(const Data &c)¶ Copy constructor.
Depending on ownership of the memory, copy is deep or shallow. Relevant for views.
- Parameters
c: Block data to copy from
-
inline
Data(Data &&c) noexcept¶ Move constructor.
Move constructions are always shallow. Ownership of the memory is inherited from the source.
- Parameters
c: Block data to copy from
-
inline
~Data() override¶ Virtual destructor.
-
inline virtual void *
getBlockPtr() override¶ Mutable pointer to address of first data element.
- Return
Address of first data block byte
-
inline virtual const void *
getBlockPtr() const override¶ Immutable pointer to address of first data element.
- Return
Address of first data block byte
-
inline virtual size_t
getBlockBytes() const override¶ Number of bytes occupied by block.
- Return
Number of block bytes
-
inline virtual size_t
getDataElementBytes() const override¶ Number of bytes occupied by a single data element.
- Return
Number of block bytes
-
inline virtual size_t
getBlockSize() const override¶ Number of data elements contained in block.
- Return
Number of block data elements
-
inline DataType *
getData()¶ Get pointer to data.
- Return
Pointer to first data element
-
inline const DataType *
getData() const¶ Get pointer to data.
- Return
constpointer to first data element
-
inline Data &
operator=(const Data &c)¶ Copy assignment operator.
Depending on ownership of memory, copy is deep or shallow. Relevant for views.
- Return
This instance with updated data
- Parameters
c: Block data to assign from
-
inline Data &
operator=(Data &&c)¶ Move assignment operator.
Move constructions are always shallow. Ownership of the memory is inherited from the source.
- Return
This instance with moved data
- Parameters
c:
-
inline DataType &
operator[](size_t i)¶ Linear data access.
- Return
Reference to data element
- Parameters
i: Local flat index
-
inline const DataType &
operator[](size_t i) const¶ Linear data access.
- Return
constreference to data element- Parameters
i: Local flat index
-
inline DataType &
operator[](const MultiIndex &p)¶ Linear data access.
- Return
Reference to data element
- Parameters
p: Local multi-dimensional index
-
inline const DataType &
operator[](const MultiIndex &p) const¶ Linear data access.
- Return
constreference to data element- Parameters
p: Local multi-dimensional index
-
inline DataType &
operator()(const Index ix, const Index iy = 0, const Index iz = 0)¶ Classic data access.
This operator is only supported for dimensions 1, 2 and 3. Accessing data with this operator has less latency than the multi-index sibling.
- Return
Reference to data element
- Parameters
ix: Index for first dimensioniy: Index for second dimensioniz: Index for third dimension
-
inline const DataType &
operator()(const Index ix, const Index iy = 0, const Index iz = 0) const¶ Classic data access.
This operator is only supported for dimensions 1, 2 and 3. Accessing data with this operator has less latency than the multi-index sibling.
- Return
constreference to data element- Parameters
ix: Index for first dimensioniy: Index for second dimensioniz: Index for third dimension
-
inline void
copyData(const Data &c)¶ Deep copy data.
Copies data unconditionally.
- Parameters
c: Block data to copy from
-
inline IndexRangeType
getIndexRange(const size_t = 0) const¶ Get index range.
- Return
Index range spanned by the data
-
inline bool
isMemoryOwner() const¶ Test for memory ownership.
- Return
True if memory is owned by this instance
-
inline MemoryOwner
getMemoryOwnership() const¶ Get memory ownership.
- Return
Enumeration type describing the memory ownership
-
inline virtual BlockBytes
getMemoryFootprint() const¶ Get byte utilization of block.
- Return
Structure of byte usage for this instance
Public Static Attributes
-
static constexpr Cubism::EntityType
EntityType= Entity¶ Specifies entity type of data.
-
struct
BlockBytes¶ Byte utilization compound.