15 #ifndef _FASTCDR_CDR_H_
16 #define _FASTCDR_CDR_H_
18 #include "fastcdr_dll.h"
19 #include "FastBuffer.h"
20 #include "exceptions/NotEnoughMemoryException.h"
27 #if !__APPLE__ && !__FreeBSD__ && !__VXWORKS__
59 typedef enum : uint8_t
65 DDS_CDR_WITHOUT_PL = 0x0,
74 typedef enum : uint8_t
82 LITTLE_ENDIANNESS = 0x1
112 const state&) =
delete;
124 size_t m_lastDataSize;
138 const CdrType cdrType = CORBA_CDR);
230 return m_currentPosition - m_cdrBuffer.begin();
240 size_t current_alignment,
243 return (dataSize - (current_alignment % dataSize)) & (dataSize - 1);
272 m_alignPosition = m_currentPosition;
282 const uint8_t octet_t)
284 return serialize(octet_t);
296 return serialize(char_t);
308 return serialize(int8);
318 const uint16_t ushort_t)
320 return serialize(ushort_t);
330 const int16_t short_t)
332 return serialize(short_t);
342 const uint32_t ulong_t)
344 return serialize(ulong_t);
354 const int32_t long_t)
356 return serialize(long_t);
368 return serialize(wchar);
378 const uint64_t ulonglong_t)
380 return serialize(ulonglong_t);
390 const int64_t longlong_t)
392 return serialize(longlong_t);
404 return serialize(float_t);
414 const double double_t)
416 return serialize(double_t);
426 const long double ldouble_t)
428 return serialize(ldouble_t);
440 return serialize(bool_t);
450 const char* string_t)
452 return serialize(string_t);
464 return serialize(string_t);
474 const std::string& string_t)
476 return serialize(string_t);
486 const std::wstring& string_t)
488 return serialize(string_t);
498 template<
class _T,
size_t _Size>
499 inline Cdr& operator <<(
500 const std::array<_T, _Size>& array_t)
502 return serialize<_T, _Size>(array_t);
515 const std::vector<_T>& vector_t)
517 return serialize<_T>(vector_t);
526 template<
class _K,
class _T>
528 const std::map<_K, _T>& map_t)
530 return serialize<_K, _T>(map_t);
556 return deserialize(octet_t);
568 return deserialize(char_t);
580 return deserialize(int8);
592 return deserialize(ushort_t);
604 return deserialize(short_t);
616 return deserialize(ulong_t);
628 return deserialize(long_t);
641 return deserialize(wchar);
651 uint64_t& ulonglong_t)
653 return deserialize(ulonglong_t);
665 return deserialize(longlong_t);
677 return deserialize(float_t);
689 return deserialize(double_t);
699 long double& ldouble_t)
701 return deserialize(ldouble_t);
714 return deserialize(bool_t);
729 return deserialize(string_t);
739 std::string& string_t)
741 return deserialize(string_t);
751 std::wstring& string_t)
753 return deserialize(string_t);
763 template<
class _T,
size_t _Size>
764 inline Cdr& operator >>(
765 std::array<_T, _Size>& array_t)
767 return deserialize<_T, _Size>(array_t);
780 std::vector<_T>& vector_t)
782 return deserialize<_T>(vector_t);
791 template<
class _K,
class _T>
793 std::map<_K, _T>& map_t)
795 return deserialize<_K, _T>(map_t);
820 const uint8_t octet_t)
822 return serialize(
static_cast<char>(octet_t));
834 const uint8_t octet_t,
837 return serialize(
static_cast<char>(octet_t), endianness);
862 return serialize(char_t);
875 return serialize(
static_cast<char>(int8));
890 return serialize(
static_cast<char>(int8), endianness);
901 const uint16_t ushort_t)
903 return serialize(
static_cast<int16_t
>(ushort_t));
915 const uint16_t ushort_t,
918 return serialize(
static_cast<int16_t
>(ushort_t), endianness);
928 const int16_t short_t);
938 const int16_t short_t,
949 const uint32_t ulong_t)
951 return serialize(
static_cast<int32_t
>(ulong_t));
963 const uint32_t ulong_t,
966 return serialize(
static_cast<int32_t
>(ulong_t), endianness);
976 const int32_t long_t);
986 const int32_t long_t,
999 return serialize(
static_cast<uint32_t
>(wchar));
1011 const wchar_t wchar,
1014 return serialize(
static_cast<uint32_t
>(wchar), endianness);
1025 const uint64_t ulonglong_t)
1027 return serialize(
static_cast<int64_t
>(ulonglong_t));
1039 const uint64_t ulonglong_t,
1042 return serialize(
static_cast<int64_t
>(ulonglong_t), endianness);
1052 const int64_t longlong_t);
1062 const int64_t longlong_t,
1072 const float float_t);
1082 const float float_t,
1092 const double double_t);
1102 const double double_t,
1114 const long double ldouble_t);
1125 const long double ldouble_t,
1150 return serialize(bool_t);
1162 return serialize(
static_cast<const char*
>(string_t));
1172 const char* string_t);
1181 const wchar_t* string_t);
1191 const char* string_t,
1202 const wchar_t* string_t,
1213 const std::string& string_t)
1215 return serialize(string_t.c_str());
1226 const std::wstring& string_t)
1228 return serialize(string_t.c_str());
1240 const std::string& string_t,
1243 return serialize(string_t.c_str(), endianness);
1253 template<
class _T,
size_t _Size>
1254 inline Cdr& serialize(
1255 const std::array<_T, _Size>& array_t)
1257 return serializeArray(array_t.data(), array_t.size());
1267 template<
class _T,
size_t _Size>
1268 inline Cdr& serialize(
1269 const std::array<_T, _Size>& array_t,
1270 Endianness endianness)
1272 return serializeArray(array_t.data(), array_t.size(), endianness);
1277 #if !defined(_MSC_VER) && HAVE_CXX0X
1284 template<
class _T =
bool>
1286 const std::vector<bool>& vector_t)
1288 return serializeBoolSequence(vector_t);
1301 const std::vector<_T>& vector_t)
1303 state state_before_error(*
this);
1305 *this << static_cast<int32_t>(vector_t.size());
1309 return serializeArray(vector_t.data(), vector_t.size());
1313 setState(state_before_error);
1326 template<
class _K,
class _T>
1328 const std::map<_K, _T>& map_t)
1330 state state_(*
this);
1332 *this << static_cast<int32_t>(map_t.size());
1336 for (
auto it_pair = map_t.begin(); it_pair != map_t.end(); ++it_pair)
1338 *
this << it_pair->first;
1339 *
this << it_pair->second;
1360 Cdr& serialize<bool>(
1361 const std::vector<bool>& vector_t)
1363 return serializeBoolSequence(vector_t);
1377 const std::vector<_T>& vector_t,
1380 bool auxSwap = m_swapBytes;
1381 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
1385 serialize(vector_t);
1386 m_swapBytes = auxSwap;
1390 m_swapBytes = auxSwap;
1420 const uint8_t* octet_t,
1423 return serializeArray(
reinterpret_cast<const char*
>(octet_t), numElements);
1436 const uint8_t* octet_t,
1441 return serializeArray(
reinterpret_cast<const char*
>(octet_t), numElements);
1453 size_t numElements);
1470 return serializeArray(char_t, numElements);
1485 return serializeArray(
reinterpret_cast<const char*
>(int8), numElements);
1503 return serializeArray(
reinterpret_cast<const char*
>(int8), numElements);
1515 const uint16_t* ushort_t,
1518 return serializeArray(
reinterpret_cast<const int16_t*
>(ushort_t), numElements);
1531 const uint16_t* ushort_t,
1535 return serializeArray(
reinterpret_cast<const int16_t*
>(ushort_t), numElements, endianness);
1546 const int16_t* short_t,
1547 size_t numElements);
1558 const int16_t* short_t,
1571 const uint32_t* ulong_t,
1574 return serializeArray(
reinterpret_cast<const int32_t*
>(ulong_t), numElements);
1587 const uint32_t* ulong_t,
1591 return serializeArray(
reinterpret_cast<const int32_t*
>(ulong_t), numElements, endianness);
1602 const int32_t* long_t,
1603 size_t numElements);
1614 const int32_t* long_t,
1626 const wchar_t* wchar,
1627 size_t numElements);
1638 const wchar_t* wchar,
1651 const uint64_t* ulonglong_t,
1654 return serializeArray(
reinterpret_cast<const int64_t*
>(ulonglong_t), numElements);
1667 const uint64_t* ulonglong_t,
1671 return serializeArray(
reinterpret_cast<const int64_t*
>(ulonglong_t), numElements, endianness);
1682 const int64_t* longlong_t,
1683 size_t numElements);
1694 const int64_t* longlong_t,
1706 const float* float_t,
1707 size_t numElements);
1718 const float* float_t,
1730 const double* double_t,
1731 size_t numElements);
1742 const double* double_t,
1754 const long double* ldouble_t,
1755 size_t numElements);
1766 const long double* ldouble_t,
1779 size_t numElements);
1796 return serializeArray(bool_t, numElements);
1808 const std::string* string_t,
1811 for (
size_t count = 0; count < numElements; ++count)
1813 serialize(string_t[count].c_str());
1827 const std::wstring* string_t,
1830 for (
size_t count = 0; count < numElements; ++count)
1832 serialize(string_t[count].c_str());
1847 const std::string* string_t,
1851 bool auxSwap = m_swapBytes;
1852 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
1856 serializeArray(string_t, numElements);
1857 m_swapBytes = auxSwap;
1861 m_swapBytes = auxSwap;
1878 const std::wstring* string_t,
1882 bool auxSwap = m_swapBytes;
1883 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
1887 serializeArray(string_t, numElements);
1888 m_swapBytes = auxSwap;
1892 m_swapBytes = auxSwap;
1908 const std::vector<_T>* vector_t,
1911 for (
size_t count = 0; count < numElements; ++count)
1913 serialize(vector_t[count]);
1930 for (
size_t count = 0; count < numElements; ++count)
1951 bool auxSwap = m_swapBytes;
1952 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
1956 serializeArray(type_t, numElements);
1957 m_swapBytes = auxSwap;
1961 m_swapBytes = auxSwap;
1977 const _T* sequence_t,
1980 state state_before_error(*
this);
1982 serialize(
static_cast<int32_t
>(numElements));
1986 return serializeArray(sequence_t, numElements);
1990 setState(state_before_error);
2007 const _T* sequence_t,
2011 bool auxSwap = m_swapBytes;
2012 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
2016 serializeSequence(sequence_t, numElements);
2017 m_swapBytes = auxSwap;
2021 m_swapBytes = auxSwap;
2038 return deserialize(
reinterpret_cast<char&
>(octet_t));
2053 return deserialize(
reinterpret_cast<char&
>(octet_t), endianness);
2078 return deserialize(char_t);
2091 return deserialize(
reinterpret_cast<char&
>(int8));
2106 return deserialize(
reinterpret_cast<char&
>(int8), endianness);
2119 return deserialize(
reinterpret_cast<int16_t&
>(ushort_t));
2134 return deserialize(
reinterpret_cast<int16_t&
>(ushort_t), endianness);
2167 return deserialize(
reinterpret_cast<int32_t&
>(ulong_t));
2182 return deserialize(
reinterpret_cast<int32_t&
>(ulong_t), endianness);
2217 wchar =
static_cast<wchar_t>(ret);
2234 deserialize(ret, endianness);
2235 wchar =
static_cast<wchar_t>(ret);
2247 uint64_t& ulonglong_t)
2249 return deserialize(
reinterpret_cast<int64_t&
>(ulonglong_t));
2261 uint64_t& ulonglong_t,
2264 return deserialize(
reinterpret_cast<int64_t&
>(ulonglong_t), endianness);
2274 int64_t& longlong_t);
2284 int64_t& longlong_t,
2335 long double& ldouble_t);
2346 long double& ldouble_t,
2373 return deserialize(bool_t);
2398 wchar_t*& string_t);
2436 std::string& string_t)
2438 uint32_t length = 0;
2439 const char* str = readString(length);
2440 string_t = std::string(str, length);
2452 std::wstring& string_t)
2454 uint32_t length = 0;
2455 string_t = readWString(length);
2468 std::string& string_t,
2471 bool auxSwap = m_swapBytes;
2472 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
2476 deserialize(string_t);
2477 m_swapBytes = auxSwap;
2481 m_swapBytes = auxSwap;
2497 std::wstring& string_t,
2500 bool auxSwap = m_swapBytes;
2501 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
2505 deserialize(string_t);
2506 m_swapBytes = auxSwap;
2510 m_swapBytes = auxSwap;
2524 template<
class _T,
size_t _Size>
2525 inline Cdr& deserialize(
2526 std::array<_T, _Size>& array_t)
2528 return deserializeArray(array_t.data(), array_t.size());
2538 template<
class _T,
size_t _Size>
2539 inline Cdr& deserialize(
2540 std::array<_T, _Size>& array_t,
2541 Endianness endianness)
2543 return deserializeArray(array_t.data(), array_t.size(), endianness);
2548 #if !defined(_MSC_VER) && HAVE_CXX0X
2555 template<
class _T =
bool>
2557 std::vector<bool>& vector_t)
2559 return deserializeBoolSequence(vector_t);
2572 std::vector<_T>& vector_t)
2574 uint32_t seqLength = 0;
2575 state state_before_error(*
this);
2585 if ((m_lastPosition - m_currentPosition) < seqLength)
2587 setState(state_before_error);
2594 vector_t.resize(seqLength);
2595 return deserializeArray(vector_t.data(), vector_t.size());
2599 setState(state_before_error);
2612 template<
class _K,
class _T>
2614 std::map<_K, _T>& map_t)
2616 uint32_t seqLength = 0;
2617 state state_(*
this);
2623 for (uint32_t i = 0; i < seqLength; ++i)
2629 map_t.emplace(std::pair<_K, _T>(std::move(key), std::move(value)));
2649 Cdr& deserialize<bool>(
2650 std::vector<bool>& vector_t)
2652 return deserializeBoolSequence(vector_t);
2666 std::vector<_T>& vector_t,
2669 bool auxSwap = m_swapBytes;
2670 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
2674 deserialize(vector_t);
2675 m_swapBytes = auxSwap;
2679 m_swapBytes = auxSwap;
2712 return deserializeArray(
reinterpret_cast<char*
>(octet_t), numElements);
2729 return deserializeArray(
reinterpret_cast<char*
>(octet_t), numElements, endianness);
2741 size_t numElements);
2758 return deserializeArray(char_t, numElements);
2773 return deserializeArray(
reinterpret_cast<char*
>(int8), numElements);
2790 return deserializeArray(
reinterpret_cast<char*
>(int8), numElements, endianness);
2805 return deserializeArray(
reinterpret_cast<int16_t*
>(ushort_t), numElements);
2822 return deserializeArray(
reinterpret_cast<int16_t*
>(ushort_t), numElements, endianness);
2834 size_t numElements);
2861 return deserializeArray(
reinterpret_cast<int32_t*
>(ulong_t), numElements);
2878 return deserializeArray(
reinterpret_cast<int32_t*
>(ulong_t), numElements, endianness);
2890 size_t numElements);
2914 size_t numElements);
2938 uint64_t* ulonglong_t,
2941 return deserializeArray(
reinterpret_cast<int64_t*
>(ulonglong_t), numElements);
2954 uint64_t* ulonglong_t,
2958 return deserializeArray(
reinterpret_cast<int64_t*
>(ulonglong_t), numElements, endianness);
2969 int64_t* longlong_t,
2970 size_t numElements);
2981 int64_t* longlong_t,
2994 size_t numElements);
3018 size_t numElements);
3041 long double* ldouble_t,
3042 size_t numElements);
3053 long double* ldouble_t,
3066 size_t numElements);
3083 return deserializeArray(bool_t, numElements);
3095 std::string* string_t,
3098 for (
size_t count = 0; count < numElements; ++count)
3100 deserialize(string_t[count]);
3114 std::wstring* string_t,
3117 for (
size_t count = 0; count < numElements; ++count)
3119 deserialize(string_t[count]);
3134 std::string* string_t,
3138 bool auxSwap = m_swapBytes;
3139 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
3143 deserializeArray(string_t, numElements);
3144 m_swapBytes = auxSwap;
3148 m_swapBytes = auxSwap;
3165 std::wstring* string_t,
3169 bool auxSwap = m_swapBytes;
3170 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
3174 deserializeArray(string_t, numElements);
3175 m_swapBytes = auxSwap;
3179 m_swapBytes = auxSwap;
3195 std::vector<_T>* vector_t,
3198 for (
size_t count = 0; count < numElements; ++count)
3200 deserialize(vector_t[count]);
3217 for (
size_t count = 0; count < numElements; ++count)
3238 bool auxSwap = m_swapBytes;
3239 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
3243 deserializeArray(type_t, numElements);
3244 m_swapBytes = auxSwap;
3248 m_swapBytes = auxSwap;
3255 #if !defined(_MSC_VER) && HAVE_CXX0X
3265 template<
class _T = std::
string>
3266 Cdr& deserializeSequence(
3267 std::string*& sequence_t,
3268 size_t& numElements)
3270 return deserializeStringSequence(sequence_t, numElements);
3282 template<
class _T = std::w
string>
3283 Cdr& deserializeSequence(
3284 std::wstring*& sequence_t,
3285 size_t& numElements)
3287 return deserializeWStringSequence(sequence_t, numElements);
3304 size_t& numElements)
3306 uint32_t seqLength = 0;
3307 state state_before_error(*
this);
3309 deserialize(seqLength);
3313 sequence_t =
reinterpret_cast<_T*
>(calloc(seqLength,
sizeof(_T)));
3314 deserializeArray(sequence_t, seqLength);
3320 setState(state_before_error);
3324 numElements = seqLength;
3339 Cdr& deserializeSequence<std::string>(
3340 std::string*& sequence_t,
3341 size_t& numElements)
3343 return deserializeStringSequence(sequence_t, numElements);
3356 Cdr& deserializeSequence<std::wstring>(
3357 std::wstring*& sequence_t,
3358 size_t& numElements)
3360 return deserializeWStringSequence(sequence_t, numElements);
3378 size_t& numElements,
3381 bool auxSwap = m_swapBytes;
3382 m_swapBytes = (m_swapBytes && (m_endianness == endianness)) || (!m_swapBytes && (m_endianness != endianness));
3386 deserializeSequence(sequence_t, numElements);
3387 m_swapBytes = auxSwap;
3391 m_swapBytes = auxSwap;
3401 const Cdr&) =
delete;
3404 const Cdr&) =
delete;
3406 Cdr& serializeBoolSequence(
3407 const std::vector<bool>& vector_t);
3409 Cdr& deserializeBoolSequence(
3410 std::vector<bool>& vector_t);
3412 Cdr& deserializeStringSequence(
3413 std::string*& sequence_t,
3414 size_t& numElements);
3416 Cdr& deserializeWStringSequence(
3417 std::wstring*& sequence_t,
3418 size_t& numElements);
3428 template<
class _T,
size_t _Size>
3429 Cdr& serializeArray(
3430 const std::array<_T, _Size>* array_t,
3433 return serializeArray(array_t->data(), numElements * array_t->size());
3444 template<
class _T,
size_t _Size>
3445 Cdr& serializeArray(
3446 const std::array<_T, _Size>* array_t,
3448 Endianness endianness)
3450 return serializeArray(array_t->data(), numElements * array_t->size(), endianness);
3460 template<
class _T,
size_t _Size>
3461 Cdr& deserializeArray(
3462 std::array<_T, _Size>* array_t,
3465 return deserializeArray(array_t->data(), numElements * array_t->size());
3476 template<
class _T,
size_t _Size>
3477 Cdr& deserializeArray(
3478 std::array<_T, _Size>* array_t,
3480 Endianness endianness)
3482 return deserializeArray(array_t->data(), numElements * array_t->size(), endianness);
3492 inline size_t alignment(
3493 size_t dataSize)
const
3496 m_lastDataSize ? (dataSize - ((m_currentPosition - m_alignPosition) % dataSize)) &
3504 inline void makeAlign(
3507 m_currentPosition += align;
3519 const char* readString(
3521 const std::wstring readWString(
3525 FastBuffer& m_cdrBuffer;
3531 DDSCdrPlFlag m_plFlag;
3537 uint8_t m_endianness;
3543 size_t m_lastDataSize;
This class implements the iterator used to go through a FastBuffer.
Definition: FastBuffer.h:43
This class stores the current state of a CDR serialization.
Definition: Cdr.h:92
state(const Cdr &cdr)
Default constructor.
state(const state &)
Copy constructor.
This class offers an interface to serialize/deserialize some basic types using CDR protocol inside an...
Definition: Cdr.h:44
Cdr & deserializeArray(double *double_t, size_t numElements, Endianness endianness)
This function deserializes an array of doubles with a different endianness.
Cdr & serializeArray(const uint64_t *ulonglong_t, size_t numElements)
This function serializes an array of unsigned long longs.
Definition: Cdr.h:1650
Cdr & serialize(const std::vector< _T > &vector_t, Endianness endianness)
This function template serializes a sequence with a different endianness.
Definition: Cdr.h:1376
Cdr & deserializeArray(int32_t *long_t, size_t numElements)
This function deserializes an array of longs.
Cdr & deserializeArray(uint64_t *ulonglong_t, size_t numElements)
This function deserializes an array of unsigned long longs.
Definition: Cdr.h:2937
Cdr & deserializeArray(bool *bool_t, size_t numElements)
This function deserializes an array of booleans.
Cdr & read_encapsulation()
This function reads the encapsulation of the CDR stream.
Cdr & deserializeArray(char *char_t, size_t numElements)
This function deserializes an array of characters.
Cdr & serializeArray(const int32_t *long_t, size_t numElements, Endianness endianness)
This function serializes an array of longs with a different endianness.
DDSCdrPlFlag
This enumeration represents the two posible values of the flag that points if the content is a parame...
Definition: Cdr.h:63
Cdr & serialize(const uint8_t octet_t)
This function serializes an octet.
Definition: Cdr.h:819
Cdr & deserializeArray(uint16_t *ushort_t, size_t numElements)
This function deserializes an array of unsigned shorts.
Definition: Cdr.h:2801
Cdr & deserializeArray(uint32_t *ulong_t, size_t numElements)
This function deserializes an array of unsigned longs.
Definition: Cdr.h:2857
Cdr & serialize(const wchar_t wchar, Endianness endianness)
This function serializes a wide-char with a different endianness.
Definition: Cdr.h:1010
Cdr & deserializeArray(float *float_t, size_t numElements)
This function deserializes an array of floats.
void changeEndianness(Endianness endianness)
This function sets the current endianness used by the CDR type.
Cdr & serializeArray(const int64_t *longlong_t, size_t numElements, Endianness endianness)
This function serializes an array of long longs with a different endianness.
Cdr & deserialize(int8_t &int8, Endianness endianness)
This function deserializes an int8_t with a different endianness.
Definition: Cdr.h:2102
Cdr & serializeArray(const _T *type_t, size_t numElements, Endianness endianness)
This function template serializes an array of non-basic objects with a different endianness.
Definition: Cdr.h:1946
Cdr & serialize(const float float_t, Endianness endianness)
This function serializes a float with a different endianness.
Cdr & serializeArray(const uint16_t *ushort_t, size_t numElements)
This function serializes an array of unsigned shorts.
Definition: Cdr.h:1514
void setDDSCdrOptions(uint16_t options)
This function sets the option flags when the CDR type is eprosima::fastcdr::DDS_CDR.
Cdr & serializeArray(const std::vector< _T > *vector_t, size_t numElements)
This function template serializes an array of sequences of objects.
Definition: Cdr.h:1907
Cdr & serialize(const std::string &string_t)
This function serializes a std::string.
Definition: Cdr.h:1212
Cdr & deserializeArray(_T *type_t, size_t numElements)
This function template deserializes an array of non-basic objects.
Definition: Cdr.h:3213
Cdr & serialize(const uint8_t octet_t, Endianness endianness)
This function serializes an octet with a different endianness.
Definition: Cdr.h:833
Cdr & deserialize(int64_t &longlong_t)
This function deserializes a long long.
Cdr & deserializeArray(int32_t *long_t, size_t numElements, Endianness endianness)
This function deserializes an array of longs with a different endianness.
Cdr & deserialize(uint8_t &octet_t)
This function deserializes an octet.
Definition: Cdr.h:2035
Cdr & serialize(const std::wstring &string_t)
This function serializes a std::wstring.
Definition: Cdr.h:1225
Cdr & serializeArray(const uint16_t *ushort_t, size_t numElements, Endianness endianness)
This function serializes an array of unsigned shorts with a different endianness.
Definition: Cdr.h:1530
Cdr & deserializeArray(int64_t *longlong_t, size_t numElements)
This function deserializes an array of long longs.
Cdr & serialize(const uint32_t ulong_t)
This function serializes an unsigned long.
Definition: Cdr.h:948
Cdr & serializeArray(const float *float_t, size_t numElements, Endianness endianness)
This function serializes an array of floats with a different endianness.
Cdr & deserialize(uint16_t &ushort_t, Endianness endianness)
This function deserializes an unsigned short with a different endianness.
Definition: Cdr.h:2130
Cdr & serializeArray(const uint32_t *ulong_t, size_t numElements, Endianness endianness)
This function serializes an array of unsigned longs with a different endianness.
Definition: Cdr.h:1586
Cdr & serialize(const int8_t int8, Endianness endianness)
This function serializes an int8_t with a different endianness.
Definition: Cdr.h:886
Cdr & serialize(const _T &type_t)
This function template serializes a non-basic object.
Definition: Cdr.h:1404
Cdr & serializeArray(const std::wstring *string_t, size_t numElements, Endianness endianness)
This function serializes an array of wide-strings with a different endianness.
Definition: Cdr.h:1877
Cdr & serialize(const int64_t longlong_t, Endianness endianness)
This function serializes a long long with a different endianness.
Cdr & serialize(const uint16_t ushort_t, Endianness endianness)
This function serializes an unsigned short with a different endianness.
Definition: Cdr.h:914
Cdr & serialize(const int8_t int8)
This function serializes an int8_t.
Definition: Cdr.h:872
Cdr & serializeArray(const double *double_t, size_t numElements)
This function serializes an array of doubles.
Cdr & serialize(const std::map< _K, _T > &map_t)
This function template serializes a map.
Definition: Cdr.h:1327
Cdr & deserializeArray(int16_t *short_t, size_t numElements)
This function deserializes an array of shorts.
Cdr & deserialize(int32_t &long_t)
This function deserializes a long.
Cdr(FastBuffer &cdrBuffer, const Endianness endianness=DEFAULT_ENDIAN, const CdrType cdrType=CORBA_CDR)
This constructor creates an eprosima::fastcdr::Cdr object that can serialize/deserialize the assigned...
Cdr & deserializeArray(uint8_t *octet_t, size_t numElements)
This function deserializes an array of octets.
Definition: Cdr.h:2708
Cdr & serialize(const int16_t short_t)
This function serializes a short.
Cdr & deserialize(int32_t &long_t, Endianness endianness)
This function deserializes a long with a different endianness.
Cdr & deserialize(char *&string_t, Endianness endianness)
This function deserializes a string with a different endianness.
Cdr & deserialize(uint8_t &octet_t, Endianness endianness)
This function deserializes an octet with a different endianness.
Definition: Cdr.h:2049
Cdr & deserializeArray(uint32_t *ulong_t, size_t numElements, Endianness endianness)
This function deserializes an array of unsigned longs with a different endianness.
Definition: Cdr.h:2873
Cdr & serialize(const uint32_t ulong_t, Endianness endianness)
This function serializes an unsigned long with a different endianness.
Definition: Cdr.h:962
Endianness
This enumeration represents endianness types.
Definition: Cdr.h:78
size_t getSerializedDataLength() const
This function returns the length of the serialized data inside the stream.
Definition: Cdr.h:228
Cdr & deserializeArray(std::string *string_t, size_t numElements)
This function deserializes an array of strings.
Definition: Cdr.h:3094
Cdr & serializeArray(const wchar_t *wchar, size_t numElements)
This function serializes an array of wide-chars.
Cdr & deserializeArray(long double *ldouble_t, size_t numElements, Endianness endianness)
This function deserializes an array of long doubles with a different endianness.
Cdr & deserialize(char &char_t, Endianness endianness)
This function deserializes a character with a different endianness.
Definition: Cdr.h:2073
Cdr & serializeArray(const float *float_t, size_t numElements)
This function serializes an array of floats.
Cdr & serialize(const bool bool_t, Endianness endianness)
This function serializes a boolean with a different endianness.
Definition: Cdr.h:1145
Cdr & deserialize(int16_t &short_t, Endianness endianness)
This function deserializes a short with a different endianness.
Cdr & serializeArray(const int8_t *int8, size_t numElements)
This function serializes an array of int8_t.
Definition: Cdr.h:1481
void setState(state &state)
This function sets a previous state of the CDR serialization process;.
Cdr & serialize(const int16_t short_t, Endianness endianness)
This function serializes a short with a different endianness.
Cdr & serializeArray(const std::string *string_t, size_t numElements)
This function serializes an array of strings.
Definition: Cdr.h:1807
Cdr & serialize(const uint64_t ulonglong_t)
This function serializes an unsigned long long.
Definition: Cdr.h:1024
Cdr & serialize(const uint64_t ulonglong_t, Endianness endianness)
This function serializes an unsigned long long with a different endianness.
Definition: Cdr.h:1038
Cdr & deserializeArray(std::wstring *string_t, size_t numElements, Endianness endianness)
This function deserializes an array of wide-strings with a different endianness.
Definition: Cdr.h:3164
Cdr & deserialize(std::map< _K, _T > &map_t)
This function template deserializes a map.
Definition: Cdr.h:2613
Cdr & deserialize(long double &ldouble_t, Endianness endianness)
This function deserializes a long double with a different endianness.
static const Endianness DEFAULT_ENDIAN
Default endiness in the system.
Definition: Cdr.h:86
Cdr & deserialize(wchar_t *&string_t, Endianness endianness)
This function deserializes a wide string with a different endianness.
Cdr & deserializeSequence(_T *&sequence_t, size_t &numElements, Endianness endianness)
This function template deserializes a raw sequence with a different endianness.
Definition: Cdr.h:3376
Cdr & serializeArray(const int32_t *long_t, size_t numElements)
This function serializes an array of longs.
Cdr & serializeArray(const int16_t *short_t, size_t numElements, Endianness endianness)
This function serializes an array of shorts with a different endianness.
Cdr & serializeArray(const int8_t *int8, size_t numElements, Endianness endianness)
This function serializes an array of int8_t with a different endianness.
Definition: Cdr.h:1497
Cdr & serializeArray(const bool *bool_t, size_t numElements, Endianness endianness)
This function serializes an array of booleans with a different endianness.
Definition: Cdr.h:1790
Cdr & deserializeArray(float *float_t, size_t numElements, Endianness endianness)
This function deserializes an array of floats with a different endianness.
Cdr & serializeArray(const uint64_t *ulonglong_t, size_t numElements, Endianness endianness)
This function serializes an array of unsigned long longs with a different endianness.
Definition: Cdr.h:1666
Cdr & deserialize(std::string &string_t, Endianness endianness)
This function deserializes a string with a different endianness.
Definition: Cdr.h:2467
Cdr & serialize(const int32_t long_t)
This function serializes a long.
Cdr & deserialize(char *&string_t)
This function deserializes a string.
Cdr & serializeArray(const double *double_t, size_t numElements, Endianness endianness)
This function serializes an array of doubles with a different endianness.
Cdr & deserialize(double &double_t)
This function deserializes a double.
Cdr & deserialize(int64_t &longlong_t, Endianness endianness)
This function deserializes a long long with a different endianness.
Cdr & deserialize(std::wstring &string_t)
This function deserializes a std::string.
Definition: Cdr.h:2451
Cdr & deserialize(wchar_t &wchar)
This function deserializes a wide-char.
Definition: Cdr.h:2212
Cdr & serializeSequence(const _T *sequence_t, size_t numElements)
This function template serializes a raw sequence.
Definition: Cdr.h:1976
Cdr & deserialize(bool &bool_t, Endianness endianness)
This function deserializes a boolean with a different endianness.
Definition: Cdr.h:2368
Cdr & serializeArray(const long double *ldouble_t, size_t numElements, Endianness endianness)
This function serializes an array of long doubles with a different endianness.
Cdr & serializeArray(const int64_t *longlong_t, size_t numElements)
This function serializes an array of long longs.
Cdr & deserialize(std::string &string_t)
This function deserializes a std::string.
Definition: Cdr.h:2435
Cdr & serialize(const long double ldouble_t)
This function serializes a long double.
Cdr & deserializeArray(bool *bool_t, size_t numElements, Endianness endianness)
This function deserializes an array of booleans with a different endianness.
Definition: Cdr.h:3077
Cdr & serialize_encapsulation()
This function writes the encapsulation of the CDR stream.
Cdr & deserializeArray(std::vector< _T > *vector_t, size_t numElements)
This function deserializes an array of sequences of objects.
Definition: Cdr.h:3194
Cdr & deserializeArray(wchar_t *wchar, size_t numElements, Endianness endianness)
This function deserializes an array of wide-chars with a different endianness.
Cdr & serialize(const int32_t long_t, Endianness endianness)
This function serializes a long with a different endianness.
Cdr & deserialize(std::vector< _T > &vector_t, Endianness endianness)
This function template deserializes a sequence with a different endianness.
Definition: Cdr.h:2665
Cdr & deserialize(int16_t &short_t)
This function deserializes a short.
Cdr & serialize(const double double_t)
This function serializes a double.
Cdr & serialize(const std::vector< _T > &vector_t)
This function template serializes a sequence.
Definition: Cdr.h:1300
Cdr & serialize(const wchar_t *string_t, Endianness endianness)
This function serializes a wstring with a different endianness.
Cdr & deserializeArray(int16_t *short_t, size_t numElements, Endianness endianness)
This function deserializes an array of shorts with a different endianness.
Cdr & deserializeArray(_T *type_t, size_t numElements, Endianness endianness)
This function template deserializes an array of non-basic objects with a different endianness.
Definition: Cdr.h:3233
Cdr & deserialize(double &double_t, Endianness endianness)
This function deserializes a double with a different endianness.
Cdr & deserialize(float &float_t)
This function deserializes a float.
Cdr & deserializeArray(char *char_t, size_t numElements, Endianness endianness)
This function deserializes an array of characters with a different endianness.
Definition: Cdr.h:2752
Cdr & deserialize(uint16_t &ushort_t)
This function deserializes an unsigned short.
Definition: Cdr.h:2116
Cdr & serialize(const wchar_t wchar)
This function serializes a wide-char.
Definition: Cdr.h:996
Cdr & serializeArray(const std::wstring *string_t, size_t numElements)
This function serializes an array of wide-strings.
Definition: Cdr.h:1826
uint16_t getDDSCdrOptions() const
This function returns the option flags when the CDR type is eprosima::fastcdr::DDS_CDR.
Cdr & deserialize(std::wstring &string_t, Endianness endianness)
This function deserializes a string with a different endianness.
Definition: Cdr.h:2496
Cdr & serialize(const uint16_t ushort_t)
This function serializes an unsigned short.
Definition: Cdr.h:900
static size_t alignment(size_t current_alignment, size_t dataSize)
Get the number of bytes needed to align a position to certain data size.
Definition: Cdr.h:239
Cdr & serialize(const int64_t longlong_t)
This function serializes a long long.
Cdr & serialize(const char char_t)
This function serializes a character.
Cdr & deserialize(_T &type_t)
This function template deserializes a non-basic object.
Definition: Cdr.h:2693
Cdr & deserialize(char &char_t)
This function deserializes a character.
Cdr & deserialize(wchar_t &wchar, Endianness endianness)
This function deserializes a wide-char with a different endianness.
Definition: Cdr.h:2229
Cdr & serializeArray(const char *char_t, size_t numElements, Endianness endianness)
This function serializes an array of characters with a different endianness.
Definition: Cdr.h:1464
Cdr & serialize(const double double_t, Endianness endianness)
This function serializes a double with a different endianness.
Cdr & deserializeArray(int8_t *int8, size_t numElements, Endianness endianness)
This function deserializes an array of int8_t with a different endianness.
Definition: Cdr.h:2785
Cdr & deserializeArray(uint64_t *ulonglong_t, size_t numElements, Endianness endianness)
This function deserializes an array of unsigned long longs with a different endianness.
Definition: Cdr.h:2953
Cdr & deserialize(uint64_t &ulonglong_t, Endianness endianness)
This function deserializes an unsigned long long with a different endianness.
Definition: Cdr.h:2260
Cdr & deserializeArray(double *double_t, size_t numElements)
This function deserializes an array of doubles.
Cdr & deserialize(uint32_t &ulong_t)
This function deserializes an unsigned long.
Definition: Cdr.h:2164
Cdr & serializeArray(const int16_t *short_t, size_t numElements)
This function serializes an array of shorts.
DDSCdrPlFlag getDDSCdrPlFlag() const
This function returns the parameter list flag when the CDR type is eprosima::fastcdr::DDS_CDR.
Cdr & deserializeArray(wchar_t *wchar, size_t numElements)
This function deserializes an array of wide-chars.
Cdr & serializeSequence(const _T *sequence_t, size_t numElements, Endianness endianness)
This function template serializes a raw sequence with a different endianness.
Definition: Cdr.h:2006
Cdr & serialize(const wchar_t *string_t)
This function serializes a wstring.
void setDDSCdrPlFlag(DDSCdrPlFlag plFlag)
This function sets the parameter list flag when the CDR type is eprosima::fastcdr::DDS_CDR.
Cdr & deserializeArray(int8_t *int8, size_t numElements)
This function deserializes an array of int8_t.
Definition: Cdr.h:2769
Cdr & serialize(const std::string &string_t, Endianness endianness)
This function serializes a std::string with a different endianness.
Definition: Cdr.h:1239
Cdr & deserializeArray(long double *ldouble_t, size_t numElements)
This function deserializes an array of long doubles.
Cdr & deserialize(std::vector< _T > &vector_t)
This function template deserializes a sequence.
Definition: Cdr.h:2571
Cdr & deserializeArray(uint16_t *ushort_t, size_t numElements, Endianness endianness)
This function deserializes an array of unsigned shorts with a different endianness.
Definition: Cdr.h:2817
Cdr & serialize(const bool bool_t)
This function serializes a boolean.
void reset()
This function resets the current position in the buffer to the beginning.
Cdr & serialize(const float float_t)
This function serializes a float.
Cdr & deserialize(int8_t &int8)
This function deserializes an int8_t.
Definition: Cdr.h:2088
Cdr & serialize(char *string_t)
This function serializes a string.
Definition: Cdr.h:1159
Cdr & deserialize(float &float_t, Endianness endianness)
This function deserializes a float with a different endianness.
Cdr & deserialize(wchar_t *&string_t)
This function deserializes a wide string.
Cdr & serializeArray(const uint8_t *octet_t, size_t numElements, Endianness endianness)
This function serializes an array of octets with a different endianness.
Definition: Cdr.h:1435
Cdr & serializeArray(const bool *bool_t, size_t numElements)
This function serializes an array of booleans.
bool jump(size_t numBytes)
This function skips a number of bytes in the CDR stream buffer.
Cdr & serialize(const char *string_t)
This function serializes a string.
CdrType
This enumeration represents the two kinds of CDR serialization supported by eprosima::fastcdr::CDR.
Definition: Cdr.h:49
@ CORBA_CDR
Common CORBA CDR serialization.
Definition: Cdr.h:51
Cdr & serializeArray(const wchar_t *wchar, size_t numElements, Endianness endianness)
This function serializes an array of wide-chars with a different endianness.
Cdr & serializeArray(const std::string *string_t, size_t numElements, Endianness endianness)
This function serializes an array of strings with a different endianness.
Definition: Cdr.h:1846
char * getCurrentPosition()
This function returns the current position in the CDR stream.
Cdr & serialize(const char *string_t, Endianness endianness)
This function serializes a string with a different endianness.
Cdr & deserializeArray(std::string *string_t, size_t numElements, Endianness endianness)
This function deserializes an array of strings with a different endianness.
Definition: Cdr.h:3133
Endianness endianness() const
This function returns the current endianness used by the CDR type.
Definition: Cdr.h:194
Cdr & serializeArray(const long double *ldouble_t, size_t numElements)
This function serializes an array of long doubles.
Cdr & serializeArray(const _T *type_t, size_t numElements)
This function template serializes an array of non-basic objects.
Definition: Cdr.h:1926
Cdr & serializeArray(const char *char_t, size_t numElements)
This function serializes an array of characters.
Cdr & serializeArray(const uint8_t *octet_t, size_t numElements)
This function serializes an array of octets.
Definition: Cdr.h:1419
bool moveAlignmentForward(size_t numBytes)
This function moves the alignment forward.
Cdr & deserializeArray(int64_t *longlong_t, size_t numElements, Endianness endianness)
This function deserializes an array of long longs with a different endianness.
Cdr & deserialize(long double &ldouble_t)
This function deserializes a long double.
Cdr & serializeArray(const uint32_t *ulong_t, size_t numElements)
This function serializes an array of unsigned longs.
Definition: Cdr.h:1570
Cdr & serialize(const long double ldouble_t, Endianness endianness)
This function serializes a long double with a different endianness.
Cdr & serialize(const char char_t, Endianness endianness)
This function serializes a character with a different endianness.
Definition: Cdr.h:857
char * getBufferPointer()
This function returns the pointer to the current used buffer.
Cdr & deserializeArray(std::wstring *string_t, size_t numElements)
This function deserializes an array of wide-strings.
Definition: Cdr.h:3113
Cdr & deserializeSequence(_T *&sequence_t, size_t &numElements)
This function template deserializes a raw sequence.
Definition: Cdr.h:3302
Cdr & deserialize(uint64_t &ulonglong_t)
This function deserializes an unsigned long long.
Definition: Cdr.h:2246
state getState()
This function returns the current state of the CDR serialization process.
Cdr & deserialize(uint32_t &ulong_t, Endianness endianness)
This function deserializes an unsigned long with a different endianness.
Definition: Cdr.h:2178
void resetAlignment()
This function resets the alignment to the current position in the buffer.
Definition: Cdr.h:270
Cdr & deserializeArray(uint8_t *octet_t, size_t numElements, Endianness endianness)
This function deserializes an array of octets with a different endianness.
Definition: Cdr.h:2724
Cdr & deserialize(bool &bool_t)
This function deserializes a boolean.
This class represents a stream of bytes that contains (or will contain) serialized data.
Definition: FastBuffer.h:229
_FastBuffer_iterator iterator
Definition: FastBuffer.h:232
This abstract class is used to create exceptions.
Definition: Exception.h:30
virtual 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.
Definition: NotEnoughMemoryException.h:28
static const char *const NOT_ENOUGH_MEMORY_MESSAGE_DEFAULT
Default message used in the library.
Definition: NotEnoughMemoryException.h:82