ADTF  3.18.2
datamodel_datadefinition.h
Go to the documentation of this file.
1 
15 #ifndef DD_DATA_MODEL_H_INCLUDED
16 #define DD_DATA_MODEL_H_INCLUDED
17 
24 #include <ddl/dd/dd_common_types.h>
26 
27 #include <string>
28 #include <vector>
29 
30 namespace ddl {
31 
32 namespace dd {
33 
34 namespace datamodel {
35 
55 class DataDefinition : public ModelSubject<Header>,
56  private ModelObserver<Header>,
57  public ModelSubject<BaseUnit>,
58  public ModelSubject<UnitPrefix>,
59  public ModelSubject<Unit>,
60  public ModelSubject<DataType>,
61  public ModelSubject<EnumType>,
62  public ModelSubject<StructType>,
63  public ModelSubject<StreamMetaType>,
64  public ModelSubject<Stream>,
65  public InfoMap {
66 public:
77  DataDefinition(const dd::Version& ddl_version);
78 
90 
104 
105  virtual ~DataDefinition() = default;
106 
107 public:
125  friend BaseUnits;
126  friend UnitPrefixes;
127  friend Units;
128  friend DataTypes;
129  friend EnumTypes;
130  friend StructTypes;
131  friend StreamMetaTypes;
132  friend Streams;
134 
141  void setVersion(const dd::Version& ddl_version);
148 
154  std::shared_ptr<const Header> getHeader() const;
160  std::shared_ptr<Header> getHeader();
166  void setHeader(const Header& header);
167 
173  const BaseUnits& getBaseUnits() const;
180 
193 
199  const Units& getUnits() const;
206 
212  const DataTypes& getDataTypes() const;
219 
225  const EnumTypes& getEnumTypes() const;
232 
238  const StructTypes& getStructTypes() const;
245 
258 
264  const Streams& getStreams() const;
271 
280  bool containsType(const std::string& type_name) const;
293  TypeOfType getTypeOfType(const std::string& type_name) const;
294 
303  bool containsUnit(const std::string& unit_name) const;
313  TypeOfUnit getTypeOfUnit(const std::string& unit_name) const;
314 
319  bool isEmpty() const;
320 
321 private:
322  bool validateContains(const BaseUnits::access_type& base_unit) const;
323  bool validateContains(const UnitPrefixes::access_type& unit_prefix) const;
324  bool validateContains(const Units::access_type& unit) const;
325  bool validateContains(const DataTypes::access_type& data_type) const;
326  bool validateContains(const EnumTypes::access_type& enum_type) const;
327  bool validateContains(const StructTypes::access_type& struct_type) const;
328  bool validateContains(const StreamMetaTypes::access_type& stream_meta_type) const;
329  bool validateContains(const Streams::access_type& stream) const;
330 
331  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
333  const std::string& additional_info);
334  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
335  UnitPrefixes::access_type& unit_prefix,
336  const std::string& additional_info);
337  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
339  const std::string& additional_info);
340  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
342  const std::string& additional_info);
343  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
345  const std::string& additional_info);
346  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
348  const std::string& additional_info);
349  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
351  const std::string& additional_info);
352  void notifyChangedMapContent(utility::TypeAccessMapEventCode code,
353  Streams::access_type& stream,
354  const std::string& additional_info);
355 
356  void modelChanged(datamodel::ModelEventCode event_code,
357  datamodel::Header& changed_subject,
358  const std::string& additional_info) override;
359 
360  std::shared_ptr<Header> _header;
361  BaseUnits _base_units;
362  UnitPrefixes _unit_prefixes;
363  Units _units;
364  DataTypes _data_types;
365  EnumTypes _enum_types;
366  StructTypes _struct_types;
367  StreamMetaTypes _stream_meta_types;
368  Streams _streams;
369  bool _empty_model;
370 };
371 
372 } // namespace datamodel
373 } // namespace dd
374 } // namespace ddl
375 
376 #endif // DD_DATA_MODEL_H_INCLUDED
DataDefinition Datamodel This datamodel is observable for any change of:
utility::TypeAccessMap< UnitPrefix, DataDefinition > UnitPrefixes
container class for all UnitPrefixes
BaseUnits & getBaseUnits()
Get the Base Units object.
bool containsType(const std::string &type_name) const
Retrieve information if the datamodel contains a type with the given name.
TypeOfType getTypeOfType(const std::string &type_name) const
Retrieve information if the datamodel contains a type with the given name and return the type of it.
void setHeader(const Header &header)
Set the Header object.
Units & getUnits()
Get the Units object.
const EnumTypes & getEnumTypes() const
Get the Enum Types object.
utility::TypeAccessMap< DataType, DataDefinition > DataTypes
container class for all DataTypes
utility::TypeAccessMap< EnumType, DataDefinition > EnumTypes
container class for all EnumTypes
utility::TypeAccessMap< Stream, DataDefinition > Streams
container class for all Streams
EnumTypes & getEnumTypes()
Get the Enum Types object.
DataDefinition & operator=(DataDefinition &&)
move assignment operator
TypeOfUnit getTypeOfUnit(const std::string &unit_name) const
Retrieve information if the datamodel contains a unit with the given name and return the type of it.
utility::TypeAccessMap< StructType, DataDefinition > StructTypes
container class for all StructTypes
bool containsUnit(const std::string &unit_name) const
Retrieve information if the datamodel contains a unit with the given name.
const BaseUnits & getBaseUnits() const
Get the Base Units object.
utility::TypeAccessMap< StreamMetaType, DataDefinition > StreamMetaTypes
container class for all StreamMetaTypes
StructTypes & getStructTypes()
Get the Struct Types object.
const StructTypes & getStructTypes() const
Get the Struct Types object.
Streams & getStreams()
Get the Streams object.
std::shared_ptr< const Header > getHeader() const
Get the Header object.
utility::TypeAccessMap< BaseUnit, DataDefinition > BaseUnits
container class for all BaseUnits
const StreamMetaTypes & getStreamMetaTypes() const
Get the Stream Meta Types object.
utility::TypeAccessMap< Unit, DataDefinition > Units
container class for all Units
DataDefinition & operator=(const DataDefinition &other)
resets the current content an copies the other
DataDefinition(const dd::Version &ddl_version)
CTOR.
const DataTypes & getDataTypes() const
Get the Data Types object.
const Streams & getStreams() const
Get the Streams object.
DataDefinition(const DataDefinition &other)
CTOR.
StreamMetaTypes & getStreamMetaTypes()
Get the Stream Meta Types object.
void setVersion(const dd::Version &ddl_version)
Set the DDL Version (in the header!)
bool isEmpty() const
indicates the model as empty or not.
std::shared_ptr< Header > getHeader()
Get the Header object.
const Units & getUnits() const
Get the Units object.
Version getVersion() const
Get the DDL Version.
DataTypes & getDataTypes()
Get the Data Types object.
UnitPrefixes & getUnitPrefixes()
Get the Unit Prefixes object.
const UnitPrefixes & getUnitPrefixes() const
Get the Unit Prefixes object.
DataDefinition(DataDefinition &&)
move CTOR
observable DataDefinition object class to describe (POD) DataType.
observable DataDefinition object class to describe EnumType.
Data Definition datamodel for the Header.
Info Map for the datamodel to hold a set of optional IInfo instances.
observable Stream DataDefinition object.
observable DataDefinition object class to describe StreamMetaType.
observable DataDefinition object class to describe StructType.
Unit Prefix - datamodel pefixes.
The ModelObserver utility template.
Model Subject utility to define a Model Subject that notifies one or more observers.
OO DataDefinition Redesign - Data model Observer - Subject pattern.
OO DataDefinition Header - Observable Data Defintion Header class.
OO DataDefinition Stream Object.
OO DataDefinition Type objects (DataType, EnumType, StructType, StreamMetaType)
DataDefinition Unit definitions.
DataDefinition Utility class for observable items.
OO DataDefinition Common Design.
OO DataDefinition Redesign - Data model info extension.
ModelEventCode
Model event code for the data model observer.
TypeAccessMapEventCode
Internal event code to inform the parent DD Object about the change of an item within the list.
Definition: dd_access_map.h:35
TypeOfType
Classification of a Type.
@ enum_type
the type is a enum type (EnumType)
@ data_type
the type is a data type (DataType)
@ struct_type
the type is a struct type (StructType)
@ stream_meta_type
the type is an stream meta type (StreamMetaType)
TypeOfUnit
Classification of unit.
@ unit
the unit is a unit (Unit)
@ base_unit
the unit is a base unit (BaseUnit)