openPMD-api
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
openPMD::RecordComponent Class Reference
Inheritance diagram for openPMD::RecordComponent:
Inheritance graph
[legend]
Collaboration diagram for openPMD::RecordComponent:
Collaboration graph
[legend]

Public Types

enum  Allocation { USER, API, AUTO }
 

Public Member Functions

RecordComponentsetUnitSI (double)
 
RecordComponentresetDataset (Dataset)
 Declare the dataset's type and extent. More...
 
uint8_t getDimensionality () const
 
Extent getExtent () const
 
template<typename T >
RecordComponentmakeConstant (T)
 Create a dataset with regular extent and constant value. More...
 
template<typename T >
RecordComponentmakeEmpty (uint8_t dimensions)
 Create a dataset with zero extent in each dimension. More...
 
RecordComponentmakeEmpty (Datatype dt, uint8_t dimensions)
 Non-template overload of RecordComponent::makeEmpty(). More...
 
bool empty () const
 Returns true if this is an empty record component. More...
 
template<typename T >
std::shared_ptr< T > loadChunk (Offset={ 0u }, Extent={ -1u })
 Load and allocate a chunk of data. More...
 
template<typename T >
void loadChunk (std::shared_ptr< T >, Offset, Extent)
 Load a chunk of data into pre-allocated memory. More...
 
template<typename T >
void storeChunk (std::shared_ptr< T >, Offset, Extent)
 
template<typename T_ContiguousContainer >
std::enable_if< traits::IsContiguousContainer< T_ContiguousContainer >::value >::type storeChunk (T_ContiguousContainer &, Offset={0u}, Extent={-1u})
 
template<typename T , typename F >
DynamicMemoryView< T > storeChunk (Offset, Extent, F &&createBuffer)
 Overload of storeChunk() that lets the openPMD API allocate a buffer. More...
 
template<typename T >
DynamicMemoryView< T > storeChunk (Offset, Extent)
 Overload of span-based storeChunk() that uses operator new() to create a buffer.
 
- Public Member Functions inherited from openPMD::BaseRecordComponent
double unitSI () const
 
BaseRecordComponentresetDatatype (Datatype)
 
Datatype getDatatype () const
 
bool constant () const
 Returns true if this is a constant record component. More...
 
ChunkTable availableChunks ()
 Get data chunks that are available to be loaded from the backend. More...
 
- Public Member Functions inherited from openPMD::AttributableInterface
Attribute getAttribute (std::string const &key) const
 Retrieve value of Attribute stored with provided key. More...
 
bool deleteAttribute (std::string const &key)
 Remove Attribute of provided value both logically and physically. More...
 
std::vector< std::string > attributes () const
 List all currently stored Attributes' keys. More...
 
size_t numAttributes () const
 Count all currently stored Attributes. More...
 
bool containsAttribute (std::string const &key) const
 Check whether am Attribute with a given key exists. More...
 
std::string comment () const
 Retrieve a user-supplied comment associated with the object. More...
 
AttributableInterfacesetComment (std::string const &comment)
 Populate Attribute corresponding to a comment with the user-supplied comment. More...
 
void seriesFlush ()
 Flush the corresponding Series object. More...
 
MyPath myPath () const
 The path to this object within its containing Series. More...
 
template<typename T >
bool setAttribute (std::string const &key, T value)
 Populate Attribute of provided name with provided value. More...
 
bool setAttribute (std::string const &key, char const value[])
 

Static Public Attributes

static constexpr const char *const SCALAR = "\vScalar"
 

Protected Member Functions

void readBase ()
 
- Protected Member Functions inherited from openPMD::AttributableInterface
 AttributableInterface (internal::AttributableData *)
 
template<typename T >
 AttributableInterface (T *attri)
 
const internal::SeriesInternalretrieveSeries () const
 
internal::SeriesInternalretrieveSeries ()
 
void seriesFlush (FlushLevel)
 
void flushAttributes ()
 
void readAttributes (ReadMode)
 
template<typename T >
readFloatingpoint (std::string const &key) const
 Retrieve the value of a floating point Attribute of user-defined precision with ensured type-safety. More...
 
template<typename T >
std::vector< T > readVectorFloatingpoint (std::string const &key) const
 Retrieve a vector of values of a floating point Attributes of user-defined precision with ensured type-safety. More...
 
AbstractIOHandlerIOHandler ()
 
const AbstractIOHandlerIOHandler () const
 
Writable *& parent ()
 
const Writableparent () const
 
Writablewritable ()
 
const Writablewritable () const
 
internal::AttributableDataget ()
 
const internal::AttributableDataget () const
 
bool dirty () const
 
bool & dirty ()
 
bool written () const
 
bool & written ()
 
const IterationcontainingIteration () const
 Returns the corresponding Iteration. More...
 
IterationcontainingIteration ()
 

Protected Attributes

std::shared_ptr< std::queue< IOTask > > m_chunks
 
std::shared_ptr< Attributem_constantValue
 
std::shared_ptr< bool > m_isEmpty = std::make_shared< bool >( false )
 
std::shared_ptr< bool > m_hasBeenExtended
 
std::shared_ptr< std::string > m_name = std::make_shared< std::string >()
 The same std::string that the parent class would pass as parameter to RecordComponent::flush(). More...
 
- Protected Attributes inherited from openPMD::BaseRecordComponent
std::shared_ptr< Datasetm_dataset
 
std::shared_ptr< bool > m_isConstant
 
