F´ Flight Software - C/C++ Documentation  NASA-v1.6.0
A framework for building embedded system applications to NASA flight quality standards.
Serializable.cpp
Go to the documentation of this file.
2 #include <cstring> // memcpy
3 #include <Fw/Types/Assert.hpp>
5 #include <cstdio>
6 
7 #ifdef BUILD_UT
8 #include <iomanip>
9 #include <Fw/Types/String.hpp>
10 #endif
11 
12 // Some macros/functions to optimize for architectures
13 
14 namespace Fw {
15 
17  }
18 
20  }
21 
22 #if FW_SERIALIZABLE_TO_STRING || BUILD_UT
23 
24  void Serializable::toString(StringBase& text) const {
25  text = "NOSPEC"; // set to not specified.
26  }
27 
28 #endif
29 
30 #ifdef BUILD_UT
31  std::ostream& operator<<(std::ostream& os, const Serializable& val) {
32  Fw::String out;
33  val.toString(out);
34 
35  os << out;
36 
37  return os;
38  }
39 #endif
40 
42  m_serLoc(0), m_deserLoc(0) {
43  }
44 
46  }
47 
48  void SerializeBufferBase::copyFrom(const SerializeBufferBase& src) {
49  this->m_serLoc = src.m_serLoc;
50  this->m_deserLoc = src.m_deserLoc;
51  FW_ASSERT(src.getBuffAddr());
52  FW_ASSERT(this->getBuffAddr());
53  // destination has to be same or bigger
54  FW_ASSERT(src.getBuffLength() <= this->getBuffCapacity(),src.getBuffLength(),this->getBuffLength());
55  (void) memcpy(this->getBuffAddr(),src.getBuffAddr(),this->m_serLoc);
56  }
57 
58  // Copy constructor doesn't make sense in this virtual class as there is nothing to copy. Derived classes should
59  // call the empty constructor and then call their own copy function
61  this->copyFrom(src);
62  return *this;
63  }
64 
65  // serialization routines
66 
68  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
70  }
71  FW_ASSERT(this->getBuffAddr());
72  this->getBuffAddr()[this->m_serLoc] = val;
73  this->m_serLoc += sizeof(val);
74  this->m_deserLoc = 0;
75 
76  return FW_SERIALIZE_OK;
77  }
78 
80  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
82  }
83  FW_ASSERT(this->getBuffAddr());
84  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val);
85  this->m_serLoc += sizeof(val);
86  this->m_deserLoc = 0;
87  return FW_SERIALIZE_OK;
88  }
89 
90 #if FW_HAS_16_BIT==1
92  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
94  }
95  FW_ASSERT(this->getBuffAddr());
96  // MSB first
97  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 8);
98  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val);
99  this->m_serLoc += sizeof(val);
100  this->m_deserLoc = 0;
101  return FW_SERIALIZE_OK;
102  }
103 
105  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
107  }
108  FW_ASSERT(this->getBuffAddr());
109  // MSB first
110  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 8);
111  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val);
112  this->m_serLoc += sizeof(val);
113  this->m_deserLoc = 0;
114  return FW_SERIALIZE_OK;
115  }
116 #endif
117 #if FW_HAS_32_BIT==1
119  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
121  }
122  FW_ASSERT(this->getBuffAddr());
123  // MSB first
124  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 24);
125  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val >> 16);
126  this->getBuffAddr()[this->m_serLoc + 2] = static_cast<U8>(val >> 8);
127  this->getBuffAddr()[this->m_serLoc + 3] = static_cast<U8>(val);
128  this->m_serLoc += sizeof(val);
129  this->m_deserLoc = 0;
130  return FW_SERIALIZE_OK;
131  }
132 
134  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
136  }
137  FW_ASSERT(this->getBuffAddr());
138  // MSB first
139  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 24);
140  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val >> 16);
141  this->getBuffAddr()[this->m_serLoc + 2] = static_cast<U8>(val >> 8);
142  this->getBuffAddr()[this->m_serLoc + 3] = static_cast<U8>(val);
143  this->m_serLoc += sizeof(val);
144  this->m_deserLoc = 0;
145  return FW_SERIALIZE_OK;
146  }
147 #endif
148 
149 #if FW_HAS_64_BIT==1
151  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
153  }
154  FW_ASSERT(this->getBuffAddr());
155  // MSB first
156  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 56);
157  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val >> 48);
158  this->getBuffAddr()[this->m_serLoc + 2] = static_cast<U8>(val >> 40);
159  this->getBuffAddr()[this->m_serLoc + 3] = static_cast<U8>(val >> 32);
160  this->getBuffAddr()[this->m_serLoc + 4] = static_cast<U8>(val >> 24);
161  this->getBuffAddr()[this->m_serLoc + 5] = static_cast<U8>(val >> 16);
162  this->getBuffAddr()[this->m_serLoc + 6] = static_cast<U8>(val >> 8);
163  this->getBuffAddr()[this->m_serLoc + 7] = static_cast<U8>(val);
164  this->m_serLoc += sizeof(val);
165  this->m_deserLoc = 0;
166  return FW_SERIALIZE_OK;
167  }
168 
170  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(val)) - 1 >= this->getBuffCapacity()) {
172  }
173  FW_ASSERT(this->getBuffAddr());
174  // MSB first
175  this->getBuffAddr()[this->m_serLoc + 0] = static_cast<U8>(val >> 56);
176  this->getBuffAddr()[this->m_serLoc + 1] = static_cast<U8>(val >> 48);
177  this->getBuffAddr()[this->m_serLoc + 2] = static_cast<U8>(val >> 40);
178  this->getBuffAddr()[this->m_serLoc + 3] = static_cast<U8>(val >> 32);
179  this->getBuffAddr()[this->m_serLoc + 4] = static_cast<U8>(val >> 24);
180  this->getBuffAddr()[this->m_serLoc + 5] = static_cast<U8>(val >> 16);
181  this->getBuffAddr()[this->m_serLoc + 6] = static_cast<U8>(val >> 8);
182  this->getBuffAddr()[this->m_serLoc + 7] = static_cast<U8>(val);
183  this->m_serLoc += sizeof(val);
184  this->m_deserLoc = 0;
185  return FW_SERIALIZE_OK;
186  }
187 #endif
188 
189 #if FW_HAS_F64
190 
192  // floating point values need to be byte-swapped as well, so copy to U64 and use that routine
193  U64 u64Val;
194  (void) memcpy(&u64Val, &val, sizeof(val));
195  return this->serialize(u64Val);
196 
197  }
198 
199 #endif
200 
202 
203  // floating point values need to be byte-swapped as well, so copy to U32 and use that routine
204  U32 u32Val;
205  (void) memcpy(&u32Val, &val, sizeof(val));
206  return this->serialize(u32Val);
207 
208  }
209 
211  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(U8)) - 1 >= this->getBuffCapacity()) {
213  }
214 
215  FW_ASSERT(this->getBuffAddr());
216  if (val) {
217  this->getBuffAddr()[this->m_serLoc + 0] = FW_SERIALIZE_TRUE_VALUE;
218  } else {
219  this->getBuffAddr()[this->m_serLoc + 0] = FW_SERIALIZE_FALSE_VALUE;
220  }
221 
222  this->m_serLoc += sizeof(U8);
223  this->m_deserLoc = 0;
224  return FW_SERIALIZE_OK;
225  }
226 
228  if (this->m_serLoc + static_cast<NATIVE_UINT_TYPE>(sizeof(void*)) - 1
229  >= this->getBuffCapacity()) {
231  }
232 
233  return this->serialize(reinterpret_cast<POINTER_CAST>(val));
234 
235  }
236 
238  // First serialize length
239  SerializeStatus stat;
240  if (not noLength) {
241  stat = this->serialize(static_cast<FwBuffSizeType>(length));
242  if (stat != FW_SERIALIZE_OK) {
243  return stat;
244  }
245  }
246 
247  // make sure we have enough space
248  if (this->m_serLoc + length > this->getBuffCapacity()) {
250  }
251 
252  // copy buffer to our buffer
253  (void) memcpy(&this->getBuffAddr()[this->m_serLoc], buff, length);
254  this->m_serLoc += length;
255  this->m_deserLoc = 0;
256 
257  return FW_SERIALIZE_OK;
258  }
259 
261  return val.serialize(*this);
262  }
263 
265  const SerializeBufferBase& val) {
266  NATIVE_UINT_TYPE size = val.getBuffLength();
267  if (this->m_serLoc + size + static_cast<NATIVE_UINT_TYPE>(sizeof(FwBuffSizeType))
268  > this->getBuffCapacity()) {
270  }
271 
272  // First, serialize size
273  SerializeStatus stat = this->serialize(static_cast<FwBuffSizeType>(size));
274  if (stat != FW_SERIALIZE_OK) {
275  return stat;
276  }
277 
278  FW_ASSERT(this->getBuffAddr());
279  FW_ASSERT(val.getBuffAddr());
280  // serialize buffer
281  (void) memcpy(&this->getBuffAddr()[this->m_serLoc], val.getBuffAddr(), size);
282  this->m_serLoc += size;
283  this->m_deserLoc = 0;
284 
285  return FW_SERIALIZE_OK;
286  }
287 
288  // deserialization routines
289 
291  // check for room
292  if (this->getBuffLength() == this->m_deserLoc) {
294  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
296  }
297  // read from current location
298  FW_ASSERT(this->getBuffAddr());
299  val = this->getBuffAddr()[this->m_deserLoc + 0];
300  this->m_deserLoc += sizeof(val);
301  return FW_SERIALIZE_OK;
302  }
303 
305  // check for room
306  if (this->getBuffLength() == this->m_deserLoc) {
308  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
310  }
311  // read from current location
312  FW_ASSERT(this->getBuffAddr());
313  val = static_cast<I8>(this->getBuffAddr()[this->m_deserLoc + 0]);
314  this->m_deserLoc += sizeof(val);
315  return FW_SERIALIZE_OK;
316  }
317 
318 #if FW_HAS_16_BIT==1
320  // check for room
321  if (this->getBuffLength() == this->m_deserLoc) {
323  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
325  }
326  // read from current location
327  FW_ASSERT(this->getBuffAddr());
328  // MSB first
329  val = static_cast<U16>(
330  ((this->getBuffAddr()[this->m_deserLoc + 1]) << 0) |
331  ((this->getBuffAddr()[this->m_deserLoc + 0]) << 8)
332  );
333  this->m_deserLoc += sizeof(val);
334  return FW_SERIALIZE_OK;
335  }
336 
338  // check for room
339  if (this->getBuffLength() == this->m_deserLoc) {
341  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
343  }
344  // read from current location
345  FW_ASSERT(this->getBuffAddr());
346  // MSB first
347  val = static_cast<I16>(
348  ((this->getBuffAddr()[this->m_deserLoc + 1]) << 0) |
349  ((this->getBuffAddr()[this->m_deserLoc + 0]) << 8)
350  );
351  this->m_deserLoc += sizeof(val);
352  return FW_SERIALIZE_OK;
353  }
354 #endif
355 #if FW_HAS_32_BIT==1
357  // check for room
358  if (this->getBuffLength() == this->m_deserLoc) {
360  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
362  }
363  // read from current location
364  FW_ASSERT(this->getBuffAddr());
365  // MSB first
366  val = (static_cast<U32>(this->getBuffAddr()[this->m_deserLoc + 3]) << 0)
367  | (static_cast<U32>(this->getBuffAddr()[this->m_deserLoc + 2]) << 8)
368  | (static_cast<U32>(this->getBuffAddr()[this->m_deserLoc + 1]) << 16)
369  | (static_cast<U32>(this->getBuffAddr()[this->m_deserLoc + 0]) << 24);
370  this->m_deserLoc += sizeof(val);
371  return FW_SERIALIZE_OK;
372  }
373 
375  // check for room
376  if (this->getBuffLength() == this->m_deserLoc) {
378  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
380  }
381  // read from current location
382  FW_ASSERT(this->getBuffAddr());
383  // MSB first
384  val = (static_cast<I32>(this->getBuffAddr()[this->m_deserLoc + 3]) << 0)
385  | (static_cast<I32>(this->getBuffAddr()[this->m_deserLoc + 2]) << 8)
386  | (static_cast<I32>(this->getBuffAddr()[this->m_deserLoc + 1]) << 16)
387  | (static_cast<I32>(this->getBuffAddr()[this->m_deserLoc + 0]) << 24);
388  this->m_deserLoc += sizeof(val);
389  return FW_SERIALIZE_OK;
390  }
391 #endif
392 
393 #if FW_HAS_64_BIT==1
394 
396  // check for room
397  if (this->getBuffLength() == this->m_deserLoc) {
399  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
401  }
402  // read from current location
403  FW_ASSERT(this->getBuffAddr());
404  // MSB first
405  val = (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 7]) << 0)
406  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 6]) << 8)
407  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 5]) << 16)
408  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 4]) << 24)
409  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 3]) << 32)
410  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 2]) << 40)
411  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 1]) << 48)
412  | (static_cast<U64>(this->getBuffAddr()[this->m_deserLoc + 0]) << 56);
413 
414  this->m_deserLoc += sizeof(val);
415  return FW_SERIALIZE_OK;
416  }
417 
419  // check for room
420  if (this->getBuffLength() == this->m_deserLoc) {
422  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(val))) {
424  }
425  // read from current location
426  FW_ASSERT(this->getBuffAddr());
427  // MSB first
428  val = (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 7]) << 0)
429  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 6]) << 8)
430  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 5]) << 16)
431  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 4]) << 24)
432  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 3]) << 32)
433  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 2]) << 40)
434  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 1]) << 48)
435  | (static_cast<I64>(this->getBuffAddr()[this->m_deserLoc + 0]) << 56);
436  this->m_deserLoc += sizeof(val);
437  return FW_SERIALIZE_OK;
438  }
439 #endif
440 
441 #if FW_HAS_F64
442 
444 
445  // deserialize as 64-bit int to handle endianness
446  U64 tempVal;
447  SerializeStatus stat = this->deserialize(tempVal);
448  if (stat != FW_SERIALIZE_OK) {
449  return stat;
450  }
451  // copy to argument
452  (void) memcpy(&val, &tempVal, sizeof(val));
453 
454  return FW_SERIALIZE_OK;
455  }
456 
457 #endif
458 
460  // check for room
461  if (this->getBuffLength() == this->m_deserLoc) {
463  } else if (this->getBuffLength() - this->m_deserLoc < static_cast<NATIVE_UINT_TYPE>(sizeof(U8))) {
465  }
466  // read from current location
467  FW_ASSERT(this->getBuffAddr());
468  if (FW_SERIALIZE_TRUE_VALUE == this->getBuffAddr()[this->m_deserLoc + 0]) {
469  val = true;
470  } else if (FW_SERIALIZE_FALSE_VALUE == this->getBuffAddr()[this->m_deserLoc + 0]) {
471  val = false;
472  } else {
474  }
475 
476  this->m_deserLoc += sizeof(U8);
477  return FW_SERIALIZE_OK;
478  }
479 
481  return this->deserialize(reinterpret_cast<POINTER_CAST&>(val));
482  }
483 
485  // deserialize as 64-bit int to handle endianness
486  U32 tempVal;
487  SerializeStatus stat = this->deserialize(tempVal);
488  if (stat != FW_SERIALIZE_OK) {
489  return stat;
490  }
491  (void) memcpy(&val, &tempVal, sizeof(val));
492 
493  return FW_SERIALIZE_OK;
494  }
495 
497 
498  FW_ASSERT(this->getBuffAddr());
499 
500  if (not noLength) {
501  FwBuffSizeType storedLength;
502 
503  SerializeStatus stat = this->deserialize(storedLength);
504 
505  if (stat != FW_SERIALIZE_OK) {
506  return stat;
507  }
508 
509  // make sure it fits
510  if ((storedLength > this->getBuffLeft()) or (storedLength > length)) {
512  }
513 
514  (void) memcpy(buff, &this->getBuffAddr()[this->m_deserLoc], storedLength);
515 
516  length = static_cast<NATIVE_UINT_TYPE>(storedLength);
517 
518  } else {
519  // make sure enough is left
520  if (length > this->getBuffLeft()) {
522  }
523 
524  (void) memcpy(buff, &this->getBuffAddr()[this->m_deserLoc], length);
525  }
526 
527  this->m_deserLoc += length;
528  return FW_SERIALIZE_OK;
529  }
530 
532  return val.deserialize(*this);
533  }
534 
536 
537  FW_ASSERT(val.getBuffAddr());
539 
540  FwBuffSizeType storedLength;
541 
542  stat = this->deserialize(storedLength);
543 
544  if (stat != FW_SERIALIZE_OK) {
545  return stat;
546  }
547 
548  // make sure destination has enough room
549 
550  if ((storedLength > val.getBuffCapacity()) or (storedLength > this->getBuffLeft()) ) {
552  }
553 
554  FW_ASSERT(this->getBuffAddr());
555  (void) memcpy(val.getBuffAddr(), &this->getBuffAddr()[this->m_deserLoc],
556  storedLength);
557 
558  stat = val.setBuffLen(storedLength);
559 
560  if (stat != FW_SERIALIZE_OK) {
561  return stat;
562  }
563 
564  this->m_deserLoc += storedLength;
565 
566  return FW_SERIALIZE_OK;
567  }
568 
570  this->m_deserLoc = 0;
571  this->m_serLoc = 0;
572  }
573 
575  this->m_deserLoc = 0;
576  }
577 
579  {
580  // check for room
581  if (this->getBuffLength() == this->m_deserLoc) {
583  } else if (this->getBuffLength() - this->m_deserLoc < numBytesToSkip) {
585  }
586  // update location in buffer to skip the value
587  this->m_deserLoc += numBytesToSkip;
588  return FW_SERIALIZE_OK;
589  }
590 
592  return this->m_serLoc;
593  }
594 
596  if (this->getBuffCapacity() < length) {
598  } else {
599  FW_ASSERT(src);
600  FW_ASSERT(this->getBuffAddr());
601  memcpy(this->getBuffAddr(), src, length);
602  this->m_serLoc = length;
603  this->m_deserLoc = 0;
604  return FW_SERIALIZE_OK;
605  }
606  }
607 
609  if (this->getBuffCapacity() < length) {
611  } else {
612  this->m_serLoc = length;
613  this->m_deserLoc = 0;
614  return FW_SERIALIZE_OK;
615  }
616  }
617 
619  return this->m_serLoc - this->m_deserLoc;
620  }
621 
623  // make sure there is sufficient size in destination
624  if (dest.getBuffCapacity() < size) {
626  }
627  // otherwise, set destination buffer to data from deserialization pointer plus size
628  SerializeStatus stat = dest.setBuff(&this->getBuffAddr()[this->m_deserLoc],size);
629  if (stat == FW_SERIALIZE_OK) {
630  this->m_deserLoc += size;
631  }
632  return stat;
633 
634  }
635 
637  // make sure there is sufficient size in destination
638  if (dest.getBuffCapacity() < size + dest.getBuffLength()) {
640  }
641  // make sure there is sufficient buffer in source
642  if (this->getBuffLeft() < size) {
644  }
645 
646  // otherwise, serialize bytes to destination without writing length
647  SerializeStatus stat = dest.serialize(&this->getBuffAddr()[this->m_deserLoc], size, true);
648  if (stat == FW_SERIALIZE_OK) {
649  this->m_deserLoc += size;
650  }
651  return stat;
652 
653  }
654 
655  // return address of buffer not yet deserialized. This is used
656  // to copy the remainder of a buffer.
658  return &this->getBuffAddr()[this->m_deserLoc];
659  }
660 
663  return &this->getBuffAddr()[this->m_serLoc];
664  }
665 
666 #ifdef BUILD_UT
667  bool SerializeBufferBase::operator==(const SerializeBufferBase& other) const {
668  if (this->getBuffLength() != other.getBuffLength()) {
669  return false;
670  }
671 
672  const U8* us = this->getBuffAddr();
673  const U8* them = other.getBuffAddr();
674 
675  FW_ASSERT(us);
676  FW_ASSERT(them);
677 
678  for (NATIVE_UINT_TYPE byte = 0; byte < this->getBuffLength(); byte++) {
679  if (us[byte] != them[byte]) {
680  return false;
681  }
682  }
683 
684  return true;
685  }
686 
687  std::ostream& operator<<(std::ostream& os, const SerializeBufferBase& buff) {
688 
689  const U8* us = buff.getBuffAddr();
690 
691  FW_ASSERT(us);
692 
693  for (NATIVE_UINT_TYPE byte = 0; byte < buff.getBuffLength(); byte++) {
694  os << "[" << std::setw(2) << std::hex << std::setfill('0') << us[byte] << "]" << std::dec;
695  }
696 
697  return os;
698  }
699 #endif
700 
702  this->setExtBuffer(buffPtr,size);
703  }
704 
706  this->clear();
707  }
708 
710  FW_ASSERT(buffPtr);
711  this->m_buff = buffPtr;
712  this->m_buffSize = size;
713  }
714 
716  this->m_buff = nullptr;
717  this->m_buffSize = 0;
718  }
719 
721  return this->m_buffSize;
722  }
723 
725  return this->m_buff;
726  }
727 
729  return this->m_buff;
730  }
731 
732 }
733 
StringType.hpp
Declares ISF string base class.
FW_SERIALIZE_TRUE_VALUE
#define FW_SERIALIZE_TRUE_VALUE
Value encoded during serialization for boolean true.
Definition: FpConfig.hpp:39
Fw::SerializeBufferBase::SerializeBufferBase
SerializeBufferBase()
default constructor
Definition: Serializable.cpp:41
Fw::FW_DESERIALIZE_BUFFER_EMPTY
@ FW_DESERIALIZE_BUFFER_EMPTY
Deserialization buffer was empty when trying to read more data.
Definition: Serializable.hpp:18
Fw::SerializeBufferBase::resetSer
void resetSer()
reset to beginning of buffer to reuse for serialization
Definition: Serializable.cpp:569
FW_SERIALIZE_FALSE_VALUE
#define FW_SERIALIZE_FALSE_VALUE
Value encoded during serialization for boolean false.
Definition: FpConfig.hpp:43
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::FW_DESERIALIZE_SIZE_MISMATCH
@ FW_DESERIALIZE_SIZE_MISMATCH
Data was left in the buffer, but not enough to deserialize.
Definition: Serializable.hpp:20
Serializable.hpp
Fw::SerializeBufferBase::serialize
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
Definition: Serializable.cpp:67
Fw::StringBase
Definition: StringType.hpp:23
Fw::SerializeBufferBase::copyRaw
SerializeStatus copyRaw(SerializeBufferBase &dest, NATIVE_UINT_TYPE size)
directly copies buffer without looking for a size in the stream.
Definition: Serializable.cpp:622
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Fw::SerializeBufferBase::~SerializeBufferBase
virtual ~SerializeBufferBase()
destructor
Definition: Serializable.cpp:45
Fw::SerializeBufferBase::getBuffAddrLeft
const U8 * getBuffAddrLeft() const
gets address of remaining non-deserialized data.
Fw::ExternalSerializeBuffer::clear
void clear()
clear external buffer
Definition: Serializable.cpp:715
Fw::Serializable
forward declaration
Definition: Serializable.hpp:26
Assert.hpp
Fw::FW_SERIALIZE_OK
@ FW_SERIALIZE_OK
Serialization/Deserialization operation was successful.
Definition: Serializable.hpp:15
Fw::SerializeBufferBase::getBuffLeft
NATIVE_UINT_TYPE getBuffLeft() const
returns how much deserialization buffer is left
Definition: Serializable.cpp:618
U64
#define U64(C)
Definition: sha.h:176
Fw::SerializeBufferBase::deserializeSkip
SerializeStatus deserializeSkip(NATIVE_UINT_TYPE numBytesToSkip)
Skips the number of specified bytes for deserialization.
Definition: Serializable.cpp:578
I8
int8_t I8
8-bit signed integer
Definition: BasicTypes.hpp:75
Fw::FW_DESERIALIZE_FORMAT_ERROR
@ FW_DESERIALIZE_FORMAT_ERROR
Deserialization data had incorrect values (unexpected data types)
Definition: Serializable.hpp:19
F32
float F32
32-bit floating point
Definition: BasicTypes.hpp:94
Fw::Serializable::~Serializable
virtual ~Serializable()
destructor
Definition: Serializable.cpp:19
Fw::SerializeBufferBase::getBuffAddrSer
U8 * getBuffAddrSer()
gets address of end of serialization. DANGEROUS! Need to know max buffer size and adjust when done
Definition: Serializable.cpp:662
Fw::Serializable::deserialize
virtual SerializeStatus deserialize(SerializeBufferBase &buffer)=0
deserialize to contents
Fw::SerializeBufferBase::setBuffLen
SerializeStatus setBuffLen(NATIVE_UINT_TYPE length)
sets buffer length manually after filling with data
Definition: Serializable.cpp:608
Fw::FW_SERIALIZE_NO_ROOM_LEFT
@ FW_SERIALIZE_NO_ROOM_LEFT
No room left in the buffer to serialize data.
Definition: Serializable.hpp:17
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Fw::ExternalSerializeBuffer::setExtBuffer
void setExtBuffer(U8 *buffPtr, NATIVE_UINT_TYPE size)
Set the external buffer.
Definition: Serializable.cpp:709
String.hpp
Fw::SerializeBufferBase::resetDeser
void resetDeser()
reset deserialization to beginning
Definition: Serializable.cpp:574
FW_ASSERT
#define FW_ASSERT(...)
Definition: Assert.hpp:8
Fw::SerializeBufferBase::getBuffLength
NATIVE_UINT_TYPE getBuffLength() const
returns current buffer size
Definition: Serializable.cpp:591
Fw::String
Definition: String.hpp:10
Fw::Serializable::Serializable
Serializable()
Default constructor.
Definition: Serializable.cpp:16
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:290
Fw::SerializeBufferBase::setBuff
SerializeStatus setBuff(const U8 *src, NATIVE_UINT_TYPE length)
sets buffer contents and size
Definition: Serializable.cpp:595
Fw::SerializeBufferBase::copyRawOffset
SerializeStatus copyRawOffset(SerializeBufferBase &dest, NATIVE_UINT_TYPE size)
directly copies buffer without looking for a size in the stream.
Definition: Serializable.cpp:636
Fw::ExternalSerializeBuffer::getBuffCapacity
NATIVE_UINT_TYPE getBuffCapacity() const
returns capacity, not current size, of buffer
Definition: Serializable.cpp:720
Fw::Serializable::serialize
virtual SerializeStatus serialize(SerializeBufferBase &buffer) const =0
serialize contents
Fw::SerializeBufferBase::getBuffAddr
virtual U8 * getBuffAddr()=0
gets buffer address for data filling
Fw::ExternalSerializeBuffer::ExternalSerializeBuffer
ExternalSerializeBuffer()
default constructor
Definition: Serializable.cpp:705
Fw::ExternalSerializeBuffer::getBuffAddr
U8 * getBuffAddr()
gets buffer address for data filling
Definition: Serializable.cpp:724
FwBuffSizeType
#define FwBuffSizeType
Type representation for storing a buffer or string size.
Definition: FpConfig.hpp:79
Fw::SerializeBufferBase::operator=
SerializeBufferBase & operator=(const SerializeBufferBase &src)
equal operator
Definition: Serializable.cpp:60
Fw
Definition: Buffer.cpp:21
Fw::SerializeBufferBase::getBuffCapacity
virtual NATIVE_UINT_TYPE getBuffCapacity() const =0
returns capacity, not current size, of buffer