PDI 1.6.0

the PDI data interface

PDI::Datatype Class Referenceabstract

A Datatype is a Datatype_template that accepts no argument. More...

Inheritance diagram for PDI::Datatype:
PDI::Datatype_template PDI::Array_datatype PDI::Pointer_datatype PDI::Record_datatype PDI::Scalar_datatype PDI::Tuple_datatype

Public Member Functions

 Datatype (const Attributes_map &attributes={})
 Creates a new datatype. More...
 
 ~Datatype () override
 
virtual bool operator== (const Datatype &other) const =0
 Test for equality. More...
 
bool operator!= (const Datatype &other) const
 Test for inequality. More...
 
virtual Datatype_sptr densify () const =0
 Creates a new datatype as the dense copy of this one. More...
 
virtual bool dense () const =0
 Indicate if the datatype is dense or not. More...
 
virtual size_t datasize () const =0
 Computes the data size of a type, excluding potentially unused memory from a sparse type. More...
 
virtual size_t buffersize () const =0
 Computes the data size of a type, including potentially unused memory from a sparse type. More...
 
virtual size_t alignment () const =0
 Returns the required alignment for a type. More...
 
virtual bool simple () const =0
 Tells if data can be copied as bytes (if type is dense) and doesn't need a destroyer. More...
 
virtual void * data_to_dense_copy (void *to, const void *from) const =0
 Creates a dense deep copy of data. More...
 
virtual void * data_from_dense_copy (void *to, const void *from) const =0
 Creates a sparse deep copy of dense data. More...
 
virtual Datatype_sptr index (size_t index) const
 Access the type of the element at the provided index. More...
 
virtual std::pair< void *, Datatype_sptrindex (size_t index, void *data) const
 Access the type and value of the element at the provided index. More...
 
virtual Datatype_sptr slice (size_t start_index, size_t end_index) const
 Access the type of the elements slice between the provided indices. More...
 
virtual std::pair< void *, Datatype_sptrslice (size_t start_index, size_t end_index, void *data) const
 Access the type and value of the elements slice between the provided indices. More...
 
virtual Datatype_sptr member (const char *name) const
 Access the type of the member with the provided name. More...
 
virtual std::pair< void *, Datatype_sptrmember (const char *name, void *data) const
 Access the type and value of the member with the provided name. More...
 
virtual Datatype_sptr dereference () const
 Access the type referenced by this. More...
 
virtual std::pair< void *, Datatype_sptrdereference (void *data) const
 Access the type and value referenced by this. More...
 
virtual void destroy_data (void *ptr) const =0
 Delete data whose type is described by the Datatype. More...
 
virtual std::string debug_string () const =0
 Returns the datatype yaml representation as a string. More...
 
- Public Member Functions inherited from PDI::Datatype_template
 Datatype_template (const Attributes_map &attributes={})
 Creates datatype template with given attributes. More...
 
 Datatype_template (PC_tree_t datatype_tree)
 Creates datatype template. More...
 
virtual ~Datatype_template ()
 Destroys the template. More...
 
virtual Datatype_sptr evaluate (Context &ctx) const =0
 Creates a new datatype by resolving the value of all metadata references. More...
 
Expression attribute (const std::string &attribute_name) const
 Returns attribute of given name as Expression. More...
 
const Attributes_mapattributes () const
 Returns all attributes as a unordered map. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from PDI::Datatype_template
static void load_basic_datatypes (Context &ctx)
 Adds to the context the basic Array, Record, C and Fortran datatypes. More...
 
static void load_user_datatypes (Context &ctx, PC_tree_t types_tree)
 Adds to the context the user defined datatypes. More...
 
- Protected Attributes inherited from PDI::Datatype_template
Attributes_map m_attributes
 

Detailed Description

A Datatype is a Datatype_template that accepts no argument.

It represents the memory layout of data and supports some simple operations on it:

  • accessing its content
  • data copy and destruction

Constructor & Destructor Documentation

◆ Datatype()

PDI::Datatype::Datatype ( const Attributes_map attributes = {})

Creates a new datatype.

Parameters
[in]attributesattributes of the datatype

◆ ~Datatype()

PDI::Datatype::~Datatype ( )
override

Member Function Documentation

◆ operator==()

virtual bool PDI::Datatype::operator== ( const Datatype other) const
pure virtual

Test for equality.

Parameters
otherthe Datatype to compare
Returns
true if the Datatype's are equal

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ operator!=()

bool PDI::Datatype::operator!= ( const Datatype other) const

Test for inequality.

Parameters
otherthe Datatype to compare
Returns
true if the Datatype's are different

◆ densify()

virtual Datatype_sptr PDI::Datatype::densify ( ) const
pure virtual

Creates a new datatype as the dense copy of this one.

Returns
the type that is produced

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ dense()

virtual bool PDI::Datatype::dense ( ) const
pure virtual

Indicate if the datatype is dense or not.

Returns
whether the datatype is dense

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ datasize()

virtual size_t PDI::Datatype::datasize ( ) const
pure virtual

Computes the data size of a type, excluding potentially unused memory from a sparse type.

Returns
the size in bytes

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ buffersize()

virtual size_t PDI::Datatype::buffersize ( ) const
pure virtual

