ADTF  3.18.2
datamodel_units.h
Go to the documentation of this file.
1 
15 #ifndef DD_DATA_MODEL_UNITS_H_INCLUDED
16 #define DD_DATA_MODEL_UNITS_H_INCLUDED
17 
20 #include <ddl/dd/dd_common_types.h>
24 
25 #include <string>
26 #include <vector>
27 
28 namespace ddl {
29 
30 namespace dd {
31 
32 namespace datamodel {
37 class UnitBase {
38 public:
43  UnitBase() = default;
48  UnitBase(const UnitBase&) = default;
53  UnitBase(UnitBase&&) = default;
59  UnitBase& operator=(const UnitBase&) = default;
65  UnitBase& operator=(UnitBase&&) = default;
71  UnitBase(const std::string& name);
76  virtual ~UnitBase() = default;
82  virtual TypeOfUnit getTypeOfUnit() const = 0;
88  virtual void setName(const std::string& name);
94  const std::string& getName() const;
95 
96 protected:
98  std::string _name;
99 };
100 
105 class BaseUnit : public UnitBase,
106  public ModelSubject<BaseUnit>,
107  public utility::TypeAccessMapSubject<BaseUnit>,
108  public InfoMap {
109 public:
114  BaseUnit(){};
119  BaseUnit(const BaseUnit&) = default;
124  BaseUnit(BaseUnit&&) = default;
130  BaseUnit& operator=(const BaseUnit&) = default;
136  BaseUnit& operator=(BaseUnit&&) = default;
144  BaseUnit(const std::string& name,
145  const std::string& symbol,
146  const std::string& description = {});
151  virtual ~BaseUnit() = default;
152 
153  TypeOfUnit getTypeOfUnit() const override;
162  void setName(const std::string& name) override;
163 
169  const std::string& getSymbol() const;
176  void setSymbol(const std::string& symbol);
177 
183  const std::string& getDescription() const;
190  void setDescription(const std::string& description);
191 
199  bool operator==(const BaseUnit& other) const;
207  bool operator!=(const BaseUnit& other) const;
208 
209 private:
210  void notify(const std::string& additional_info);
211  std::string _symbol = {};
212  std::string _description = {};
213 };
214 
219 class UnitPrefix : public ModelSubject<UnitPrefix>,
220  public utility::TypeAccessMapSubject<UnitPrefix>,
221  public InfoMap {
222 public:
232  UnitPrefix(const UnitPrefix&) = default;
237  UnitPrefix(UnitPrefix&&) = default;
243  UnitPrefix& operator=(const UnitPrefix&) = default;
257  UnitPrefix(const std::string& name, const std::string& symbol, int32_t power);
262  virtual ~UnitPrefix() = default;
263 
269  const std::string& getName() const;
278  void setName(const std::string& name);
279 
285  const std::string& getSymbol() const;
292  void setSymbol(const std::string& symbol);
293 
299  int32_t getPower() const;
306  void setPower(int32_t power);
314  bool operator==(const UnitPrefix& other) const;
322  bool operator!=(const UnitPrefix& other) const;
323 
324 private:
325  void notify(const std::string& additional_info);
326  std::string _name = {};
327  std::string _symbol = {};
328  int32_t _power = {};
329 };
330 
335 class Unit : public UnitBase,
336  public ModelSubject<Unit>,
337  public utility::TypeAccessMapSubject<Unit>,
338  public InfoMap {
339 public:
344  Unit();
349  Unit(const Unit&) = default;
355  Unit& operator=(const Unit&) = default;
360  Unit(Unit&&) = default;
366  Unit& operator=(Unit&&) = default;
371  virtual ~Unit() = default;
372 
377  class RefUnit {
378  public:
383  RefUnit(){};
388  RefUnit(const RefUnit&) = default;
393  RefUnit(RefUnit&&) = default;
399  RefUnit& operator=(const RefUnit&) = default;
405  RefUnit& operator=(RefUnit&&) = default;
413  RefUnit(const std::string& unit_name, int32_t power, const std::string& prefix_name);
421  bool operator==(const RefUnit& other) const;
429  bool operator!=(const RefUnit& other) const;
430 
436  const std::string& getUnitName() const;
442  int32_t getPower() const;
448  const std::string& getPrefixName() const;
449 
450  private:
451  std::string _unit_name = {};
452  int32_t _power = {};
453  std::string _prefix_name = {};
454  };
465  Unit(const std::string& name,
466  const std::string& numerator,
467  const std::string& denominator,
468  const std::string& offset,
469  const std::vector<RefUnit>& ref_units = {});
477  bool operator==(const Unit& other) const;
485  bool operator!=(const Unit& other) const;
486 
492  TypeOfUnit getTypeOfUnit() const override;
501  void setName(const std::string& name) override;
507  const std::string& getNumerator() const;
514  void setNumerator(const std::string& numerator);
515 
521  const std::string& getDenominator() const;
528  void setDenominator(const std::string& denominator);
529 
535  const std::string& getOffset() const;
542  void setOffset(const std::string& offset);
543 
544 public:
549  using RefUnits = std::vector<RefUnit>;
555  const RefUnits& getRefUnits() const;
556 
563  void addRefUnit(const RefUnit& ref_unit);
569  void removeRefUnit(const RefUnit& ref_unit);
570 
571 private:
572  void notify(ModelEventCode code,
574  const std::string& additional_info);
575 
576 private:
577  std::string _numerator = {};
578  std::string _denominator = {};
579  std::string _offset = {};
580  RefUnits _ref_units;
581 };
582 
583 } // namespace datamodel
584 } // namespace dd
585 } // namespace ddl
586 
587 #endif // DD_DATA_MODEL_UNITS_H_INCLUDED
BaseUnit(const BaseUnit &)=default
copy CTOR
const std::string & getDescription() const
Get the Description.
BaseUnit(const std::string &name, const std::string &symbol, const std::string &description={})
CTOR.
bool operator==(const BaseUnit &other) const
equality operator.
virtual ~BaseUnit()=default
DTOR.
void setDescription(const std::string &description)
Set the Description.
TypeOfUnit getTypeOfUnit() const override
Get the Type Of Unit.
const std::string & getSymbol() const
Get the Symbol.
BaseUnit & operator=(const BaseUnit &)=default
copy assignment operator
bool operator!=(const BaseUnit &other) const
non equality operator.
void setName(const std::string &name) override
Set the Name.
BaseUnit(BaseUnit &&)=default
move CTOR
BaseUnit & operator=(BaseUnit &&)=default
move assignment operator
void setSymbol(const std::string &symbol)
Set the Symbol.
Info Map for the datamodel to hold a set of optional IInfo instances.
datamodel for the refUnit
bool operator!=(const RefUnit &other) const
non equality operator.
RefUnit(const std::string &unit_name, int32_t power, const std::string &prefix_name)
CTOR.
const std::string & getPrefixName() const
Get the Prefix Name.
bool operator==(const RefUnit &other) const
equality operator.
int32_t getPower() const
Get the Power.
RefUnit(RefUnit &&)=default
move CTOR
RefUnit & operator=(RefUnit &&)=default
move assignment operator
const std::string & getUnitName() const
Get the Unit Name.
RefUnit & operator=(const RefUnit &)=default
copy assignment operator
RefUnit(const RefUnit &)=default
copy CTOR
UnitBase is the base class for Unit or BaseUnit.
UnitBase(const std::string &name)
CTOR.
virtual void setName(const std::string &name)
Set the Name.
UnitBase(UnitBase &&)=default
move CTOR
virtual ~UnitBase()=default
DTOR.
UnitBase & operator=(const UnitBase &)=default
copy assignment operator
const std::string & getName() const
Get the Name.
UnitBase & operator=(UnitBase &&)=default
move assignment operator
std::string _name
the name
virtual TypeOfUnit getTypeOfUnit() const =0
Get the Type Of Unit.
UnitBase(const UnitBase &)=default
copy CTOR
UnitBase()=default
default CTOR
const RefUnits & getRefUnits() const
return the refUnits container
void setDenominator(const std::string &denominator)
Set the Denominator.
std::vector< RefUnit > RefUnits
definiton of the container for the RefUnits
TypeOfUnit getTypeOfUnit() const override
Get the Type Of Unit.
void addRefUnit(const RefUnit &ref_unit)
adding a refunit
Unit & operator=(Unit &&)=default
move assignment operator
const std::string & getNumerator() const
Get the Numerator.
void setNumerator(const std::string &numerator)
Set the Numerator object.
bool operator==(const Unit &other) const
equality operator.
bool operator!=(const Unit &other) const
non equality operator.
const std::string & getDenominator() const
Get the Denominator.
void setName(const std::string &name) override
Set the Name.
virtual ~Unit()=default
DTOR.
Unit(Unit &&)=default
move CTOR
Unit(const std::string &name, const std::string &numerator, const std::string &denominator, const std::string &offset, const std::vector< RefUnit > &ref_units={})
CTOR.
const std::string & getOffset() const
Get the Offset.
Unit & operator=(const Unit &)=default
copy assignment operator
void setOffset(const std::string &offset)
Set the Offset.
void removeRefUnit(const RefUnit &ref_unit)
remove the refunit
Unit(const Unit &)=default
copy CTOR
Unit Prefix - datamodel pefixes.
bool operator!=(const UnitPrefix &other) const
non equality operator.
UnitPrefix(UnitPrefix &&)=default
move CTOR
bool operator==(const UnitPrefix &other) const
equality operator.
const std::string & getSymbol() const
Get the Symbol.
virtual ~UnitPrefix()=default
DTOR.
UnitPrefix(const std::string &name, const std::string &symbol, int32_t power)
CTOR.
void setPower(int32_t power)
Set the Power.
const std::string & getName() const
Get the Name.
int32_t getPower() const
Get the Power.
void setName(const std::string &name)
Set the Name.
UnitPrefix & operator=(const UnitPrefix &)=default
copy assignment operator
UnitPrefix(const UnitPrefix &)=default
copy CTOR
UnitPrefix & operator=(UnitPrefix &&)=default
move assignment operator
void setSymbol(const std::string &symbol)
Set the Symbol.
Model Subject utility to define a Model Subject that notifies one or more observers.
OO DataDefinition Redesign - Data model Observer - Subject pattern.
DataDefinition Utility class for observable items.
DataDefinition Utility class for observable items.
DataDefinition Model-Observer pattern utility.
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
TypeOfUnit
Classification of unit.