SUNphi  1.0
Base.hpp File Reference

Defines the basic serializable feature. More...

#include <yaml-cpp/yaml.h>
#include <metaprogramming/CRTP.hpp>
#include <metaprogramming/SFINAE.hpp>
#include <metaprogramming/TypeTraits.hpp>

Go to the source code of this file.

Classes

class  SUNphi::Serializable< T >
 Forward definition of serializable. More...
 
struct  SUNphi::HasMember_serializableMembers< Type >
 
struct  SUNphi::HasMember_serializableMembers< Type >::Fallback
 
struct  SUNphi::HasMember_serializableMembers< Type >::Derived
 
struct  SUNphi::HasMember_serializableMembers< Type >::Check< U, U >
 
struct  SUNphi::ConstrainHasMember_serializableMembers< T >
 Class forcing T to have a member "serializableMembers" defined. More...
 
struct  SUNphi::HasMember_serialize< Type >
 
struct  SUNphi::HasMember_serialize< Type >::Fallback
 
struct  SUNphi::HasMember_serialize< Type >::Derived
 
struct  SUNphi::HasMember_serialize< Type >::Check< U, U >
 
struct  SUNphi::ConstrainHasMember_serialize< T >
 Class forcing T to have a member "serialize" defined. More...
 
struct  YAML::convert< T, EnableIf< hasMember_serialize< T > > >
 Converter for any type providing member serialize. More...
 

Functions

template<typename Type >
constexpr bool SUNphi::hasMember_serializableMembersHelper ()
 
template<typename Type >
constexpr bool SUNphi::hasMember_serializeHelper ()
 
template<typename S , TypeIf<(not canPrint< S, const YAML::Node & >), void * > = nullptr>
S & SUNphi::operator<< (S &&stream, const YAML::Node &node)
 Stream to an output a YAML node. More...
 
template<typename S , typename T , TypeIf<(not canPrint< S, const T & >), void * > = nullptr, TypeIf<(hasMember_serialize< T >), void * > = nullptr>
S & SUNphi::operator<< (S &&stream, const T &ser)
 Stream to an output anything with a serialize member.
 

Variables

template<typename Type >
constexpr bool SUNphi::hasMember_serializableMembers = hasMember_serializableMembersHelper<RemRef<Type>>()
 
template<typename T >
constexpr bool SUNphi::isSerializableMap
 Check if the class is a serializable map. More...
 
template<typename Type >
constexpr bool SUNphi::hasMember_serialize = hasMember_serializeHelper<RemRef<Type>>()
 

Detailed Description

Defines the basic serializable feature.

The value mapped can be of three types:

  • a scalar, of a trivially copyable kind
  • a map, namely a class with a "serializableMembers" member
  • a sequence, namely a tuple-like or vector-like container

Definition in file Base.hpp.

Function Documentation

template<typename Type >
constexpr bool SUNphi::hasMember_serializableMembersHelper ( )

Intemediate function to distinguish the non-class case

Definition at line 27 of file Base.hpp.

template<typename Type >
constexpr bool SUNphi::hasMember_serializeHelper ( )

Intemediate function to distinguish the non-class case

Definition at line 35 of file Base.hpp.

template<typename S , TypeIf<(not canPrint< S, const YAML::Node & >), void * > = nullptr>
S& SUNphi::operator<< ( S &&  stream,
const YAML::Node &  node 
)

Stream to an output a YAML node.

Converter to string

Definition at line 41 of file Base.hpp.

Variable Documentation

template<typename Type >
constexpr bool SUNphi::hasMember_serializableMembers = hasMember_serializableMembersHelper<RemRef<Type>>()

Detect if Type has member (variable or method) serializableMembers

Uses SFINAE to induce ambiguity in the detection of the member

Definition at line 27 of file Base.hpp.

template<typename Type >
constexpr bool SUNphi::hasMember_serialize = hasMember_serializeHelper<RemRef<Type>>()

Detect if Type has member (variable or method) serialize

Uses SFINAE to induce ambiguity in the detection of the member

Definition at line 35 of file Base.hpp.

template<typename T >
constexpr bool SUNphi::isSerializableMap
Initial value:
=
hasMember_serializableMembers<T>

Check if the class is a serializable map.

Definition at line 32 of file Base.hpp.