TEC
A lightweight C++ library enabling safe, efficient execution in multithreaded and concurrent systems.
Loading...
Searching...
No Matches
tec::NetData Class Reference

Lightweight binary serialization container optimized for network communication. More...

#include <tec_net_data.hpp>

Inheritance diagram for tec::NetData:
tec::NdTypes

Classes

struct  StreamIn
 Helper type for ADL customization of input operations. More...
 
struct  StreamOut
 Helper type for ADL customization of output operations. More...
 

Public Member Functions

 NetData ()=default
 Default constructor - creates empty NetData object.
 
 NetData (const NetData &)=delete
 Copy constructor – use explicit copy_from()
 
 NetData (NetData &&)=delete
 Disabled – use explicit move_from()
 
virtual ~NetData ()=default
 Virtual destructor.
 
const Bytesbytes () const
 Returns const reference to internal byte buffer.
 
const voiddata () const
 Returns const pointer to the beginning of serialized data.
 
void copy_from (const NetData &src)
 Performs deep copy of content from another NetData instance.
 
void move_from (NetData &&src, size_t size_to_shrink=0)
 Efficiently moves content from another NetData instance.
 
void rewind ()
 Resets read position to the beginning of the buffer.
 
size_t size () const
 Returns current logical size of the message (according to header)
 
size_t capacity () const
 Returns current capacity of internal buffer.
 
Bytesbytes ()
 Returns mutable reference to internal byte buffer.
 
template<typename T >
NetDataoperator<< (const T &val)
 Serialization operator (stream-like syntax)
 
template<typename T >
NetDataoperator>> (T &val)
 Deserialization operator (stream-like syntax)
 
- Public Member Functions inherited from tec::NdTypes
constexpr Count to_count (size_t count)
 Convert a size_t count to Count, clamping at maximum.
 
ElemHeader get_scalar_info (const char &)
 Get element info for signed char.
 
ElemHeader get_scalar_info (const unsigned char &)
 Get element info for unsigned char.
 
ElemHeader get_scalar_info (const short &)
 Get element info for signed short.
 
ElemHeader get_scalar_info (const unsigned short &)
 Get element info for unsigned short.
 
ElemHeader get_scalar_info (const int &)
 Get element info for signed int.
 
ElemHeader get_scalar_info (const unsigned int &)
 Get element info for unsigned int.
 
ElemHeader get_scalar_info (const long &)
 Get element info for signed long.
 
ElemHeader get_scalar_info (const unsigned long &)
 Get element info for unsigned long.
 
ElemHeader get_scalar_info (const long long &)
 Get element info for signed long long.
 
ElemHeader get_scalar_info (const unsigned long long &)
 Get element info for unsigned long long.
 
ElemHeader get_scalar_info (const bool &)
 Get element info for bool.
 
ElemHeader get_scalar_info (const float &)
 Get element info for float.
 
ElemHeader get_scalar_info (const double &)
 Get element info for double.
 
ElemHeader get_scalar_info (const long double &)
 Get element info for long double (platform-dependent size).
 
ElemHeader get_seq_info (const String &str)
 Get element info for std::string (character sequence).
 
ElemHeader get_seq_info (const Blob &bytes)
 Get element info for Blob (raw byte sequence).
 
template<typename TContainer >
ElemHeader get_container_info (const TContainer &c)
 Get element info for flat containers (vector, array, etc.).
 
template<typename TMap >
ElemHeader get_map_info (const TMap &m)
 Get element info for map-like containers.
 
template<typename TObject >
ElemHeader get_object_info (const TObject &)
 Get element info for user-defined serializable objects.
 
template<typename T >
ElemHeader get_info (const T &val)
 Generic dispatcher to determine ElemHeader for any supported type.
 

Public Attributes

Header header
 Global message header.
 

Protected Member Functions

template<typename TMap >
size_t write_map (ElemHeader *hdr, const TMap &map)
 Serializes map-like container (std::unordered_map)
 
