F´ Flight Software - C/C++ Documentation  NASA-v2.0.1
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Buffer.cpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title Buffer.cpp
3 // \author mstarch
4 // \brief cpp file for Fw::Buffer implementation
5 //
6 // \copyright
7 // Copyright 2009-2020, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 #include <Fw/Buffer/Buffer.hpp>
13 #include <Fw/Types/Assert.hpp>
14 #include <Fw/Types/BasicTypes.hpp>
15 
16 #if FW_SERIALIZABLE_TO_STRING
18 #endif
19 #include <cstring>
20 
21 namespace Fw {
22 
24  m_serialize_repr(),
25  m_data(NULL),
26  m_size(0),
27  m_context(0xFFFFFFFF)
28 {}
29 
31  m_serialize_repr(src.m_data, src.m_size),
32  m_data(src.m_data),
33  m_size(src.m_size),
34  m_context(src.m_context)
35 {}
36 
37 Buffer::Buffer(U8* data, U32 size, U32 context) : Serializable(),
38  m_serialize_repr(data, size),
39  m_data(data),
40  m_size(size),
41  m_context(context)
42 {}
43 
45  // Ward against self-assignment
46  if (this != &src) {
47  this->set(src.m_data, src.m_size, src.m_context);
48  }
49  return *this;
50 }
51 
52 bool Buffer::operator==(const Buffer& src) const {
53  return (this->m_data == src.m_data) && (this->m_size == src.m_size) && (this->m_context == src.m_context);
54 }
55 
56 U8* Buffer::getData() const {
57  return this->m_data;
58 }
59 
60 U32 Buffer::getSize() const {
61  return this->m_size;
62 }
63 
64 U32 Buffer::getContext() const {
65  return this->m_context;
66 }
67 
68 void Buffer::setData(U8* const data) {
69  this->m_data = data;
70  if (m_data != NULL) {
71  this->m_serialize_repr.setExtBuffer(m_data, m_size);
72  }
73 }
74 
75 void Buffer::setSize(const U32 size) {
76  this->m_size = size;
77  if (m_data != NULL) {
78  this->m_serialize_repr.setExtBuffer(m_data, m_size);
79  }
80 }
81 
82 void Buffer::setContext(const U32 context) {
83  this->m_context = context;
84 }
85 
86 void Buffer::set(U8* const data, const U32 size, const U32 context) {
87  this->m_data = data;
88  this->m_size = size;
89  if (m_data != NULL) {
90  this->m_serialize_repr.setExtBuffer(m_data, m_size);
91  }
92  this->m_context = context;
93 }
94 
96  return m_serialize_repr;
97 }
98 
100  Fw::SerializeStatus stat;
101 #if FW_SERIALIZATION_TYPE_ID
102  stat = buffer.serialize((U32)Buffer::TYPE_ID);
103  if (stat != Fw::FW_SERIALIZE_OK) {
104  return stat;
105  }
106 #endif
107  stat = buffer.serialize(reinterpret_cast<POINTER_CAST>(this->m_data));
108  if (stat != Fw::FW_SERIALIZE_OK) {
109  return stat;
110  }
111  stat = buffer.serialize(this->m_size);
112  if (stat != Fw::FW_SERIALIZE_OK) {
113  return stat;
114  }
115  stat = buffer.serialize(this->m_context);
116  if (stat != Fw::FW_SERIALIZE_OK) {
117  return stat;
118  }
119  return stat;
120 }
121 
123  Fw::SerializeStatus stat;
124 
125 #if FW_SERIALIZATION_TYPE_ID
126  U32 typeId;
127 
128  stat = buffer.deserialize(typeId);
129  if (stat != Fw::FW_SERIALIZE_OK) {
130  return stat;
131  }
132 
133  if (typeId != Buffer::TYPE_ID) {
135  }
136 #endif
137  POINTER_CAST pointer;
138  stat = buffer.deserialize(pointer);
139  if (stat != Fw::FW_SERIALIZE_OK) {
140  return stat;
141  }
142  this->m_data = reinterpret_cast<U8*>(pointer);
143 
144  stat = buffer.deserialize(this->m_size);
145  if (stat != Fw::FW_SERIALIZE_OK) {
146  return stat;
147  }
148  stat = buffer.deserialize(this->m_context);
149  if (stat != Fw::FW_SERIALIZE_OK) {
150  return stat;
151  }
152  return stat;
153 }
154 
155 #if FW_SERIALIZABLE_TO_STRING || BUILD_UT
156 void Buffer::toString(Fw::StringBase& text) const {
157  static const char * formatString = "(data = %p, size = %u,context = %u)";
158  char outputString[FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE];
159 
160  (void)snprintf(outputString, FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE, formatString, this->m_data, this->m_size,
161  this->m_context);
162  // Force NULL termination
163  outputString[FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE-1] = 0;
164  text = outputString;
165 }
166 #endif
167 
168 #ifdef BUILD_UT
169  std::ostream& operator<<(std::ostream& os, const Buffer& obj) {
171  obj.toString(str);
172  os << str.toChar();
173  return os;
174  }
175 #endif
176 } // end namespace Fw
Fw::EightyCharString::toChar
const char * toChar(void) const
gets char buffer
Definition: EightyCharString.cpp:34
Fw::SerializeBufferBase
Definition: Serializable.hpp:43
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Fw::Buffer::operator=
Buffer & operator=(const Buffer &src)
Definition: Buffer.cpp:44
Fw::Buffer::setContext
void setContext(U32 context)
Definition: Buffer.cpp:82
Fw::Buffer::getData
U8 * getData() const
Definition: Buffer.cpp:56
Fw::SerializeBufferBase::serialize
SerializeStatus serialize(U8 val)
serialize 8-bit unsigned int
Definition: Serializable.cpp:67
Fw::StringBase
Definition: StringType.hpp:23
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Buffer.hpp
Fw::Buffer::setData
void setData(U8 *data)
Definition: Buffer.cpp:68
Fw::EightyCharString
Definition: EightyCharString.hpp:10
Fw::Buffer::getContext
U32 getContext() const
Definition: Buffer.cpp:64
Fw::Buffer
Definition: Buffer.hpp:43
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::Buffer::getSerializeRepr
SerializeBufferBase & getSerializeRepr()
Definition: Buffer.cpp:95
EightyCharString.hpp
Fw::Buffer::getSize
U32 getSize() const
Definition: Buffer.cpp:60
FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE
#define FW_SERIALIZABLE_TO_STRING_BUFFER_SIZE
Size of string to store toString() string output.
Definition: FpConfig.hpp:302
Fw::Buffer::setSize
void setSize(U32 size)
Definition: Buffer.cpp:75
Fw::Buffer::set
void set(U8 *data, U32 size, U32 context=NO_CONTEXT)
Definition: Buffer.cpp:86
Fw::ExternalSerializeBuffer::setExtBuffer
void setExtBuffer(U8 *buffPtr, NATIVE_UINT_TYPE size)
Set the external buffer.
Definition: Serializable.cpp:705
Fw::SerializeBufferBase::deserialize
SerializeStatus deserialize(U8 &val)
deserialize 8-bit unsigned int
Definition: Serializable.cpp:290
Fw::FW_DESERIALIZE_TYPE_MISMATCH
@ FW_DESERIALIZE_TYPE_MISMATCH
Deserialized type ID didn't match.
Definition: Serializable.hpp:21
Fw::Buffer::Buffer
Buffer()
Definition: Buffer.cpp:23
BasicTypes.hpp
Declares ISF basic types.
Fw::Buffer::operator==
bool operator==(const Buffer &src) const
Definition: Buffer.cpp:52
Fw::Buffer::serialize
Fw::SerializeStatus serialize(Fw::SerializeBufferBase &serialBuffer) const
Definition: Buffer.cpp:99
Fw::Buffer::deserialize
Fw::SerializeStatus deserialize(Fw::SerializeBufferBase &buffer)
Definition: Buffer.cpp:122
NULL
#define NULL
NULL.
Definition: BasicTypes.hpp:100
Fw
Definition: Buffer.cpp:21