- Protected Attributes inherited from openPMD::LegacyAttributable
std::shared_ptr< internal::AttributableDatam_attributableData
 
- Protected Attributes inherited from openPMD::AttributableInterface
internal::AttributableDatam_attri = nullptr
 

Friends

template<typename T , typename T_key , typename T_container >
class Container
 
class Iteration
 
class ParticleSpecies
 
template<typename T_elem >
class BaseRecord
 
class Record
 
class Mesh
 
template<typename >
class DynamicMemoryView
 

Additional Inherited Members

- Protected Types inherited from openPMD::AttributableInterface
enum  ReadMode { IgnoreExisting, OverrideExisting, FullyReread }
 

Member Function Documentation

◆ empty()

bool openPMD::RecordComponent::empty ( ) const

Returns true if this is an empty record component.

An empty record component has a defined dimensionality but zero extent and no value(s) stored in it.

Returns
true if an empty record component

◆ loadChunk() [1/2]

template<typename T >
std::shared_ptr< T > openPMD::RecordComponent::loadChunk ( Offset  = { 0u },
Extent  = { -1u } 
)

Load and allocate a chunk of data.

Set offset to {0u} and extent to {-1u} for full selection.

If offset is non-zero and extent is {-1u} the leftover extent in the record component will be selected.

◆ loadChunk() [2/2]

template<typename T >
void openPMD::RecordComponent::loadChunk ( std::shared_ptr< T >  ,
Offset  ,
Extent   
)

Load a chunk of data into pre-allocated memory.

shared_ptr for data must be pre-allocated, contiguous and large enough for extent

Set offset to {0u} and extent to {-1u} for full selection.

If offset is non-zero and extent is {-1u} the leftover extent in the record component will be selected.

◆ makeConstant()

template<typename T >
RecordComponent& openPMD::RecordComponent::makeConstant ( )

Create a dataset with regular extent and constant value.

In a constant record component, the value for each date in its extent is the same. Implemented by storing only a constant value as meta-data.

Template Parameters
Ttype of the stored value
Returns
A reference to this RecordComponent.

◆ makeEmpty() [1/2]

RecordComponent & openPMD::RecordComponent::makeEmpty ( Datatype  dt,
uint8_t  dimensions 
)

Non-template overload of RecordComponent::makeEmpty().

Uses the passed openPMD datatype to determine the template parameter.

Parameters
dtThe datatype of which to create an empty dataset.
dimensionsThe dimensionality of the dataset.
Returns
RecordComponent&

◆ makeEmpty() [2/2]

template<typename T >
RecordComponent& openPMD::RecordComponent::makeEmpty ( uint8_t  dimensions)

Create a dataset with zero extent in each dimension.

Implemented by creating a constant record component with a dummy value (default constructor of the respective datatype).

Parameters
dimensionsThe number of dimensions. Must be greater than zero.
Returns
A reference to this RecordComponent.

◆ resetDataset()

RecordComponent & openPMD::RecordComponent::resetDataset ( Dataset  d)

Declare the dataset's type and extent.

Calling this again after flushing will require resizing the dataset. Support for this depends on the backend. Unsupported are:

  • Changing the datatype.
  • Shrinking any dimension's extent.
  • Changing the number of dimensions.

Backend support for resizing datasets:

  • JSON: Supported
  • ADIOS1: Unsupported
  • ADIOS2: Supported as of ADIOS2 2.7.0
  • HDF5: (Currently) unsupported. Will be probably supported as soon as chunking is supported in HDF5.
Returns
RecordComponent&

◆ storeChunk()

template<typename T , typename F >
DynamicMemoryView< T > openPMD::RecordComponent::storeChunk ( Offset  ,
Extent  ,
F &&  createBuffer 
)

Overload of storeChunk() that lets the openPMD API allocate a buffer.

This may save memory if the openPMD backend in use is able to provide users a view into its own buffers, avoiding the need to allocate a new buffer.

Data can be written into the returned buffer until the next call to Series::flush() at which time the data will be read from.

In order to provide a view into backend buffers, this call must possibly create files and datasets in the backend, making it MPI-collective. In order to avoid this, calling Series::flush() prior to this is recommended to flush definitions.

Parameters
createBufferIf the backend in use has no special support for this operation, the openPMD API will fall back to creating a buffer, queuing it for writing and returning a view into that buffer to the user. The functor createBuffer will be called for this purpose. It consumes a length parameter of type size_t and should return a shared_ptr of type T to a buffer at least that length. In that case, using this API call is equivalent to (1) creating a shared pointer via createBuffer and (2) then using the regular storeChunk() API on it. If the backend supports it, the buffer is not read before the next flush point and becomes invalid afterwards.
Returns
View into a buffer that can be filled with data.

Member Data Documentation

◆ m_hasBeenExtended

std::shared_ptr< bool > openPMD::RecordComponent::m_hasBeenExtended
protected
Initial value:
=
std::make_shared< bool >( false )

◆ m_name

std::shared_ptr< std::string > openPMD::RecordComponent::m_name = std::make_shared< std::string >()
protected

The same std::string that the parent class would pass as parameter to RecordComponent::flush().

This is stored only upon RecordComponent::flush() if AbstractIOHandler::flushLevel is set to FlushLevel::SkeletonOnly (for use by the Span<T>-based overload of RecordComponent::storeChunk()).

Todo:
Merge functionality with ownKeyInParent?

The documentation for this class was generated from the following files: