15#ifndef _FASTCDR_FASTCDR_H_
16#define _FASTCDR_FASTCDR_H_
24#if !__APPLE__ && !__FreeBSD__ && !__VXWORKS__
70 const state&) =
delete;
101 char* get_current_position();
109 return current_position_ - cdr_buffer_.begin();
132 const uint8_t octet_t)
168 const uint16_t ushort_t)
180 const int16_t short_t)
192 const uint32_t ulong_t)
204 const int32_t long_t)
228 const uint64_t ulonglong_t)
240 const int64_t longlong_t)
264 const double double_t)
276 const long double ldouble_t)
300 const char* string_t)
312 const wchar_t* string_t)
347 template<
class _T,
size_t _Size>
351 return serialize<_T, _Size>(array_t);
364 return serialize<_T>(vector_t);
484 uint64_t& ulonglong_t)
532 long double& ldouble_t)
595 template<
class _T,
size_t _Size>
599 return deserialize<_T, _Size>(array_t);
612 return deserialize<_T>(vector_t);
637 const uint8_t octet_t)
639 return serialize(
static_cast<char>(octet_t));
652 if (((last_position_ - current_position_) >=
sizeof(char_t)) || resize(
sizeof(char_t)))
654 current_position_++ << char_t;
671 return serialize(
static_cast<char>(int8));
682 const uint16_t ushort_t)
684 return serialize(
static_cast<int16_t
>(ushort_t));
695 const int16_t short_t)
697 if (((last_position_ - current_position_) >=
sizeof(short_t)) || resize(
sizeof(short_t)))
699 current_position_ << short_t;
700 current_position_ +=
sizeof(short_t);
716 const uint32_t ulong_t)
718 return serialize(
static_cast<int32_t
>(ulong_t));
729 const int32_t long_t)
731 if (((last_position_ - current_position_) >=
sizeof(long_t)) || resize(
sizeof(long_t)))
733 current_position_ << long_t;
734 current_position_ +=
sizeof(long_t);
752 return serialize(
static_cast<uint32_t
>(wchar));
763 const uint64_t ulonglong_t)
765 return serialize(
static_cast<int64_t
>(ulonglong_t));
776 const int64_t longlong_t)
778 if (((last_position_ - current_position_) >=
sizeof(longlong_t)) || resize(
sizeof(longlong_t)))
780 current_position_ << longlong_t;
781 current_position_ +=
sizeof(longlong_t);
799 if (((last_position_ - current_position_) >=
sizeof(float_t)) || resize(
sizeof(float_t)))
801 current_position_ << float_t;
802 current_position_ +=
sizeof(float_t);
818 const double double_t)
820 if (((last_position_ - current_position_) >=
sizeof(double_t)) || resize(
sizeof(double_t)))
822 current_position_ << double_t;
823 current_position_ +=
sizeof(double_t);
839 const long double ldouble_t)
841 if (((last_position_ - current_position_) >=
sizeof(ldouble_t)) || resize(
sizeof(ldouble_t)))
843 current_position_ << ldouble_t;
845 current_position_ +=
sizeof(ldouble_t);
846 current_position_ << static_cast<long double>(0);
848 current_position_ +=
sizeof(ldouble_t);
872 const char* string_t);
881 const wchar_t* string_t);
895 const char* c_str = string_t.
c_str();
896 const auto str_len = strlen(c_str);
897 if (string_t.
size() > str_len)
924 template<
class _T,
size_t _Size>
928 return serialize_array(array_t.
data(), array_t.
size());
937 template<
class _T =
bool>
941 return serialize_bool_sequence(vector_t);
954 state state_before_error(*
this);
956 *this << static_cast<int32_t>(vector_t.
size());
960 return serialize_array(vector_t.
data(), vector_t.
size());
964 set_state(state_before_error);
982 return serialize_bool_sequence(vector_t);
1010 const uint8_t* octet_t,
1011 size_t num_elements)
1013 return serialize_array(
reinterpret_cast<const char*
>(octet_t), num_elements);
1025 size_t num_elements);
1037 size_t num_elements)
1039 return serialize_array(
reinterpret_cast<const char*
>(int8), num_elements);
1051 const uint16_t* ushort_t,
1052 size_t num_elements)
1054 return serialize_array(
reinterpret_cast<const int16_t*
>(ushort_t), num_elements);
1065 const int16_t* short_t,
1066 size_t num_elements);
1077 const uint32_t* ulong_t,
1078 size_t num_elements)
1080 return serialize_array(
reinterpret_cast<const int32_t*
>(ulong_t), num_elements);
1091 const int32_t* long_t,
1092 size_t num_elements);
1102 const wchar_t* wchar,
1103 size_t num_elements);
1114 const uint64_t* ulonglong_t,
1115 size_t num_elements)
1117 return serialize_array(
reinterpret_cast<const int64_t*
>(ulonglong_t), num_elements);
1128 const int64_t* longlong_t,
1129 size_t num_elements);
1139 const float* float_t,
1140 size_t num_elements);
1150 const double* double_t,
1151 size_t num_elements);
1161 const long double* ldouble_t,
1162 size_t num_elements);
1173 size_t num_elements);
1185 size_t num_elements)
1187 for (
size_t count = 0; count < num_elements; ++count)
1204 size_t num_elements)
1206 for (
size_t count = 0; count < num_elements; ++count)
1223 size_t num_elements)
1225 for (
size_t count = 0; count < num_elements; ++count)
1242 size_t num_elements)
1244 for (
size_t count = 0; count < num_elements; ++count)
1260 const _T* sequence_t,
1261 size_t num_elements)
1263 state state_before_error(*
this);
1265 serialize(
static_cast<int32_t
>(num_elements));
1269 return serialize_array(sequence_t, num_elements);
1273 set_state(state_before_error);
1290 return deserialize(
reinterpret_cast<char&
>(octet_t));
1303 if ((last_position_ - current_position_) >=
sizeof(char_t))
1305 current_position_++ >> char_t;
1322 return deserialize(
reinterpret_cast<char&
>(int8));
1335 return deserialize(
reinterpret_cast<int16_t&
>(ushort_t));
1348 if ((last_position_ - current_position_) >=
sizeof(short_t))
1350 current_position_ >> short_t;
1351 current_position_ +=
sizeof(short_t);
1369 return deserialize(
reinterpret_cast<int32_t&
>(ulong_t));
1382 if ((last_position_ - current_position_) >=
sizeof(long_t))
1384 current_position_ >> long_t;
1385 current_position_ +=
sizeof(long_t);
1405 wchar =
static_cast<wchar_t>(ret);
1417 uint64_t& ulonglong_t)
1419 return deserialize(
reinterpret_cast<int64_t&
>(ulonglong_t));
1430 int64_t& longlong_t)
1432 if ((last_position_ - current_position_) >=
sizeof(longlong_t))
1434 current_position_ >> longlong_t;
1435 current_position_ +=
sizeof(longlong_t);
1453 if ((last_position_ - current_position_) >=
sizeof(float_t))
1455 current_position_ >> float_t;
1456 current_position_ +=
sizeof(float_t);
1474 if ((last_position_ - current_position_) >=
sizeof(double_t))
1476 current_position_ >> double_t;
1477 current_position_ +=
sizeof(double_t);
1493 long double& ldouble_t)
1495 if ((last_position_ - current_position_) >=
sizeof(ldouble_t))
1497 current_position_ >> ldouble_t;
1498 current_position_ +=
sizeof(ldouble_t);
1500 current_position_ +=
sizeof(ldouble_t);
1541 wchar_t*& string_t);
1553 uint32_t length = 0;
1554 const char* str = read_string(length);
1555 string_t.
assign(str, length);
1569 uint32_t length = 0;
1570 string_t = read_wstring(length);
1580 template<
class _T,
size_t _Size>
1584 return deserialize_array(array_t.
data(), array_t.
size());
1593 template<
class _T =
bool>
1597 return deserialize_bool_sequence(vector_t);
1610 uint32_t sequence_length = 0;
1611 state state_before_error(*
this);
1613 *
this >> sequence_length;
1617 vector_t.
resize(sequence_length);
1618 return deserialize_array(vector_t.
data(), vector_t.
size());
1622 set_state(state_before_error);
1640 return deserialize_bool_sequence(vector_t);
1669 size_t num_elements)
1671 return deserialize_array(
reinterpret_cast<char*
>(octet_t), num_elements);
1683 size_t num_elements);
1695 size_t num_elements)
1697 return deserialize_array(
reinterpret_cast<char*
>(int8), num_elements);
1710 size_t num_elements)
1712 return deserialize_array(
reinterpret_cast<int16_t*
>(ushort_t), num_elements);
1724 size_t num_elements);
1736 size_t num_elements)
1738 return deserialize_array(
reinterpret_cast<int32_t*
>(ulong_t), num_elements);
1750 size_t num_elements);
1761 size_t num_elements);
1772 uint64_t* ulonglong_t,
1773 size_t num_elements)
1775 return deserialize_array(
reinterpret_cast<int64_t*
>(ulonglong_t), num_elements);
1786 int64_t* longlong_t,
1787 size_t num_elements);
1798 size_t num_elements);
1809 size_t num_elements);
1819 long double* ldouble_t,
1820 size_t num_elements);
1831 size_t num_elements);
1843 size_t num_elements)
1845 for (
size_t count = 0; count < num_elements; ++count)
1862 size_t num_elements)
1864 for (
size_t count = 0; count < num_elements; ++count)
1881 size_t num_elements)
1883 for (
size_t count = 0; count < num_elements; ++count)
1900 size_t num_elements)
1902 for (
size_t count = 0; count < num_elements; ++count)
1918 template<
class _T = std::
string>
1921 size_t& num_elements)
1923 return deserialize_string_sequence(sequence_t, num_elements);
1935 template<
class _T = std::w
string>
1938 size_t& num_elements)
1940 return deserialize_wstring_sequence(sequence_t, num_elements);
1955 size_t& num_elements)
1957 uint32_t sequence_length = 0;
1958 state state_before_error(*
this);
1964 sequence_t =
reinterpret_cast<_T*
>(calloc(sequence_length,
sizeof(_T)));
1965 deserialize_array(sequence_t, sequence_length);
1971 set_state(state_before_error);
1975 num_elements = sequence_length;
1990 FastCdr& deserialize_sequence<std::string>(
1992 size_t& num_elements)
1994 return deserialize_string_sequence(sequence_t, num_elements);
2007 FastCdr& deserialize_sequence<std::wstring>(
2009 size_t& num_elements)
2011 return deserialize_wstring_sequence(sequence_t, num_elements);
2024 FastCdr& serialize_bool_sequence(
2027 FastCdr& deserialize_bool_sequence(
2030 FastCdr& deserialize_string_sequence(
2032 size_t& num_elements);
2034 FastCdr& deserialize_wstring_sequence(
2036 size_t& num_elements);
2045 template<
class _T,
size_t _Size>
2048 size_t num_elements)
2050 return serialize_array(array_t->
data(), num_elements * array_t->
size());
2060 template<
class _T,
size_t _Size>
2063 size_t num_elements)
2065 return deserialize_array(array_t->
data(), num_elements * array_t->
size());
2069 size_t min_size_inc);
2071 const char* read_string(
This class represents a stream of bytes that contains (or will contain) serialized data....
This class stores the current state of a CDR serialization.
const FastBuffer::iterator current_position_
The position in the buffer when the state was created.
This class offers an interface to serialize/deserialize some basic types using a modified CDR protoco...
FastCdr & deserialize_sequence(std::wstring *&sequence_t, size_t &num_elements)
This function template deserializes a wide-string sequence. This function allocates memory to store t...
FastCdr & deserialize_array(uint64_t *ulonglong_t, size_t num_elements)
This function deserializes an array of unsigned long longs.
FastCdr & deserialize(long double &ldouble_t)
This function deserializes a long double.
FastCdr & serialize_array(const std::array< _T, _Size > *array_t, size_t num_elements)
This function template detects the content type of the STD container array and serializes the array.
FastBuffer::iterator current_position_
The current position in the serialization/deserialization process.
FastCdr & serialize(const _T &type_t)
This function template serializes a non-basic type.
FastCdr & deserialize(int32_t &long_t)
This function deserializes a long.
FastCdr & deserialize_array(uint16_t *ushort_t, size_t num_elements)
This function deserializes an array of unsigned shorts.
FastCdr & serialize(const int16_t short_t)
This function serializes a short.
FastCdr & deserialize(wchar_t &wchar)
This function deserializes a wide-char.
FastCdr & deserialize_array(std::wstring *string_t, size_t num_elements)
This function deserializes an array of wide-strings.
FastCdr & serialize_array(const std::wstring *string_t, size_t num_elements)
This function serializes an array of wstrings.
FastCdr & serialize_array(const uint8_t *octet_t, size_t num_elements)
This function serializes an array of octets.
FastCdr & serialize(const uint16_t ushort_t)
This function serializes an unsigned short.
FastCdr & serialize(const std::string &string_t)
This function serializes a std::string.
FastCdr & deserialize_array(_T *type_t, size_t num_elements)
This function template deserializes an array of non-basic type objects.
FastCdr & deserialize_array(std::string *string_t, size_t num_elements)
This function deserializes an array of strings.
FastCdr & serialize(const std::vector< _T > &vector_t)
This function template serializes a sequence.
FastCdr & serialize(const uint8_t octet_t)
This function serializes an octet.
FastCdr & deserialize_sequence(_T *&sequence_t, size_t &num_elements)
This function template deserializes a raw sequence. This function allocates memory to store the seque...
FastCdr & serialize(const std::vector< bool > &vector_t)
This function template serializes a sequence of booleans.
FastBuffer::iterator last_position_
The last position in the buffer;.
FastCdr & deserialize(std::string &string_t)
This function deserializes a std::string.
FastCdr & deserialize(float &float_t)
This function deserializes a float.
FastCdr & serialize_array(const std::string *string_t, size_t num_elements)
This function serializes an array of strings.
FastBuffer & cdr_buffer_
Reference to the buffer that will be serialized/deserialized.
FastCdr & deserialize(char &char_t)
This function deserializes a character.
FastCdr & deserialize(std::vector< bool > &vector_t)
This function template deserializes a sequence of booleans.
FastCdr & serialize_array(const uint64_t *ulonglong_t, size_t num_elements)
This function serializes an array of unsigned long longs.
FastCdr & serialize_array(const int8_t *int8, size_t num_elements)
This function serializes an array of int8_t.
FastCdr & deserialize(double &double_t)
This function deserializes a double.
FastCdr & deserialize(uint32_t &ulong_t)
This function deserializes an unsigned long.
FastCdr & serialize(const uint64_t ulonglong_t)
This function serializes an unsigned long long.
FastCdr & serialize_array(const std::vector< _T > *vector_t, size_t num_elements)
This function template serializes an array of sequences.
FastCdr & serialize(const uint32_t ulong_t)
This function serializes an unsigned long.
FastCdr & deserialize_array(std::array< _T, _Size > *array_t, size_t num_elements)
This function template detects the content type of the STD container array and deserializes the array...
FastCdr & serialize(const wchar_t wchar)
This function serializes a wide-char.
FastCdr & serialize(const std::wstring &string_t)
This function serializes a std::wstring.
FastCdr & deserialize(uint8_t &octet_t)
This function deserializes an octet.
FastCdr & serialize_array(const _T *type_t, size_t num_elements)
This function template serializes an array of non-basic type objects.
FastCdr & serialize(const long double ldouble_t)
This function serializes a long double.
FastCdr & deserialize_array(uint8_t *octet_t, size_t num_elements)
This function deserializes an array of octets.
FastCdr & deserialize(int16_t &short_t)
This function deserializes a short.
FastCdr & deserialize(std::vector< _T > &vector_t)
This function template deserializes a sequence.
FastCdr & serialize(const std::array< _T, _Size > &array_t)
This function template serializes an array.
FastCdr & serialize(const int32_t long_t)
This function serializes a long.
FastCdr(const FastCdr &)=delete
size_t get_serialized_data_length() const
This function returns the length of the serialized data inside the stream.
FastCdr & serialize(const char char_t)
This function serializes a character.
FastCdr & deserialize(std::array< _T, _Size > &array_t)
This function template deserializes an array.
FastCdr & serialize_sequence(const _T *sequence_t, size_t num_elements)
This function template serializes a raw sequence.
FastCdr & deserialize_sequence(std::string *&sequence_t, size_t &num_elements)
This function template deserializes a string sequence. This function allocates memory to store the se...
FastCdr & serialize_array(const uint16_t *ushort_t, size_t num_elements)
This function serializes an array of unsigned shorts.
FastCdr & deserialize(uint64_t &ulonglong_t)
This function deserializes an unsigned long long.
FastCdr & deserialize_array(int8_t *int8, size_t num_elements)
This function deserializes an array of int8_t.
FastCdr & serialize(const int64_t longlong_t)
This function serializes a long long.
FastCdr & deserialize_array(uint32_t *ulong_t, size_t num_elements)
This function deserializes an array of unsigned longs.
FastCdr & deserialize(_T &type_t)
This function template deserializes a non-basic type object.
FastCdr & deserialize(uint16_t &ushort_t)
This function deserializes an unsigned short.
FastCdr & serialize(const float float_t)
This function serializes a float.
FastCdr & serialize(const int8_t int8)
This function serializes an int8_t.
FastCdr & serialize(const double double_t)
This function serializes a double.
FastCdr & deserialize_array(std::vector< _T > *vector_t, size_t num_elements)
This function template deserializes an array of sequences.
FastCdr & deserialize(int64_t &longlong_t)
This function deserializes a long long.
FastCdr & deserialize(std::wstring &string_t)
This function deserializes a std::wstring.
FastCdr & deserialize(int8_t &int8)
This function deserializes an int8_t.
FastCdr & serialize_array(const uint32_t *ulong_t, size_t num_elements)
This function serializes an array of unsigned longs.
This class implements the iterator used to go through a FastBuffer.
This class is thrown as an exception when an invalid parameter is being serialized.
This abstract class is used to create exceptions.
virtual Cdr_DllAPI void raise() const =0
This function throws the object as exception.
This class is thrown as an exception when the buffer's internal memory reachs its size limit.
void serialize(Cdr &, const _T &)
void deserialize(Cdr &, _T &)