Zserio C++ runtime library  1.3.0
Built for Zserio 2.18.0
ArrayTraits.h
Go to the documentation of this file.
1 #ifndef ZSERIO_ARRAY_TRAITS_H_INC
2 #define ZSERIO_ARRAY_TRAITS_H_INC
3 
4 #include <string>
5 #include <type_traits>
6 #include <vector>
7 
10 #include "zserio/BitStreamReader.h"
11 #include "zserio/BitStreamWriter.h"
12 #include "zserio/DeltaContext.h"
13 #include "zserio/Enums.h"
14 #include "zserio/SizeConvertUtil.h"
15 #include "zserio/Traits.h"
16 #include "zserio/Types.h"
17 
18 namespace zserio
19 {
20 
21 namespace detail
22 {
23 
24 template <typename T>
25 T read_bits(BitStreamReader& in, uint8_t numBits);
26 
27 template <>
28 inline int8_t read_bits<int8_t>(BitStreamReader& in, uint8_t numBits)
29 {
30  return static_cast<int8_t>(in.readSignedBits(numBits));
31 }
32 
33 template <>
34 inline int16_t read_bits<int16_t>(BitStreamReader& in, uint8_t numBits)
35 {
36  return static_cast<int16_t>(in.readSignedBits(numBits));
37 }
38 
39 template <>
40 inline int32_t read_bits<int32_t>(BitStreamReader& in, uint8_t numBits)
41 {
42  return in.readSignedBits(numBits);
43 }
44 
45 template <>
46 inline int64_t read_bits<int64_t>(BitStreamReader& in, uint8_t numBits)
47 {
48  return in.readSignedBits64(numBits);
49 }
50 
51 template <>
52 inline uint8_t read_bits<uint8_t>(BitStreamReader& in, uint8_t numBits)
53 {
54  return static_cast<uint8_t>(in.readBits(numBits));
55 }
56 
57 template <>
58 inline uint16_t read_bits<uint16_t>(BitStreamReader& in, uint8_t numBits)
59 {
60  return static_cast<uint16_t>(in.readBits(numBits));
61 }
62 
63 template <>
64 inline uint32_t read_bits<uint32_t>(BitStreamReader& in, uint8_t numBits)
65 {
66  return in.readBits(numBits);
67 }
68 
69 template <>
70 inline uint64_t read_bits<uint64_t>(BitStreamReader& in, uint8_t numBits)
71 {
72  return in.readBits64(numBits);
73 }
74 
75 template <typename T>
76 void write_bits(BitStreamWriter& out, T value, uint8_t numBits);
77 
78 template <>
79 inline void write_bits<int8_t>(BitStreamWriter& out, int8_t value, uint8_t numBits)
80 {
81  out.writeSignedBits(static_cast<int32_t>(value), numBits);
82 }
83 
84 template <>
85 inline void write_bits<int16_t>(BitStreamWriter& out, int16_t value, uint8_t numBits)
86 {
87  out.writeSignedBits(static_cast<int32_t>(value), numBits);
88 }
89 
90 template <>
91 inline void write_bits<int32_t>(BitStreamWriter& out, int32_t value, uint8_t numBits)
92 {
93  out.writeSignedBits(value, numBits);
94 }
95 
96 template <>
97 inline void write_bits<int64_t>(BitStreamWriter& out, int64_t value, uint8_t numBits)
98 {
99  out.writeSignedBits64(value, numBits);
100 }
101 
102 template <>
103 inline void write_bits<uint8_t>(BitStreamWriter& out, uint8_t value, uint8_t numBits)
104 {
105  out.writeBits(static_cast<uint32_t>(value), numBits);
106 }
107 
108 template <>
109 inline void write_bits<uint16_t>(BitStreamWriter& out, uint16_t value, uint8_t numBits)
110 {
111  out.writeBits(static_cast<uint32_t>(value), numBits);
112 }
113 
114 template <>
115 inline void write_bits<uint32_t>(BitStreamWriter& out, uint32_t value, uint8_t numBits)
116 {
117  out.writeBits(value, numBits);
118 }
119 
120 template <>
121 inline void write_bits<uint64_t>(BitStreamWriter& out, uint64_t value, uint8_t numBits)
122 {
123  out.writeBits64(value, numBits);
124 }
125 
126 } // namespace detail
127 
134 template <typename T, uint8_t NUM_BITS>
136 {
137 public:
139  using ElementType = T;
140 
146  static size_t bitSizeOf()
147  {
148  return NUM_BITS;
149  }
150 
156  static size_t bitSizeOf(ElementType)
157  {
158  return bitSizeOf();
159  }
160 
166  static size_t bitSizeOf(size_t, ElementType)
167  {
168  return bitSizeOf();
169  }
170 
178  static size_t initializeOffsets(size_t bitPosition, ElementType)
179  {
180  return bitPosition + NUM_BITS;
181  }
182 
190  static ElementType read(BitStreamReader& in, size_t = 0)
191  {
192  return detail::read_bits<T>(in, NUM_BITS);
193  }
194 
201  static void write(BitStreamWriter& out, ElementType element)
202  {
203  detail::write_bits(out, element, NUM_BITS);
204  }
205 
207  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
208 };
209 
216 template <typename T, typename ELEMENT_BIT_SIZE, typename = void>
218 {
219 public:
221  using ElementType = T;
222 
228  static size_t bitSizeOf()
229  {
230  return ELEMENT_BIT_SIZE::get();
231  }
232 
238  static size_t bitSizeOf(ElementType)
239  {
240  return bitSizeOf();
241  }
242 
248  static size_t bitSizeOf(size_t, ElementType)
249  {
250  return bitSizeOf();
251  }
252 
260  static size_t initializeOffsets(size_t bitPosition, ElementType)
261  {
262  return bitPosition + bitSizeOf();
263  }
264 
272  static ElementType read(BitStreamReader& in, size_t = 0)
273  {
274  return detail::read_bits<T>(in, ELEMENT_BIT_SIZE::get());
275  }
276 
283  static void write(BitStreamWriter& out, ElementType element)
284  {
285  detail::write_bits(out, element, ELEMENT_BIT_SIZE::get());
286  }
287 
289  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
290 };
291 
298 template <typename T, typename ELEMENT_BIT_SIZE>
299 class DynamicBitFieldArrayTraits<T, ELEMENT_BIT_SIZE,
300  typename std::enable_if<has_owner_type<ELEMENT_BIT_SIZE>::value>::type>
301 {
302 public:
304  using ElementType = T;
305 
307  using OwnerType = typename ELEMENT_BIT_SIZE::OwnerType;
308 
316  static size_t bitSizeOf(const OwnerType& owner)
317  {
318  return ELEMENT_BIT_SIZE::get(owner);
319  }
320 
328  static size_t bitSizeOf(const OwnerType& owner, ElementType)
329  {
330  return bitSizeOf(owner);
331  }
332 
340  static size_t bitSizeOf(const OwnerType& owner, size_t, ElementType)
341  {
342  return bitSizeOf(owner);
343  }
344 
353  static size_t initializeOffsets(const OwnerType& owner, size_t bitPosition, ElementType)
354  {
355  return bitPosition + bitSizeOf(owner);
356  }
357 
366  static ElementType read(const OwnerType& owner, BitStreamReader& in, size_t = 0)
367  {
368  return detail::read_bits<T>(in, ELEMENT_BIT_SIZE::get(owner));
369  }
370 
378  static void write(const OwnerType& owner, BitStreamWriter& out, ElementType element)
379  {
380  detail::write_bits(out, element, ELEMENT_BIT_SIZE::get(owner));
381  }
382 
384  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
385 };
386 
390 template <typename T>
392 {
394  using ElementType = T;
395 
401  static size_t bitSizeOf()
402  {
403  return NUM_BITS;
404  }
405 
411  static size_t bitSizeOf(ElementType)
412  {
413  return bitSizeOf();
414  }
415 
421  static size_t bitSizeOf(size_t, ElementType)
422  {
423  return bitSizeOf();
424  }
425 
433  static size_t initializeOffsets(size_t bitPosition, ElementType)
434  {
435  return bitPosition + NUM_BITS;
436  }
437 
445  static ElementType read(BitStreamReader& in, size_t = 0)
446  {
447  return detail::read_bits<T>(in, NUM_BITS);
448  }
449 
456  static void write(BitStreamWriter& out, ElementType element)
457  {
458  detail::write_bits(out, element, NUM_BITS);
459  }
460 
462  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
463 
464 private:
465  static constexpr uint8_t NUM_BITS = sizeof(T) * 8;
466 };
467 
471 template <typename T>
473 
477 template <>
478 struct VarIntNNArrayTraits<int16_t>
479 {
481  using ElementType = int16_t;
482 
490  static size_t bitSizeOf(ElementType element)
491  {
492  return zserio::bitSizeOfVarInt16(element);
493  }
494 
502  static size_t bitSizeOf(size_t, ElementType element)
503  {
504  return bitSizeOf(element);
505  }
506 
515  static size_t initializeOffsets(size_t bitPosition, ElementType element)
516  {
517  return bitPosition + bitSizeOf(bitPosition, element);
518  }
519 
527  static ElementType read(BitStreamReader& in, size_t = 0)
528  {
529  return in.readVarInt16();
530  }
531 
538  static void write(BitStreamWriter& out, ElementType element)
539  {
540  out.writeVarInt16(element);
541  }
542 
544  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
545 };
546 
550 template <>
551 struct VarIntNNArrayTraits<int32_t>
552 {
554  using ElementType = int32_t;
555 
563  static size_t bitSizeOf(ElementType element)
564  {
565  return zserio::bitSizeOfVarInt32(element);
566  }
567 
575  static size_t bitSizeOf(size_t, ElementType element)
576  {
577  return bitSizeOf(element);
578  }
579 
588  static size_t initializeOffsets(size_t bitPosition, ElementType element)
589  {
590  return bitPosition + bitSizeOf(bitPosition, element);
591  }
592 
600  static ElementType read(BitStreamReader& in, size_t = 0)
601  {
602  return in.readVarInt32();
603  }
604 
611  static void write(BitStreamWriter& out, ElementType element)
612  {
613  out.writeVarInt32(element);
614  }
615 
617  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
618 };
619 
623 template <>
624 struct VarIntNNArrayTraits<int64_t>
625 {
627  using ElementType = int64_t;
628 
636  static size_t bitSizeOf(ElementType element)
637  {
638  return zserio::bitSizeOfVarInt64(element);
639  }
640 
648  static size_t bitSizeOf(size_t, ElementType element)
649  {
650  return bitSizeOf(element);
651  }
652 
661  static size_t initializeOffsets(size_t bitPosition, ElementType element)
662  {
663  return bitPosition + bitSizeOf(bitPosition, element);
664  }
665 
673  static ElementType read(BitStreamReader& in, size_t = 0)
674  {
675  return in.readVarInt64();
676  }
677 
684  static void write(BitStreamWriter& out, ElementType element)
685  {
686  out.writeVarInt64(element);
687  }
688 
690  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
691 };
692 
696 template <>
697 struct VarIntNNArrayTraits<uint16_t>
698 {
700  using ElementType = uint16_t;
701 
709  static size_t bitSizeOf(ElementType element)
710  {
711  return zserio::bitSizeOfVarUInt16(element);
712  }
713 
721  static size_t bitSizeOf(size_t, ElementType element)
722  {
723  return bitSizeOf(element);
724  }
725 
734  static size_t initializeOffsets(size_t bitPosition, ElementType element)
735  {
736  return bitPosition + bitSizeOf(bitPosition, element);
737  }
738 
746  static ElementType read(BitStreamReader& in, size_t = 0)
747  {
748  return in.readVarUInt16();
749  }
750 
757  static void write(BitStreamWriter& out, ElementType element)
758  {
759  out.writeVarUInt16(element);
760  }
761 
763  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
764 };
765 
769 template <>
770 struct VarIntNNArrayTraits<uint32_t>
771 {
773  using ElementType = uint32_t;
774 
782  static size_t bitSizeOf(ElementType element)
783  {
784  return zserio::bitSizeOfVarUInt32(element);
785  }
786 
794  static size_t bitSizeOf(size_t, ElementType element)
795  {
796  return bitSizeOf(element);
797  }
798 
807  static size_t initializeOffsets(size_t bitPosition, ElementType element)
808  {
809  return bitPosition + bitSizeOf(bitPosition, element);
810  }
811 
819  static ElementType read(BitStreamReader& in, size_t = 0)
820  {
821  return in.readVarUInt32();
822  }
823 
830  static void write(BitStreamWriter& out, ElementType element)
831  {
832  out.writeVarUInt32(element);
833  }
834 
836  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
837 };
838 
842 template <>
843 struct VarIntNNArrayTraits<uint64_t>
844 {
846  using ElementType = uint64_t;
847 
855  static size_t bitSizeOf(ElementType element)
856  {
857  return zserio::bitSizeOfVarUInt64(element);
858  }
859 
867  static size_t bitSizeOf(size_t, ElementType element)
868  {
869  return bitSizeOf(element);
870  }
871 
880  static size_t initializeOffsets(size_t bitPosition, ElementType element)
881  {
882  return bitPosition + bitSizeOf(bitPosition, element);
883  }
884 
892  static ElementType read(BitStreamReader& in, size_t = 0)
893  {
894  return in.readVarUInt64();
895  }
896 
903  static void write(BitStreamWriter& out, ElementType element)
904  {
905  out.writeVarUInt64(element);
906  }
907 
909  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
910 };
911 
915 template <typename T>
917 
921 template <>
922 struct VarIntArrayTraits<int64_t>
923 {
925  using ElementType = int64_t;
926 
934  static size_t bitSizeOf(ElementType element)
935  {
936  return zserio::bitSizeOfVarInt(element);
937  }
938 
946  static size_t bitSizeOf(size_t, ElementType element)
947  {
948  return bitSizeOf(element);
949  }
950 
959  static size_t initializeOffsets(size_t bitPosition, ElementType element)
960  {
961  return bitPosition + bitSizeOf(bitPosition, element);
962  }
963 
971  static ElementType read(BitStreamReader& in, size_t = 0)
972  {
973  return in.readVarInt();
974  }
975 
982  static void write(BitStreamWriter& out, ElementType element)
983  {
984  out.writeVarInt(element);
985  }
986 
988  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
989 };
990 
994 template <>
995 struct VarIntArrayTraits<uint64_t>
996 {
998  using ElementType = uint64_t;
999 
1007  static size_t bitSizeOf(ElementType element)
1008  {
1009  return zserio::bitSizeOfVarUInt(element);
1010  }
1011 
1019  static size_t bitSizeOf(size_t, ElementType element)
1020  {
1021  return bitSizeOf(element);
1022  }
1023 
1032  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1033  {
1034  return bitPosition + bitSizeOf(bitPosition, element);
1035  }
1036 
1044  static ElementType read(BitStreamReader& in, size_t = 0)
1045  {
1046  return in.readVarUInt();
1047  }
1048 
1055  static void write(BitStreamWriter& out, ElementType element)
1056  {
1057  out.writeVarUInt(element);
1058  }
1059 
1061  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1062 };
1063 
1068 {
1070  using ElementType = uint32_t;
1071 
1079  static size_t bitSizeOf(ElementType element)
1080  {
1081  return zserio::bitSizeOfVarSize(element);
1082  }
1083 
1091  static size_t bitSizeOf(size_t, ElementType element)
1092  {
1093  return bitSizeOf(element);
1094  }
1095 
1104  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1105  {
1106  return bitPosition + bitSizeOf(bitPosition, element);
1107  }
1108 
1116  static ElementType read(BitStreamReader& in, size_t = 0)
1117  {
1118  return in.readVarSize();
1119  }
1120 
1127  static void write(BitStreamWriter& out, ElementType element)
1128  {
1129  out.writeVarSize(element);
1130  }
1131 
1133  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1134 };
1135 
1140 {
1142  using ElementType = float;
1143 
1149  static size_t bitSizeOf()
1150  {
1151  return 16;
1152  }
1153 
1159  static size_t bitSizeOf(size_t, ElementType)
1160  {
1161  return bitSizeOf();
1162  }
1163 
1172  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1173  {
1174  return bitPosition + bitSizeOf(bitPosition, element);
1175  }
1176 
1184  static ElementType read(BitStreamReader& in, size_t = 0)
1185  {
1186  return in.readFloat16();
1187  }
1188 
1195  static void write(BitStreamWriter& out, ElementType element)
1196  {
1197  out.writeFloat16(element);
1198  }
1199 
1201  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
1202 };
1203 
1208 {
1210  using ElementType = float;
1211 
1217  static size_t bitSizeOf()
1218  {
1219  return 32;
1220  }
1221 
1227  static size_t bitSizeOf(size_t, ElementType)
1228  {
1229  return bitSizeOf();
1230  }
1231 
1240  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1241  {
1242  return bitPosition + bitSizeOf(bitPosition, element);
1243  }
1244 
1252  static ElementType read(BitStreamReader& in, size_t = 0)
1253  {
1254  return in.readFloat32();
1255  }
1256 
1263  static void write(BitStreamWriter& out, ElementType element)
1264  {
1265  out.writeFloat32(element);
1266  }
1267 
1269  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
1270 };
1271 
1276 {
1278  using ElementType = double;
1279 
1285  static size_t bitSizeOf()
1286  {
1287  return 64;
1288  }
1289 
1295  static size_t bitSizeOf(size_t, ElementType)
1296  {
1297  return bitSizeOf();
1298  }
1299 
1308  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1309  {
1310  return bitPosition + bitSizeOf(bitPosition, element);
1311  }
1312 
1320  static ElementType read(BitStreamReader& in, size_t = 0)
1321  {
1322  return in.readFloat64();
1323  }
1324 
1331  static void write(BitStreamWriter& out, ElementType element)
1332  {
1333  out.writeFloat64(element);
1334  }
1335 
1337  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
1338 };
1339 
1344 {
1346  using ElementType = bool;
1347 
1353  static size_t bitSizeOf()
1354  {
1355  return 1;
1356  }
1357 
1363  static size_t bitSizeOf(size_t, ElementType)
1364  {
1365  return bitSizeOf();
1366  }
1367 
1376  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1377  {
1378  return bitPosition + bitSizeOf(bitPosition, element);
1379  }
1380 
1388  static ElementType read(BitStreamReader& in, size_t = 0)
1389  {
1390  return in.readBool();
1391  }
1392 
1399  static void write(BitStreamWriter& out, ElementType element)
1400  {
1401  out.writeBool(element);
1402  }
1403 
1405  static constexpr bool IS_BITSIZEOF_CONSTANT = true;
1406 };
1407 
1411 template <template <typename> class ALLOC = std::allocator>
1413 {
1416 
1418  using allocator_type = typename ElementType::allocator_type;
1419 
1427  static size_t bitSizeOf(size_t, const ElementType& element)
1428  {
1429  return zserio::bitSizeOfBytes(element);
1430  }
1431 
1440  static size_t initializeOffsets(size_t bitPosition, const ElementType& element)
1441  {
1442  return bitPosition + bitSizeOf(bitPosition, element);
1443  }
1444 
1451  template <typename RAW_ARRAY>
1452  static void read(RAW_ARRAY& rawArray, BitStreamReader& in, size_t = 0)
1453  {
1454  rawArray.emplace_back(in.readBytes(rawArray.get_allocator()));
1455  }
1456 
1463  static void write(BitStreamWriter& out, const ElementType& element)
1464  {
1465  out.writeBytes(element);
1466  }
1467 
1469  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1470 };
1471 
1473 
1477 template <template <typename> class ALLOC = std::allocator>
1479 {
1482 
1484  using allocator_type = typename ElementType::allocator_type;
1485 
1493  static size_t bitSizeOf(size_t, const ElementType& element)
1494  {
1495  return zserio::bitSizeOfString(element);
1496  }
1497 
1506  static size_t initializeOffsets(size_t bitPosition, const ElementType& element)
1507  {
1508  return bitPosition + bitSizeOf(bitPosition, element);
1509  }
1510 
1517  template <typename RAW_ARRAY>
1518  static void read(RAW_ARRAY& rawArray, BitStreamReader& in, size_t = 0)
1519  {
1520  rawArray.emplace_back(in.readString(rawArray.get_allocator()));
1521  }
1522 
1529  static void write(BitStreamWriter& out, const ElementType& element)
1530  {
1531  out.writeString(element);
1532  }
1533 
1535  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1536 };
1537 
1539 
1543 template <template <typename> class ALLOC = std::allocator>
1545 {
1548 
1551 
1559  static size_t bitSizeOf(size_t, const ElementType& element)
1560  {
1561  return zserio::bitSizeOfBitBuffer(element);
1562  }
1563 
1572  static size_t initializeOffsets(size_t bitPosition, const ElementType& element)
1573  {
1574  return bitPosition + bitSizeOf(bitPosition, element);
1575  }
1576 
1583  template <typename RAW_ARRAY>
1584  static void read(RAW_ARRAY& rawArray, BitStreamReader& in, size_t = 0)
1585  {
1586  rawArray.emplace_back(in.readBitBuffer(rawArray.get_allocator()));
1587  }
1588 
1595  static void write(BitStreamWriter& out, const ElementType& element)
1596  {
1597  out.writeBitBuffer(element);
1598  }
1599 
1601  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1602 };
1603 
1605 
1609 template <typename T>
1611 {
1613  using ElementType = T;
1614 
1622  static size_t bitSizeOf(size_t, ElementType element)
1623  {
1624  return zserio::bitSizeOf(element);
1625  }
1626 
1635  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1636  {
1637  return zserio::initializeOffsets(bitPosition, element);
1638  }
1639 
1647  static ElementType read(BitStreamReader& in, size_t = 0)
1648  {
1649  return zserio::read<ElementType>(in);
1650  }
1651 
1658  static void write(BitStreamWriter& out, ElementType element)
1659  {
1660  zserio::write(out, element);
1661  }
1662 
1663  // Be aware that T can be varuint, so bitSizeOf cannot return constant value.
1665  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1666 };
1667 
1671 template <typename T>
1673 {
1675  using ElementType = T;
1676 
1684  static size_t bitSizeOf(size_t, ElementType element)
1685  {
1686  return element.bitSizeOf();
1687  }
1688 
1697  static size_t initializeOffsets(size_t bitPosition, ElementType element)
1698  {
1699  return element.initializeOffsets(bitPosition);
1700  }
1701 
1709  static ElementType read(BitStreamReader& in, size_t = 0)
1710  {
1711  return ElementType(in);
1712  }
1713 
1720  static void write(BitStreamWriter& out, ElementType element)
1721  {
1722  element.write(out);
1723  }
1724 
1725  // Be aware that T can be varuint, so bitSizeOf cannot return constant value.
1727  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1728 };
1729 
1733 template <typename T, typename ELEMENT_FACTORY>
1735 {
1736 public:
1738  using ElementType = T;
1739 
1741  using allocator_type = typename ElementType::allocator_type;
1742 
1744  using OwnerType = typename ELEMENT_FACTORY::OwnerType;
1745 
1754  static size_t bitSizeOf(const OwnerType&, size_t bitPosition, const ElementType& element)
1755  {
1756  return element.bitSizeOf(bitPosition);
1757  }
1758 
1767  static size_t initializeOffsets(OwnerType&, size_t bitPosition, ElementType& element)
1768  {
1769  return element.initializeOffsets(bitPosition);
1770  }
1771 
1780  template <typename RAW_ARRAY>
1781  static void read(OwnerType& owner, RAW_ARRAY& rawArray, BitStreamReader& in, size_t index)
1782  {
1783  ELEMENT_FACTORY::create(owner, rawArray, in, index);
1784  }
1785 
1792  static void write(const OwnerType&, BitStreamWriter& out, const ElementType& element)
1793  {
1794  element.write(out);
1795  }
1796 
1798  static constexpr bool IS_BITSIZEOF_CONSTANT = false;
1799 };
1800 
1801 namespace detail
1802 {
1803 
1804 template <typename ARRAY_TRAITS>
1805 struct packed_array_traits_overloaded : std::false_type
1806 {};
1807 
1808 template <typename T, typename ELEMENT_FACTORY>
1809 struct packed_array_traits_overloaded<ObjectArrayTraits<T, ELEMENT_FACTORY>> : std::true_type
1810 {};
1811 
1812 } // namespace detail
1813 
1819 template <typename ARRAY_TRAITS, typename = void>
1821 {
1822 public:
1824  using ArrayTraits = ARRAY_TRAITS;
1825 
1827  using ElementType = typename ARRAY_TRAITS::ElementType;
1828 
1837  static void initContext(DeltaContext& deltaContext, ElementType element)
1838  {
1839  deltaContext.template init<ArrayTraits>(element);
1840  }
1841 
1852  static size_t bitSizeOf(DeltaContext& deltaContext, size_t, ElementType element)
1853  {
1854  return deltaContext.template bitSizeOf<ArrayTraits>(element);
1855  }
1856 
1868  static size_t initializeOffsets(DeltaContext& deltaContext, size_t bitPosition, ElementType element)
1869  {
1870  return bitPosition + bitSizeOf(deltaContext, bitPosition, element);
1871  }
1872 
1883  static ElementType read(DeltaContext& deltaContext, BitStreamReader& in, size_t = 0)
1884  {
1885  return deltaContext.template read<ArrayTraits>(in);
1886  }
1887 
1897  static void write(DeltaContext& deltaContext, BitStreamWriter& out, ElementType element)
1898  {
1899  deltaContext.template write<ArrayTraits>(out, element);
1900  }
1901 };
1902 
1908 template <typename ARRAY_TRAITS>
1909 class PackedArrayTraits<ARRAY_TRAITS, typename std::enable_if<has_owner_type<ARRAY_TRAITS>::value>::type>
1910 {
1911 public:
1913  using ArrayTraits = ARRAY_TRAITS;
1914 
1916  using ElementType = typename ARRAY_TRAITS::ElementType;
1917 
1919  using OwnerType = typename ARRAY_TRAITS::OwnerType;
1920 
1930  static void initContext(const OwnerType& owner, DeltaContext& deltaContext, ElementType element)
1931  {
1932  deltaContext.template init<ArrayTraits>(owner, element);
1933  }
1934 
1946  static size_t bitSizeOf(const OwnerType& owner, DeltaContext& deltaContext, size_t, ElementType element)
1947  {
1948  return deltaContext.template bitSizeOf<ArrayTraits>(owner, element);
1949  }
1950 
1963  static size_t initializeOffsets(
1964  const OwnerType& owner, DeltaContext& deltaContext, size_t bitPosition, ElementType element)
1965  {
1966  return bitPosition + bitSizeOf(owner, deltaContext, bitPosition, element);
1967  }
1968 
1980  static ElementType read(const OwnerType& owner, DeltaContext& deltaContext, BitStreamReader& in, size_t = 0)
1981  {
1982  return deltaContext.template read<ArrayTraits>(owner, in);
1983  }
1984 
1995  static void write(
1996  const OwnerType& owner, DeltaContext& deltaContext, BitStreamWriter& out, ElementType element)
1997  {
1998  deltaContext.template write<ArrayTraits>(owner, out, element);
1999  }
2000 };
2001 
2005 template <typename T>
2007 {
2008 public:
2011 
2013  using ElementType = T;
2014 
2021  static void initContext(DeltaContext& deltaContext, ElementType element)
2022  {
2023  zserio::initPackingContext(deltaContext, element);
2024  }
2025 
2034  static size_t bitSizeOf(DeltaContext& deltaContext, size_t, ElementType element)
2035  {
2036  return zserio::bitSizeOf(deltaContext, element);
2037  }
2038 
2048  static size_t initializeOffsets(DeltaContext& deltaContext, size_t bitPosition, ElementType element)
2049  {
2050  return zserio::initializeOffsets(deltaContext, bitPosition, element);
2051  }
2052 
2061  static ElementType read(DeltaContext& deltaContext, BitStreamReader& in, size_t = 0)
2062  {
2063  return zserio::read<ElementType>(deltaContext, in);
2064  }
2065 
2073  static void write(DeltaContext& deltaContext, BitStreamWriter& out, ElementType element)
2074  {
2075  zserio::write(deltaContext, out, element);
2076  }
2077 };
2078 
2082 template <typename T>
2084 {
2085 public:
2088 
2090  using ElementType = T;
2091 
2097  static void initContext(DeltaContext& deltaContext, const ElementType& element)
2098  {
2099  element.initPackingContext(deltaContext);
2100  }
2101 
2111  static size_t bitSizeOf(DeltaContext& deltaContext, size_t bitPosition, const ElementType& element)
2112  {
2113  return element.bitSizeOf(deltaContext, bitPosition);
2114  }
2115 
2125  static size_t initializeOffsets(DeltaContext& deltaContext, size_t bitPosition, const ElementType& element)
2126  {
2127  return element.initializeOffsets(deltaContext, bitPosition);
2128  }
2129 
2138  static ElementType read(DeltaContext& deltaContext, BitStreamReader& in, size_t = 0)
2139  {
2140  return ElementType(deltaContext, in);
2141  }
2142 
2150  static void write(DeltaContext& deltaContext, BitStreamWriter& out, const ElementType& element)
2151  {
2152  element.write(deltaContext, out);
2153  }
2154 };
2155 
2156 // note: enable_if is needed to be more specific then specialization for types which needs owner type
2160 template <typename T, typename ELEMENT_FACTORY>
2161 class PackedArrayTraits<ObjectArrayTraits<T, ELEMENT_FACTORY>,
2162  typename std::enable_if<has_owner_type<ObjectArrayTraits<T, ELEMENT_FACTORY>>::value>::type>
2163 {
2164 public:
2167 
2169  using ElementType = T;
2170 
2172  using allocator_type = typename T::allocator_type;
2173 
2176 
2182  template <typename PACKING_CONTEXT>
2183  static void initContext(
2184  const typename ArrayTraits::OwnerType&, PACKING_CONTEXT& packingContext, const ElementType& element)
2185  {
2186  element.initPackingContext(packingContext);
2187  }
2188 
2198  template <typename PACKING_CONTEXT>
2199  static size_t bitSizeOf(const typename ArrayTraits::OwnerType&, PACKING_CONTEXT& packingContext,
2200  size_t bitPosition, const ElementType& element)
2201  {
2202  return element.bitSizeOf(packingContext, bitPosition);
2203  }
2204 
2214  template <typename PACKING_CONTEXT>
2215  static size_t initializeOffsets(const typename ArrayTraits::OwnerType&, PACKING_CONTEXT& packingContext,
2216  size_t bitPosition, ElementType& element)
2217  {
2218  return element.initializeOffsets(packingContext, bitPosition);
2219  }
2220 
2231  template <typename RAW_ARRAY, typename PACKING_CONTEXT>
2232  static void read(typename ArrayTraits::OwnerType& owner, RAW_ARRAY& rawArray,
2233  PACKING_CONTEXT& packingContext, BitStreamReader& in, size_t index)
2234  {
2235  ELEMENT_FACTORY::create(owner, rawArray, packingContext, in, index);
2236  }
2237 
2245  template <typename PACKING_CONTEXT>
2246  static void write(const typename ArrayTraits::OwnerType&, PACKING_CONTEXT& packingContext,
2247  BitStreamWriter& out, const ElementType& element)
2248  {
2249  element.write(packingContext, out);
2250  }
2251 };
2252 
2253 } // namespace zserio
2254 
2255 #endif // ZSERIO_ARRAY_TRAITS_H_INC
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:201
static size_t bitSizeOf()
Definition: ArrayTraits.h:146
static size_t bitSizeOf(ElementType)
Definition: ArrayTraits.h:156
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:207
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:190
static size_t initializeOffsets(size_t bitPosition, ElementType)
Definition: ArrayTraits.h:178
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:166
BasicBitBuffer< RebindAlloc< ALLOC, uint8_t > > readBitBuffer(const ALLOC &allocator=ALLOC())
string< ALLOC > readString(const ALLOC &alloc=ALLOC())
vector< uint8_t, ALLOC > readBytes(const ALLOC &alloc=ALLOC())
void writeFloat64(double data)
void writeVarInt64(int64_t data)
void writeVarInt16(int16_t data)
void writeString(StringView data)
void writeFloat32(float data)
void writeVarUInt64(uint64_t data)
void writeVarUInt16(uint16_t data)
void writeVarInt32(int32_t data)
void writeVarSize(uint32_t data)
void writeVarUInt32(uint32_t data)
void writeVarUInt(uint64_t data)
void writeVarInt(int64_t data)
void writeFloat16(float data)
void writeBytes(Span< const uint8_t > data)
void writeBitBuffer(const BasicBitBuffer< ALLOC > &bitBuffer)
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:283
static size_t initializeOffsets(size_t bitPosition, ElementType)
Definition: ArrayTraits.h:260
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:248
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:272
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:289
static size_t bitSizeOf(ElementType)
Definition: ArrayTraits.h:238
typename ELEMENT_FACTORY::OwnerType OwnerType
Definition: ArrayTraits.h:1744
static size_t bitSizeOf(const OwnerType &, size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:1754
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1798
static void write(const OwnerType &, BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:1792
static void read(OwnerType &owner, RAW_ARRAY &rawArray, BitStreamReader &in, size_t index)
Definition: ArrayTraits.h:1781
typename ElementType::allocator_type allocator_type
Definition: ArrayTraits.h:1741
static size_t initializeOffsets(OwnerType &, size_t bitPosition, ElementType &element)
Definition: ArrayTraits.h:1767
static void write(const OwnerType &owner, DeltaContext &deltaContext, BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1995
static size_t initializeOffsets(const OwnerType &owner, DeltaContext &deltaContext, size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1963
static void initContext(const OwnerType &owner, DeltaContext &deltaContext, ElementType element)
Definition: ArrayTraits.h:1930
static ElementType read(const OwnerType &owner, DeltaContext &deltaContext, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1980
static size_t bitSizeOf(const OwnerType &owner, DeltaContext &deltaContext, size_t, ElementType element)
Definition: ArrayTraits.h:1946
static void initContext(DeltaContext &deltaContext, const ElementType &element)
Definition: ArrayTraits.h:2097
static size_t initializeOffsets(DeltaContext &deltaContext, size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:2125
static ElementType read(DeltaContext &deltaContext, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:2138
static size_t bitSizeOf(DeltaContext &deltaContext, size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:2111
static void write(DeltaContext &deltaContext, BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:2150
static void write(DeltaContext &deltaContext, BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:2073
static void initContext(DeltaContext &deltaContext, ElementType element)
Definition: ArrayTraits.h:2021
static ElementType read(DeltaContext &deltaContext, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:2061
static size_t bitSizeOf(DeltaContext &deltaContext, size_t, ElementType element)
Definition: ArrayTraits.h:2034
static size_t initializeOffsets(DeltaContext &deltaContext, size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:2048
static size_t bitSizeOf(const typename ArrayTraits::OwnerType &, PACKING_CONTEXT &packingContext, size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:2199
static size_t initializeOffsets(const typename ArrayTraits::OwnerType &, PACKING_CONTEXT &packingContext, size_t bitPosition, ElementType &element)
Definition: ArrayTraits.h:2215
static void write(const typename ArrayTraits::OwnerType &, PACKING_CONTEXT &packingContext, BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:2246
static void read(typename ArrayTraits::OwnerType &owner, RAW_ARRAY &rawArray, PACKING_CONTEXT &packingContext, BitStreamReader &in, size_t index)
Definition: ArrayTraits.h:2232
static void initContext(const typename ArrayTraits::OwnerType &, PACKING_CONTEXT &packingContext, const ElementType &element)
Definition: ArrayTraits.h:2183
static ElementType read(DeltaContext &deltaContext, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1883
static void initContext(DeltaContext &deltaContext, ElementType element)
Definition: ArrayTraits.h:1837
typename ARRAY_TRAITS::ElementType ElementType
Definition: ArrayTraits.h:1827
static size_t bitSizeOf(DeltaContext &deltaContext, size_t, ElementType element)
Definition: ArrayTraits.h:1852
static void write(DeltaContext &deltaContext, BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1897
static size_t initializeOffsets(DeltaContext &deltaContext, size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1868
uint8_t numBits(uint64_t numValues)
size_t bitSizeOfString(StringView stringValue)
size_t bitSizeOfVarInt32(int32_t value)
void write(BitStreamWriter &out, T value)
size_t bitSizeOfVarUInt32(uint32_t value)
size_t bitSizeOfVarInt64(int64_t value)
std::basic_string< char, std::char_traits< char >, RebindAlloc< ALLOC, char > > string
Definition: String.h:17
std::vector< T, RebindAlloc< ALLOC, T > > vector
Definition: Vector.h:17
size_t initializeOffsets(size_t bitPosition, T value)
size_t bitSizeOfVarSize(uint32_t value)
size_t bitSizeOfVarUInt64(uint64_t value)
size_t bitSizeOfVarInt16(int16_t value)
void initPackingContext(PACKING_CONTEXT &context, T value)
size_t bitSizeOfBitBuffer(const BasicBitBuffer< ALLOC > &bitBuffer)
size_t bitSizeOfVarUInt(uint64_t value)
size_t bitSizeOfVarInt(int64_t value)
size_t bitSizeOfBytes(Span< const uint8_t > bytesValue)
size_t bitSizeOf(T value)
size_t bitSizeOfVarUInt16(uint16_t value)
static size_t initializeOffsets(size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:1572
typename ElementType::allocator_type allocator_type
Definition: ArrayTraits.h:1550
static void write(BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:1595
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1601
static size_t bitSizeOf(size_t, const ElementType &element)
Definition: ArrayTraits.h:1559
static void read(RAW_ARRAY &rawArray, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1584
static void write(BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:1463
zserio::vector< uint8_t, ALLOC< uint8_t > > ElementType
Definition: ArrayTraits.h:1415
static size_t bitSizeOf(size_t, const ElementType &element)
Definition: ArrayTraits.h:1427
static void read(RAW_ARRAY &rawArray, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1452
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1469
typename ElementType::allocator_type allocator_type
Definition: ArrayTraits.h:1418
static size_t initializeOffsets(size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:1440
typename ElementType::allocator_type allocator_type
Definition: ArrayTraits.h:1484
static size_t initializeOffsets(size_t bitPosition, const ElementType &element)
Definition: ArrayTraits.h:1506
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1535
static void write(BitStreamWriter &out, const ElementType &element)
Definition: ArrayTraits.h:1529
zserio::string< ALLOC< char > > ElementType
Definition: ArrayTraits.h:1481
static size_t bitSizeOf(size_t, const ElementType &element)
Definition: ArrayTraits.h:1493
static void read(RAW_ARRAY &rawArray, BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1518
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1697
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1727
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:1684
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1720
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1709
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1376
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1399
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:1363
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1388
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1405
static size_t bitSizeOf()
Definition: ArrayTraits.h:1353
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1635
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1647
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1658
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:1622
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1665
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1172
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1184
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1195
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:1159
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1201
static size_t bitSizeOf()
Definition: ArrayTraits.h:1149
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1252
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1263
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1269
static size_t bitSizeOf()
Definition: ArrayTraits.h:1217
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:1227
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1240
static size_t bitSizeOf()
Definition: ArrayTraits.h:1285
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1331
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1320
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1337
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1308
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:1295
static size_t bitSizeOf(size_t, ElementType)
Definition: ArrayTraits.h:421
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:462
static size_t bitSizeOf()
Definition: ArrayTraits.h:401
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:445
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:456
static size_t initializeOffsets(size_t bitPosition, ElementType)
Definition: ArrayTraits.h:433
static size_t bitSizeOf(ElementType)
Definition: ArrayTraits.h:411
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:971
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:982
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:934
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:959
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:946
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1055
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1044
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:1019
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:1007
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1032
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:538
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:490
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:515
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:527
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:502
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:600
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:575
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:563
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:611
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:588
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:636
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:673
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:648
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:684
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:661
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:734
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:709
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:746
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:757
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:721
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:782
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:807
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:819
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:830
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:794
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:867
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:892
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:880
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:855
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:903
static ElementType read(BitStreamReader &in, size_t=0)
Definition: ArrayTraits.h:1116
static constexpr bool IS_BITSIZEOF_CONSTANT
Definition: ArrayTraits.h:1133
static void write(BitStreamWriter &out, ElementType element)
Definition: ArrayTraits.h:1127
static size_t bitSizeOf(ElementType element)
Definition: ArrayTraits.h:1079
static size_t bitSizeOf(size_t, ElementType element)
Definition: ArrayTraits.h:1091
static size_t initializeOffsets(size_t bitPosition, ElementType element)
Definition: ArrayTraits.h:1104