$darkmode
cloe::MetaInformation Class Reference

#include <data_broker.hpp>

Classes

struct  Tag
 

Public Member Functions

template<typename T >
void remove ()
 
template<typename T >
void add_any (std::any metainformation_any)
 
template<typename T >
const std::any * get_any () const
 
template<typename T >
std::enable_if_t<!std::is_void_v< typename T::tag_type >, const typename T::tag_type > * get () const
 
template<typename T >
std::enable_if_t< std::is_void_v< typename T::tag_type >, bool > get () const
 
template<typename T >
std::enable_if_t< !std::is_void_v< typename T::tag_type > &&!std::is_base_of_v< Tag< T >, T > &&std::is_move_constructible_v< typename T::tag_type > > add (typename T::tag_type metainformation)
 
template<typename T >
std::enable_if_t< !std::is_void_v< typename T::tag_type > &&!std::is_base_of_v< Tag< T >, T > &&std::is_copy_constructible_v< typename T::tag_type > &&!std::is_move_constructible_v< typename T::tag_type > > add (const typename T::tag_type &metainformation)
 
template<typename T >
std::enable_if_t< std::is_void_v< typename T::tag_type > > add ()
 
template<typename T >
std::enable_if_t< std::is_base_of_v< Tag< T >, T > &&std::is_same_v< T, typename T::tag_type > > add (T metainformation)
 
template<typename T , typename... TArgs>
std::enable_if_t< std::is_base_of_v< Tag< T >, T > &&std::is_same_v< T, typename T::tag_type > > add (TArgs... args)
 

Detailed Description

MetaInformation collects abstract metainformation

Note
: Design-Goals:
  • Design-#1: Key-Value (cardinality: 0-1:1). The key defines the value-type.
  • Design-#2: Type-erasing techniques shall not eradicate type-safety nor put additional validation steps onto the users.
: Implementation-Notes:
  • Implementation-#1: Implementations like "all-is-byte-arrays" or "JSON" were considered and disregarded. E.g. JSON is a serialization format. Using JSON-Schema Design-#2 would be covered. This would imply a) a dependency on multiple levels & b) significant runtime efforts. Shooting sparrows with canons. Pure C++ can do the job in <50 LOC + some for porcellain.

Member Function Documentation

◆ add() [1/5]

template<typename T >
std::enable_if_t< std::is_void_v<typename T::tag_type> > cloe::MetaInformation::add ( )
inline

Adds a metainformation

Template Parameters
TType of the metainformation-tag
Note
This overload is enabled only when the effective tag_type is void

◆ add() [2/5]

template<typename T >
std::enable_if_t< !std::is_void_v<typename T::tag_type> && !std::is_base_of_v< Tag< T >, T > && std::is_copy_constructible_v<typename T::tag_type> && !std::is_move_constructible_v<typename T::tag_type> > cloe::MetaInformation::add ( const typename T::tag_type &  metainformation)
inline

Adds a metainformation

Template Parameters
TType of the metainformation-tag
Parameters
metainformationActual metainformation to be added
Note
This overload is enabled only when the effective tag_type is copy constructible

◆ add() [3/5]

template<typename T >
std::enable_if_t< std::is_base_of_v< Tag< T >, T > && std::is_same_v<T, typename T::tag_type> > cloe::MetaInformation::add ( metainformation)
inline

Adds a metainformation

Template Parameters
TType of the metainformation-tag
Parameters
metainformationActual metainformation to be added
Note
This overload is enabled only when the tag inherits Tag<> and is the effective tag_type

Usage Note:

struct my_tag : cloe::MetaInformation::Tag<my_tag> {
...
};
...
my_tag tag;
...
add(std::move(tag));
Definition: data_broker.hpp:394

◆ add() [4/5]

template<typename T , typename... TArgs>
std::enable_if_t< std::is_base_of_v< Tag< T >, T > && std::is_same_v<T, typename T::tag_type> > cloe::MetaInformation::add ( TArgs...  args)
inline

Adds a metainformation constructed from the supplied parameters

Template Parameters
TType of the metainformation-tag
TArgs...Type of the metainformation c'tor arguments
Parameters
argsArguments for the c'tor of the metainformation
Note
This overload is enabled only when the tag inherits Tag<> and is the effective tag_type

Usage Note:

add<TagType>(arg1, arg2, ...);
...
};

◆ add() [5/5]

template<typename T >
std::enable_if_t< !std::is_void_v<typename T::tag_type> && !std::is_base_of_v< Tag< T >, T > && std::is_move_constructible_v<typename T::tag_type> > cloe::MetaInformation::add ( typename T::tag_type  metainformation)
inline

Adds a metainformation

Template Parameters
TType of the metainformation-tag
Parameters
metainformationActual metainformation to be added
Note
This overload is enabled only when the effective tag_type is move constructible

◆ add_any()

template<typename T >
void cloe::MetaInformation::add_any ( std::any  metainformation_any)
inline

Adds a metainformation

Template Parameters
TType of the metainformation-tag
Parameters
metainformation_anyActual metainformation to be added

◆ get() [1/2]

template<typename T >
std::enable_if_t<!std::is_void_v<typename T::tag_type>, const typename T::tag_type>* cloe::MetaInformation::get ( ) const
inline

Returns a metainformation

Template Parameters
TType of the metainformation-tag
Returns
Annotation of type T::tag_type* if the metainformation is present, nullptr otherwise

◆ get() [2/2]

template<typename T >
std::enable_if_t<std::is_void_v<typename T::tag_type>, bool> cloe::MetaInformation::get ( ) const
inline

Returns a metainformation

Template Parameters
TType of the metainformation-tag
Returns
true if the metainformation is present, false otherwise

◆ get_any()

template<typename T >
const std::any* cloe::MetaInformation::get_any ( ) const
inline

Returns a metainformation

Template Parameters
TType of the metainformation-tag
Returns
std:any* if the metainformation is present, nullptr otherwise

◆ remove()

template<typename T >
void cloe::MetaInformation::remove ( )
inline

Removes an metainformation

Template Parameters
Tagof the metainformation to be removed

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