| 
| const std::vector< Member > &  | members () const | 
|   | Accesses the members in increasing displacement order.  
  | 
|   | 
| Datatype_sptr  | densify () const override | 
|   | Creates a new datatype as the dense copy of this one.  
  | 
|   | 
| Datatype_sptr  | evaluate (Context &) const override | 
|   | Creates a new datatype by resolving the value of all metadata references.  
  | 
|   | 
| bool  | dense () const override | 
|   | Indicate if the datatype is dense or not.  
  | 
|   | 
| size_t  | datasize () const override | 
|   | Computes the data size of a type, excluding potentially unused memory from a sparse type.  
  | 
|   | 
| size_t  | buffersize () const override | 
|   | Computes the data size of a type, including potentially unused memory from a sparse type.  
  | 
|   | 
| size_t  | alignment () const override | 
|   | Returns the required alignment for a type.  
  | 
|   | 
| bool  | simple () const override | 
|   | Tells if data can be copied as bytes (if type is dense) and doesn't need a destroyer.  
  | 
|   | 
| void *  | data_to_dense_copy (void *to, const void *) const override | 
|   | Creates a dense deep copy of data.  
  | 
|   | 
| void *  | data_from_dense_copy (void *to, const void *) const override | 
|   | Creates a sparse deep copy of dense data.  
  | 
|   | 
| Datatype_sptr  | member (const char *name) const override | 
|   | Access the type of the member with the provided name.  
  | 
|   | 
| std::pair< void *, Datatype_sptr >  | member (const char *name, void *data) const override | 
|   | Access the type and value of the member with the provided name.  
  | 
|   | 
| void  | destroy_data (void *) const override | 
|   | Delete data whose type is described by the Datatype.  
  | 
|   | 
| std::string  | debug_string () const override | 
|   | Returns the datatype yaml representation as a string.  
  | 
|   | 
| bool  | operator== (const Datatype &) const override | 
|   | Test for equality.  
  | 
|   | 
|   | Datatype (const Attributes_map &attributes={}) | 
|   | Creates a new datatype.  
  | 
|   | 
|   | ~Datatype () override | 
|   | 
| virtual bool  | operator== (const Datatype &other) const =0 | 
|   | Test for equality.  
  | 
|   | 
| bool  | operator!= (const Datatype &other) const | 
|   | Test for inequality.  
  | 
|   | 
| virtual Datatype_sptr  | densify () const =0 | 
|   | Creates a new datatype as the dense copy of this one.  
  | 
|   | 
| virtual bool  | dense () const =0 | 
|   | Indicate if the datatype is dense or not.  
  | 
|   | 
| virtual size_t  | datasize () const =0 | 
|   | Computes the data size of a type, excluding potentially unused memory from a sparse type.  
  | 
|   | 
| virtual size_t  | buffersize () const =0 | 
|   | Computes the data size of a type, including potentially unused memory from a sparse type.  
  | 
|   | 
| virtual size_t  | alignment () const =0 | 
|   | Returns the required alignment for a type.  
  | 
|   | 
| virtual bool  | simple () const =0 | 
|   | Tells if data can be copied as bytes (if type is dense) and doesn't need a destroyer.  
  | 
|   | 
| virtual void *  | data_to_dense_copy (void *to, const void *from) const =0 | 
|   | Creates a dense deep copy of data.  
  | 
|   | 
| virtual void *  | data_from_dense_copy (void *to, const void *from) const =0 | 
|   | Creates a sparse deep copy of dense data.  
  | 
|   | 
| virtual Datatype_sptr  | index (size_t index) const | 
|   | Access the type of the element at the provided index.  
  | 
|   | 
| virtual std::pair< void *, Datatype_sptr >  | index (size_t index, void *data) const | 
|   | Access the type and value of the element at the provided index.  
  | 
|   | 
| virtual Datatype_sptr  | slice (size_t start_index, size_t end_index) const | 
|   | Access the type of the elements slice between the provided indices.  
  | 
|   | 
| virtual std::pair< void *, Datatype_sptr >  | slice (size_t start_index, size_t end_index, void *data) const | 
|   | Access the type and value of the elements slice between the provided indices.  
  | 
|   | 
| virtual Datatype_sptr  | member (const char *name) const | 
|   | Access the type of the member with the provided name.  
  | 
|   | 
| virtual std::pair< void *, Datatype_sptr >  | member (const char *name, void *data) const | 
|   | Access the type and value of the member with the provided name.  
  | 
|   | 
| virtual Datatype_sptr  | dereference () const | 
|   | Access the type referenced by this.  
  | 
|   | 
| virtual std::pair< void *, Datatype_sptr >  | dereference (void *data) const | 
|   | Access the type and value referenced by this.  
  | 
|   | 
| virtual void  | destroy_data (void *ptr) const =0 | 
|   | Delete data whose type is described by the Datatype.  
  | 
|   | 
| virtual std::string  | debug_string () const =0 | 
|   | Returns the datatype yaml representation as a string.  
  | 
|   | 
|   | Datatype_template (const Attributes_map &attributes={}) | 
|   | Creates datatype template with given attributes.  
  | 
|   | 
|   | Datatype_template (PC_tree_t datatype_tree) | 
|   | Creates datatype template.  
  | 
|   | 
| virtual  | ~Datatype_template () | 
|   | Destroys the template.  
  | 
|   | 
| virtual Datatype_sptr  | evaluate (Context &ctx) const =0 | 
|   | Creates a new datatype by resolving the value of all metadata references.  
  | 
|   | 
| Expression  | attribute (const std::string &attribute_name) const | 
|   | Returns attribute of given name as Expression.  
  | 
|   | 
| const Attributes_map &  | attributes () const | 
|   | Returns all attributes as a unordered map.  
  | 
|   | 
A Record_datatype is a Datatype that represents a fixed number of elements of potentially different types layed out in a specific way in memory. 
Each element is given a name to access it.