template<typename TContainer >
size_t write_container (ElemHeader *hdr, const TContainer &container)
 Serializes sequence container (vector, deque, list, ...)
 
template<typename TObject >
size_t write_object (ElemHeader *hdr, const TObject &obj)
 Serializes custom object that implements store() method.
 
virtual size_t write_long_double_64 (ElemHeader *hdr, const double *d64)
 Special handling for long double when sizeof(long double) == 8 (on MS Windows)
 
virtual size_t write_scalar (ElemHeader *hdr, const void *p)
 Writes single scalar value with its header.
 
virtual size_t write_sequence (ElemHeader *hdr, const void *p)
 Writes string or blob sequence (header + raw bytes)
 
template<typename TMap >
void read_map (ElemHeader *hdr, TMap &map)
 Reads map-like container from stream.
 
template<typename TContainer >
void read_container (ElemHeader *hdr, TContainer &c)
 Reads sequence container from stream.
 
virtual void read (ElemHeader *hdr, void *dst)
 Generic dispatcher for reading scalar/sequence values.
 
virtual void read_long_double_64 (const ElemHeader *hdr, double *d64)
 Platform-specific reading of MSWindows' long double (64 bit) stored as 128-bit double.
 
virtual void read_scalar (const ElemHeader *hdr, void *dst)
 Reads single scalar value.
 
virtual void read_sequence (const ElemHeader *hdr, void *dst)
 Reads string or blob sequence data.
 

Protected Attributes

Bytes data_
 Internal storage of serialized binary data.
 

Additional Inherited Members

- Public Types inherited from tec::NdTypes
using ID = uint16_t
 Unique identifier type for serialized objects/messages.
 
using Tag = uint16_t
 Tag type used to encode element kind and properties.
 
using Size = uint32_t
 Size type for individual element payload (in bytes).
 
using Count = uint16_t
 Count type for number of elements in sequences/containers.
 
using Bool = uint8_t
 Boolean storage type (always 1 byte).
 
using String = std::string
 String storage type.
 

Detailed Description

Lightweight binary serialization container optimized for network communication.

NetData provides efficient serialization and deserialization of various C++ types including scalars, strings, containers, maps and user-defined serializable objects. The format consists of ElemHeader + payload for each element, allowing flexible and relatively compact binary representation suitable for network transmission.

Member Function Documentation

◆ bytes() [1/2]

Bytes & tec::NetData::bytes ( )
inline

Returns mutable reference to internal byte buffer.

Warning
Direct manipulation may corrupt serialization format
Returns
mutable reference to bytes container

◆ bytes() [2/2]

const Bytes & tec::NetData::bytes ( ) const
inline

Returns const reference to internal byte buffer.

Returns
const reference to the serialized bytes

◆ capacity()

size_t tec::NetData::capacity ( ) const
inline

Returns current capacity of internal buffer.

Returns
allocated size of the internal byte storage

◆ copy_from()

void tec::NetData::copy_from ( const NetData src)
inline

Performs deep copy of content from another NetData instance.

Parameters
srcsource NetData object to copy from

◆ data()

const void * tec::NetData::data ( ) const
inline

Returns const pointer to the beginning of serialized data.

Returns
const pointer to raw data

◆ move_from()

void tec::NetData::move_from ( NetData &&  src,
size_t  size_to_shrink = 0 
)
inline

Efficiently moves content from another NetData instance.