Computes the data size of a type, including potentially unused memory from a sparse type.

Returns
the size in bytes

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ alignment()

virtual size_t PDI::Datatype::alignment ( ) const
pure virtual

Returns the required alignment for a type.

Returns
the size in bytes

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ simple()

virtual bool PDI::Datatype::simple ( ) const
pure virtual

Tells if data can be copied as bytes (if type is dense) and doesn't need a destroyer.

Returns
true if data has trivial copier and destroyer, false otherwise

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.

◆ data_to_dense_copy()

virtual void * PDI::Datatype::data_to_dense_copy ( void *  to,
const void *  from 
) const
pure virtual

Creates a dense deep copy of data.

Parameters
[in]tothe pointer to the allocated memory to fill (dense data)
[in]fromthe pointer to the copied data (size of buffersize)
Returns
updated ‘to’ pointer

Implemented in PDI::Array_datatype, PDI::Tuple_datatype, PDI::Record_datatype, PDI::Pointer_datatype, and PDI::Scalar_datatype.

◆ data_from_dense_copy()

virtual void * PDI::Datatype::data_from_dense_copy ( void *  to,
const void *  from 
) const
pure virtual

Creates a sparse deep copy of dense data.

Parameters
[in]tothe pointer to the allocated memory to fill (size of buffersize)
[in]fromthe pointer to the copied data (dense data)
Returns
updated ‘to’ pointer

Implemented in PDI::Array_datatype, PDI::Tuple_datatype, PDI::Record_datatype, PDI::Pointer_datatype, and PDI::Scalar_datatype.

◆ index() [1/2]

virtual Datatype_sptr PDI::Datatype::index ( size_t  index) const
virtual

Access the type of the element at the provided index.

Parameters
indexthe index where to look
Returns
the Datatype of the indexed sub-element

Reimplemented in PDI::Array_datatype, PDI::Pointer_datatype, and PDI::Tuple_datatype.

◆ index() [2/2]

virtual std::pair< void *, Datatype_sptr > PDI::Datatype::index ( size_t  index,
void *  data 
) const
virtual

Access the type and value of the element at the provided index.

Parameters
indexthe index where to look
datathe address of the element to index
Returns
the Datatype and address of the indexed sub-element

Reimplemented in PDI::Array_datatype, PDI::Pointer_datatype, and PDI::Tuple_datatype.

◆ slice() [1/2]

virtual Datatype_sptr PDI::Datatype::slice ( size_t  start_index,
size_t  end_index 
) const
virtual

Access the type of the elements slice between the provided indices.

Parameters
start_indexthe index where to start
end_indexthe index where to end
Returns
the Datatype of the slice

Reimplemented in PDI::Array_datatype, PDI::Pointer_datatype, and PDI::Tuple_datatype.

◆ slice() [2/2]

virtual std::pair< void *, Datatype_sptr > PDI::Datatype::slice ( size_t  start_index,
size_t  end_index,
void *  data 
) const
virtual

Access the type and value of the elements slice between the provided indices.

Parameters
start_indexthe index where to start
end_indexthe index where to end
datathe address of the element to slice
Returns
the Datatype and address of the slice

Reimplemented in PDI::Array_datatype, PDI::Pointer_datatype, and PDI::Tuple_datatype.

◆ member() [1/2]

virtual Datatype_sptr PDI::Datatype::member ( const char *  name) const
virtual

Access the type of the member with the provided name.

Parameters
namethe name of the member to access
Returns
the Datatype of the member

Reimplemented in PDI::Pointer_datatype, and PDI::Record_datatype.

◆ member() [2/2]

virtual std::pair< void *, Datatype_sptr > PDI::Datatype::member ( const char *  name,
void *  data 
) const
virtual

Access the type and value of the member with the provided name.

Parameters
namethe name of the member to access
datathe address of the element whose member to access
Returns
the Datatype and address of the member

Reimplemented in PDI::Pointer_datatype, and PDI::Record_datatype.

◆ dereference() [1/2]

virtual Datatype_sptr PDI::Datatype::dereference ( ) const
virtual

Access the type referenced by this.

Returns
the Datatype referenced

Reimplemented in PDI::Pointer_datatype.

◆ dereference() [2/2]

virtual std::pair< void *, Datatype_sptr > PDI::Datatype::dereference ( void *  data) const
virtual

Access the type and value referenced by this.

Parameters
datathe address of the reference
Returns
the Datatype and address referenced

Reimplemented in PDI::Pointer_datatype.

◆ destroy_data()

virtual void PDI::Datatype::destroy_data ( void *  ptr) const
pure virtual

Delete data whose type is described by the Datatype.

This does not deallocate the buffer used to store the data.

Parameters
[in]ptrto the data to free

Implemented in PDI::Array_datatype, PDI::Record_datatype, PDI::Tuple_datatype, PDI::Pointer_datatype, and PDI::Scalar_datatype.

◆ debug_string()

virtual std::string PDI::Datatype::debug_string ( ) const
pure virtual

Returns the datatype yaml representation as a string.

Returns
the datatype yaml representation as a string

Implemented in PDI::Array_datatype, PDI::Pointer_datatype, PDI::Record_datatype, PDI::Scalar_datatype, and PDI::Tuple_datatype.


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