15#ifndef DD_DATA_MODEL_TYPES_H_INCLUDED
16#define DD_DATA_MODEL_TYPES_H_INCLUDED
93 virtual void setName(
const std::string& name);
159 std::string description = {},
161 std::string unit_name = {},
162 std::string minimum_value = {},
163 std::string maximum_value = {},
179 DataType(
const std::initializer_list<std::string>& initializer);
211 void setName(
const std::string& name)
override;
265 void setMin(
const std::string& minimum_value);
280 void setMax(
const std::string& maximum_value);
303 void notify(
const std::string& additional_info);
304 size_t _bit_size = 0;
305 std::string _description = {};
307 std::string _unit_name = {};
308 std::string _minimum_value = {};
309 std::string _maximum_value = {};
374 const std::string& data_type_name,
375 const std::vector<Element>& elements = {});
418 void setName(
const std::string& name)
override;
436 const std::string& additional_info);
440 const std::string& additional_info);
442 std::string _data_type_name = {};
726 size_t _alignment = Alignment::e_invalid;
789 std::string type_name,
793 std::string description = {},
794 std::string comment = {},
795 std::string unit_name = {},
796 std::string value = {},
797 std::string minimum_value = {},
798 std::string maximum_value = {},
799 std::string default_value = {},
800 std::string scale = {},
801 std::string offset = {});
827 std::string type_name,
831 std::string description,
833 std::string unit_name,
835 std::string minimum_value,
836 std::string maximum_value,
837 std::string default_value,
840 std::string valid_element_count);
994 void setMin(
const std::string& minimum_value);
1009 void setMax(
const std::string& maximum_value);
1055 void notifyChangeSerialized(
const std::string& additional_info)
override;
1056 void notifyChangeDeserialized(
const std::string& additional_info)
override;
1060 std::string _type_name;
1061 std::string _description;
1062 std::string _unit_name;
1063 std::string _comment;
1066 std::string _minimum_value;
1067 std::string _maximum_value;
1068 std::string _default_value;
1070 std::string _offset;
1086 const std::string& struct_version =
"1",
1088 const std::string& comment = {},
1090 const std::vector<Element>& elements = {});
1197 const std::string& additional_info);
1201 const std::string& additional_info);
1210 std::string _struct_version;
1212 std::string _comment;
1280 std::string version,
1281 std::string parent = {},
1282 const std::vector<Property>& properties = {});
1359 const std::string& additional_info);
1363 const std::string& additional_info);
1365 std::string _version = {};
1366 std::string _parent = {};
1407 static constexpr auto _other_types =
"enumtype, structtype or streammetatype";
1423 static constexpr auto _other_types =
"datatype, streammetatype or structtype";
1439 static constexpr auto _other_types =
"datatype, enumtype or streammetatype";
Definition dd_common_types.h:378
static ByteOrder getPlatformDefault()
Get the current Platform Byteorder.
DDL Version.
Definition dd_common_types.h:203
observable DataDefinition object class to describe (POD) DataType.
Definition datamodel_types.h:113
const std::string & getUnitName() const
Get the Unit Name.
size_t getBitSize() const
Get the Bit Size.
void setArraySize(OptionalSize array_size)
Set the Array Size object.
DataType & operator=(const DataType &)=default
copy assignment operator.
void setMax(const std::string &maximum_value)
Set the Max (introduced in DDL 3.0)
bool operator==(const DataType &other) const
equality operator.
void setName(const std::string &name) override
Set the Name.
OptionalSize getArraySize() const
Get the Array Size (optional)
void setUnitName(const std::string &unit_name)
Set the Unit Name.
DataType & operator=(DataType &&)=default
move assignment operator.
TypeOfType getTypeOfType() const override
Get the Type Of the Type (data_type, enum_type, struct_type, stream_meta_type).
const std::string & getMax() const
Get the Max Value for information (introduced in DDL 3.0)
const std::string & getMin() const
Get the Min Value for information (introduced in DDL 3.0)
void setMin(const std::string &minimum_value)
Set the Min (introduced in DDL 3.0)
DataType()
default CTOR
Definition datamodel_types.h:119
void setBitSize(size_t size)
Set the Bit Size.
bool operator!=(const DataType &other) const
non equality operator.
const std::string & getDescription() const
Get the Description.
DataType(const std::initializer_list< std::string > &initializer)
CTOR with initializer.
void setDescription(const std::string &description)
Set the Description.
DataType(DataType &&)=default
move CTOR
DataType(std::string name, size_t bit_size, std::string description={}, OptionalSize array_size={}, std::string unit_name={}, std::string minimum_value={}, std::string maximum_value={}, OptionalSize default_type_alignment={})
CTOR.
virtual ~DataType()=default
DTOR.
const OptionalSize & getDefaultAlignment() const
Get the default Alignment if set.
DataType(const DataType &)=default
copy CTOR
observable DataDefinition object class to describe EnumType.
Definition datamodel_types.h:320
void setName(const std::string &name) override
Set the Name.
EnumType()=delete
no default CTOR
TypeOfType getTypeOfType() const override
Get the Type Of the Type (data_type, enum_type, struct_type, stream_meta_type).
Elements & getElements()
Get the Elements object.
EnumType(const EnumType &other)
Copy CTOR.
bool operator==(const EnumType &other) const
equality operator.
const Elements & getElements() const
Get the Elements object.
EnumType & operator=(EnumType &&)
move assignment operator
const std::string & getDataTypeName() const
Get the Data Type Name.
KeyValuePair Element
Enum type element defintion as Name Value pair.
Definition datamodel_types.h:326
bool operator!=(const EnumType &other) const
non equality operator.
EnumType & operator=(const EnumType &other)
copy assignment operator
void setDataTypeName(const std::string &data_type_name)
Set the Data Type Name.
utility::TypeAccessMap< Element, EnumType > Elements
container class for elements in EnumType
Definition datamodel_types.h:331
EnumType(const std::string &name, const std::string &data_type_name, const std::vector< Element > &elements={})
Construct a new Enum Type object.
virtual ~EnumType()=default
DTOR.
EnumType(EnumType &&)
move CTOR.
observable KeyValuePair
Definition datamodel_keyvalue.h:33
DeserializedInfo(const DeserializedInfo &)=default
copy CTOR
DeserializedInfo & operator=(DeserializedInfo &&)=default
move assignment operator
bool operator==(const DeserializedInfo &other) const
equality operator.
DeserializedInfo(const std::initializer_list< size_t > &intializer)
CTOR.
virtual ~DeserializedInfo()=default
DTOR.
DeserializedInfo(size_t alignment)
CTOR.
DeserializedInfo(DeserializedInfo &&)=default
move CTOR
DeserializedInfo & operator=(const DeserializedInfo &)=default
copy assignment operator
DeserializedInfo()
Default CTOR.
Definition datamodel_types.h:650
void setAlignment(size_t alignment)
Set the Alignment.
virtual size_t getAlignment() const
Get the Alignment.
virtual void notifyChangeDeserialized(const std::string &)
Forwarding the notification.
Definition datamodel_types.h:723
observable DataDefinition object class for a Element of a StructType.
Definition datamodel_types.h:736
const std::string & getDefault() const
Get the Default object.
void setName(const std::string &name)
Set the Name.
void setOffset(const std::string &offset)
Set the Offset (for information only)
void setArraySize(const ArraySize &array_size)
Set the Array Size.
void setMin(const std::string &minimum_value)
Set the Min (for information only).
const std::string & getScale() const
Get the Scale (for information only)
bool operator==(const Element &other) const
equality operator.
const std::string & getOffset() const
Get the Offset (for information only)
void setMax(const std::string &maximum_value)
Set the Max (for information only).
const std::string & getDescription() const
Get the Description.
const std::string & getComment() const
Get the Comment.
Element & operator=(Element &&other) noexcept
move assignment operator
void setUnitName(const std::string &unit_name)
Set the Unit Name.
bool operator!=(const Element &other) const
non equality operator.
void setComment(const std::string &comment)
Set the Comment object.
const std::string & getUnitName() const
Get the Unit Name.
void setScale(const std::string &scale)
Set the Scale (for information only)
const std::string & getName() const
Get the Name.
Element(Element &&other)
move CTOR
void setTypeName(const std::string &type_name)
Set the Type Name.
void setValue(const std::string &value)
Set the Value This is only valid if the data type is set to an enum type where this constant value is...
void setDefault(const std::string &default_value)
Set the Default Value. This is only valid if the default value is convertable to the datatype used.
Element(const Element &other)
copy CTOR
const std::string & getValue() const
Get the value.
void setDescription(const std::string &description)
Set the Description.
Element(std::string name, std::string type_name, DeserializedInfo deserialized_info, SerializedInfo serialized_info, dd::ArraySize array_size={}, std::string description={}, std::string comment={}, std::string unit_name={}, std::string value={}, std::string minimum_value={}, std::string maximum_value={}, std::string default_value={}, std::string scale={}, std::string offset={})
CTOR.
Element & operator=(const Element &other)
copy assignment operator
Element(std::string name, std::string type_name, DeserializedInfo deserialized_info, SerializedInfo serialized_info, dd::ArraySize array_size, std::string description, std::string comment, std::string unit_name, std::string value, std::string minimum_value, std::string maximum_value, std::string default_value, std::string scale, std::string offset, std::string valid_element_count)
CTOR.
const std::string & getMin() const
Get the Min (for information only). This was introduced in DDL 3.0.
const std::string & getTypeName() const
Get the Type Name.
const std::string & getMax() const
Get the Max (for information only). This was introduced in DDL 3.0.
const std::string & getValidElementCount() const
Get the Valid Element Count element name.
const ArraySize & getArraySize() const
Get the Array Size.
void setValidElementCount(const std::string &valid_element_count)
Set the Valid Element Count element name. This value is usually only used if array size is greater th...
OptionalSize getNumBits() const
Get the Num Bits (if set)
SerializedInfo(const std::initializer_list< size_t > &intializer)
CTOR with string list initializing.
OptionalSize getBitPos() const
Get the Bit Pos (if set)
virtual ~SerializedInfo()=default
DTOR.
void setNumBits(OptionalSize num_bits)
Set the Num Bits.
bool operator==(const SerializedInfo &other) const
equality operator.
SerializedInfo & operator=(const SerializedInfo &)=default
copy assignment operator
SerializedInfo()
default CTOR.
Definition datamodel_types.h:499
OptionalSize getBytePos() const
Get the Byte Pos.
virtual void notifyChangeSerialized(const std::string &)
notification forwarding of serialized information to the StructType::Element object.
Definition datamodel_types.h:632
SerializedInfo(const SerializedInfo &)=default
copy CTOR
SerializedInfo(SerializedInfo &&)=default
move CTOR
SerializedInfo(OptionalSize byte_pos, ByteOrder byte_order=ByteOrderDefault::getPlatformDefault(), OptionalSize bit_pos={}, OptionalSize num_bits={})
CTOR.
void setBytePos(OptionalSize byte_pos, bool prevent_notification=false)
Set the Byte Pos.
void setBitPos(OptionalSize bit_pos, bool prevent_notification=false)
Sets the Bit Pos.
SerializedInfo & operator=(SerializedInfo &&)=default
move assignment operator
void setByteOrder(ByteOrder byte_order)
Set the Byte Order.
ByteOrder getByteOrder() const
Get the Byte Order.
observable DataDefinition object class to describe StructType.
Definition datamodel_types.h:453
StructType(const std::string &name, const std::string &struct_version="1", OptionalSize alignment={}, const std::string &comment={}, dd::Version ddl_version=dd::Version(0, 0), const std::vector< Element > &elements={})
CTOR.
void setComment(const std::string &comment)
Set the Comment.
StructType(const StructType &other)
copy CTOR
virtual ~StructType()=default
DTOR.
utility::TypeAccessList< Element, StructType > Elements
container of elements for the StructType::Element.
Definition datamodel_types.h:1177
StructType()=delete
no default CTOR
Elements & getElements()
Get the Elements object.
void setAlignment(OptionalSize alignment)
Set the Alignment.
const std::string & getVersion() const
Get the set Version (the struct version! Not the DDL Version!)
bool operator!=(const StructType &other) const
non equality operator.
StructType & operator=(const StructType &other)
copy assignment operator
void setVersion(const std::string &struct_version)
Get the Version (the struct version! Not the DDL Version!)
OptionalSize getAlignment() const
Get the Alignment (if set)
void setName(const std::string &name) override
Set the Name.
StructType & operator=(StructType &&other)
move assignment operator.
const Elements & getElements() const
Get the Elements object.
StructType(StructType &&other)
move CTOR.
void setLanguageVersion(const Version &ddl_version)
Set the Language Version.
TypeOfType getTypeOfType() const override
Get the Type Of the Type (data_type, enum_type, struct_type, stream_meta_type).
const std::string & getComment() const
Get the Comment.
bool operator==(const StructType &other) const
equality operator.
Version getLanguageVersion() const
Get the set language Version.
virtual TypeOfType getTypeOfType() const =0
Get the Type Of the Type (data_type, enum_type, struct_type, stream_meta_type).
std::string _name
name storage value
Definition datamodel_types.h:103
virtual void setName(const std::string &name)
Set the Name.
virtual ~TypeBase()=default
DTOR.
TypeBase(TypeBase &&)=default
move CTOR
TypeBase(std::string name)
CTOR.
TypeBase & operator=(const TypeBase &)=default
copy assignment operator
TypeBase & operator=(TypeBase &&)=default
move assignment operator
TypeBase(const TypeBase &)=default
copy CTOR
const std::string & getName() const
Get the Name.
Utility class for observable named items where the order is important.
Definition access_list.h:87
Element access_type
Definition access_list.h:90
std::unordered_map< std::string_view, value_type > container_named_type
Definition access_list.h:96
Utility class for observable named items where the order is NOT important.
Definition access_map.h:79
Element access_type
Definition access_map.h:82
definition of the datamodel namespace
Definition datamodel_base.h:28
utility::ModelSubjectUtility< TYPE, ModelEventCode > ModelSubject
Subject template class that is observable.
Definition datamodel_base.h:187
ModelEventCode
Model event code for the data model observer.
Definition datamodel_base.h:34
Definition datamodel_keyvalue.h:160
ModelSubjectUtility< T, TypeAccessMapEventCode > TypeAccessMapSubject
helper template to observe map content.
Definition access_map.h:61
ModelSubjectUtility< T, TypeAccessListEventCode > TypeAccessListSubject
helper template to observe list content.
Definition access_list.h:69
TypeAccessListEventCode
Internal event code to inform the parent DD Object about the change of an item within the list.
Definition access_list.h:43
TypeAccessMapEventCode
Internal event code to inform the parent DD Object about the change of an item within the list.
Definition access_map.h:37
definition of the dd namespace
Definition datamodel_base.h:26
ByteOrder
Definition dd_common_types.h:152
@ e1
Definition dd_common_types.h:100
utility::Optional< size_t > OptionalSize
Optional Size Type.
Definition dd_common_types.h:38
TypeOfType
Classification of a Type.
Definition dd_common_types.h:44
@ invalid_type
the type is unknown
Definition dd_common_types.h:49
definition of the ddl namespace
Definition codec.h:21
helper union class for an element that uses one of the datatype, enumtype, structtype
Definition datamodel_types.h:1374
std::shared_ptr< datamodel::StructType > _struct_type
is set to an valid reference if the type is struct_type!
Definition datamodel_types.h:1391
std::shared_ptr< datamodel::EnumType > _enum_type
is set to an valid reference if the type is enum_type!
Definition datamodel_types.h:1387
std::shared_ptr< datamodel::DataType > _data_type
is set to an valid reference if the type is data_type OR enum_type!
Definition datamodel_types.h:1383
TypeOfType _type_of_type
the type of the type used (if valid)
Definition datamodel_types.h:1379
static std::string getDifference(const ddl::dd::datamodel::DataType &left, const ddl::dd::datamodel::DataType &right)
Get the Difference.
static constexpr auto _other_types
validation other type
Definition datamodel_types.h:1407
static constexpr auto _other_types
validation other type
Definition datamodel_types.h:1423
static std::string getDifference(const ddl::dd::datamodel::EnumType &left, const ddl::dd::datamodel::EnumType &right)
Get the Difference.
static std::string getDifference(const ddl::dd::datamodel::StructType &left, const ddl::dd::datamodel::StructType &right)
Get the Difference.
static constexpr auto _other_types
validation other type
Definition datamodel_types.h:1439
static constexpr auto _other_types
validation other type
Definition datamodel_types.h:1455
static std::string getDifference(const ddl::dd::datamodel::StructType::Element &left, const ddl::dd::datamodel::StructType::Element &right)
Get the Difference.
Validation helper template for clear excpetion messages.
Definition access_validation.h:37