Parameters
srcrvalue reference to source object (will be left in moved-from state)
size_to_shrinkoptional target capacity after move (0 = don't shrink)

◆ operator<<()

template<typename T >
NetData & tec::NetData::operator<< ( const T val)
inline

Serialization operator (stream-like syntax)

Template Parameters
Ttype of value to serialize
Parameters
valvalue to be serialized
Returns
reference to self for operation chaining

Supports most fundamental types, strings, containers, maps and custom types that satisfy is_serializable_v<> trait.

◆ operator>>()

template<typename T >
NetData & tec::NetData::operator>> ( T val)
inline

Deserialization operator (stream-like syntax)

Template Parameters
Ttype of value to deserialize
Parameters
val[out] destination variable
Returns
reference to self for operation chaining

◆ read()

virtual void tec::NetData::read ( ElemHeader hdr,
void dst 
)
inlineprotectedvirtual

Generic dispatcher for reading scalar/sequence values.

Parameters
hdrelement header already read
dst[out] destination memory

◆ read_container()

template<typename TContainer >
void tec::NetData::read_container ( ElemHeader hdr,
TContainer c 
)
inlineprotected

Reads sequence container from stream.

Template Parameters
TContainersequence container type
Parameters
hdrelement header already read
c[out] destination container

◆ read_long_double_64()

virtual void tec::NetData::read_long_double_64 ( const ElemHeader hdr,
double d64 
)
inlineprotectedvirtual

Platform-specific reading of MSWindows' long double (64 bit) stored as 128-bit double.

Parameters
hdrelement header
d64[out] destination double

◆ read_map()

template<typename TMap >
void tec::NetData::read_map ( ElemHeader hdr,
TMap map 
)
inlineprotected

Reads map-like container from stream.

Template Parameters
TMapmap-like container type
Parameters
hdrelement header already read
map[out] destination container

◆ read_scalar()

virtual void tec::NetData::read_scalar ( const ElemHeader hdr,
void dst 
)
inlineprotectedvirtual

Reads single scalar value.

Parameters
hdrelement header
dst[out] destination memory

◆ read_sequence()

virtual void tec::NetData::read_sequence ( const ElemHeader hdr,
void dst 
)
inlineprotectedvirtual

Reads string or blob sequence data.

Parameters
hdrelement header
dst[out] destination string/blob

◆ size()

size_t tec::NetData::size ( ) const
inline

Returns current logical size of the message (according to header)

Returns
number of bytes of valid serialized data

◆ write_container()

template<typename TContainer >
size_t tec::NetData::write_container ( ElemHeader hdr,
const TContainer container 
)
inlineprotected

Serializes sequence container (vector, deque, list, ...)

Template Parameters
TContainersequence container type
Parameters
hdrprepared element header
containercontainer instance to serialize
Returns
number of bytes written for container contents (without header)

◆ write_long_double_64()

virtual size_t tec::NetData::write_long_double_64 ( ElemHeader hdr,
const double d64 
)
inlineprotectedvirtual

Special handling for long double when sizeof(long double) == 8 (on MS Windows)

Parameters
hdrelement header
d64pointer to double value (used as source)
Returns
number of bytes written

◆ write_map()

template<typename TMap >
size_t tec::NetData::write_map ( ElemHeader hdr,
const TMap map 
)
inlineprotected

Serializes map-like container (std::unordered_map)

Template Parameters
TMapmap-like container type
Parameters
hdrprepared element header
mapcontainer instance to serialize
Returns
number of bytes written for map contents (without header)

◆ write_object()

template<typename TObject >
size_t tec::NetData::write_object ( ElemHeader hdr,
const TObject obj 
)
inlineprotected

Serializes custom object that implements store() method.

Template Parameters
TObjecttype of serializable object
Parameters
hdrprepared element header
objobject instance to serialize
Returns
number of bytes written for object contents (without header)

◆ write_scalar()

virtual size_t tec::NetData::write_scalar ( ElemHeader hdr,
const void p 
)
inlineprotectedvirtual

Writes single scalar value with its header.

Parameters
hdrelement header
ppointer to source value
Returns
number of bytes written

◆ write_sequence()

virtual size_t tec::NetData::write_sequence ( ElemHeader hdr,
const void p 
)
inlineprotectedvirtual

Writes string or blob sequence (header + raw bytes)

Parameters
hdrelement header
ppointer to source (std::string or Blob)
Returns
number of bytes written

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