libcaf  0.15.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
caf::data_processor< Derived > Class Template Referenceabstract

A data processor translates an object into a format that can be stored or vice versa. More...

#include <data_processor.hpp>

Public Types

enum  builtin {
  i8_v,
  u8_v,
  i16_v,
  u16_v,
  i32_v,
  u32_v,
  i64_v,
  u64_v,
  float_v,
  double_v,
  ldouble_v,
  string8_v,
  string16_v,
  string32_v
}
 Lists all types an implementation has to accept as builtin types.
 
using builtin_t = detail::type_list< int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double, long double, std::string, std::u16string, std::u32string >
 

Public Member Functions

 data_processor (const data_processor &)=delete
 
data_processoroperator= (const data_processor &)=delete
 
 data_processor (execution_unit *ctx=nullptr)
 
virtual void begin_object (uint16_t &typenr, std::string &name)=0
 Begins processing of an object. More...
 
virtual void end_object ()=0
 Ends processing of an object.
 
virtual void begin_sequence (size_t &num)=0
 Begins processing of a sequence. More...
 
virtual void end_sequence ()=0
 Ends processing of a sequence.
 
execution_unitcontext ()
 Returns the actor system associated to this data processor.
 
template<class T >
std::enable_if< std::is_floating_point< T >::value >::type apply (T &x)
 Applies this processor to an arithmetic type.
 
template<class T >
std::enable_if< std::is_integral< T >::value &&!std::is_same< bool, T >::value >::type apply (T &x)
 
void apply (std::string &x)
 
void apply (std::u16string &x)
 
void apply (std::u32string &x)
 
template<atom_value V>
void apply (atom_constant< V > &x)
 
template<class T >
std::enable_if< std::is_enum< T >::value &&!detail::has_serialize< T >::value >::type apply (T &x)
 Serializes enums using the underlying type if no user-defined serialization is defined. More...
 
template<class T >
std::enable_if< std::is_empty< T >::value >::type apply (T &)
 Applies this processor to an empty type.
 
void apply (bool &x)
 
template<class T >
std::enable_if< detail::is_iterable< T >::value &&!detail::has_serialize< T >::value >::type apply (T &xs)
 Applies this processor to a sequence of values.
 
template<class T , size_t S>
std::enable_if< detail::is_serializable< T >::value >::type apply (std::array< T, S > &xs)
 Applies this processor to an array.
 
template<class T , size_t S>
std::enable_if< detail::is_serializable< T >::value >::type apply (T(&xs)[S])
 Applies this processor to an array.
 
template<class F , class S >
std::enable_if< detail::is_serializable< typename std::remove_const< F >::type >::value &&detail::is_serializable< S >::value >::type apply (std::pair< F, S > &xs)
 
template<class... Ts>
std::enable_if< detail::conjunction< detail::is_serializable< Ts >::value... >::value >::type apply (std::tuple< Ts...> &xs)
 
template<class T >
std::enable_if< !std::is_empty< T >::value &&detail::has_serialize< T >::value >::type apply (T &x)
 
template<class Rep , class Period >
std::enable_if< std::is_integral< Rep >::value >::type apply (std::chrono::duration< Rep, Period > &x)
 
template<class Rep , class Period >
std::enable_if< std::is_floating_point< Rep >::value >::type apply (std::chrono::duration< Rep, Period > &x)
 
virtual void apply_raw (size_t num_bytes, void *data)=0
 Applies this processor to a raw block of data of size num_bytes.
 

Static Public Member Functions

template<class D , atom_value V>
static void apply_atom_constant (D &self, atom_constant< V > &)
 
template<class D , class T >
static std::enable_if< D::is_saving::value &&!detail::is_byte_sequence< T >::value >::type apply_sequence (D &self, T &xs)
 
template<class D , class T >
static std::enable_if< !D::is_saving::value &&!detail::is_byte_sequence< T >::value >::type apply_sequence (D &self, T &xs)
 
template<class D , class T >
static std::enable_if< D::is_saving::value &&detail::is_byte_sequence< T >::value >::type apply_sequence (D &self, T &xs)
 
template<class D , class T >
static std::enable_if< !D::is_saving::value &&detail::is_byte_sequence< T >::value >::type apply_sequence (D &self, T &xs)
 

Protected Member Functions

virtual void apply_builtin (builtin in_out_type, void *in_out)=0
 Applies this processor to a single builtin value.
 

Detailed Description

template<class Derived>
class caf::data_processor< Derived >

A data processor translates an object into a format that can be stored or vice versa.

A data processor can be either in saving or loading mode.

Member Function Documentation

template<class Derived>
template<class T >
std::enable_if< std::is_enum<T>::value && ! detail::has_serialize<T>::value >::type caf::data_processor< Derived >::apply ( T &  x)

Serializes enums using the underlying type if no user-defined serialization is defined.

template<class Derived>
virtual void caf::data_processor< Derived >::begin_object ( uint16_t &  typenr,
std::string &  name 
)
pure virtual

Begins processing of an object.

Saves the type information to the underlying storage when in saving mode, otherwise extracts them and sets both arguments accordingly.

Implemented in caf::stream_deserializer< Streambuf >, and caf::stream_serializer< Streambuf >.

template<class Derived>
virtual void caf::data_processor< Derived >::begin_sequence ( size_t &  num)
pure virtual

Begins processing of a sequence.

Saves the size to the underlying storage when in saving mode, otherwise sets num accordingly.

Implemented in caf::stream_deserializer< Streambuf >, and caf::stream_serializer< Streambuf >.


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