31 : serializationVector(vector), vectorWritePosition(0)
42 serializationVector.resize(size(configuration));
47 header.
totalSize = serializationVector.size();
49 error = serialize(header);
54 for (
auto& entry : configuration)
60 type = entry.second.getType();
65 switch (entry.second.getType())
70 entry.second.get(coordinate);
77 uint32_t uint32Value = 0;
78 entry.second.get(uint32Value);
86 entry.second.get(floatValue);
101 footer.
checksum = computeChecksum();
104 return serialize(footer);
113 if (serializationVector.size() <
128 uint32_t previousPos = vectorWritePosition;
135 vectorWritePosition = previousPos;
137 uint32_t savedChecksum = computeChecksum();
138 if (footer.checksum != savedChecksum)
142 uint32_t counter = 0;
144 while (vectorWritePosition < serializationVector.size() -
sizeof(footer) &&
164 auto insert = configuration.insert({id, entry});
166 insert.first->second = entry;
171 float floatValue = 0;
176 auto insert = configuration.insert({id, entry});
178 insert.first->second = entry;
183 uint32_t uint32Value = 0;
188 auto insert = configuration.insert({id, entry});
190 insert.first->second = entry;
205uint32_t RegistrySerializer::computeChecksum()
207 uint32_t counter = 0;
208 return std::accumulate(
211 [&counter](uint32_t acc, uint8_t element)
213 acc ^= static_cast<uint32_t>(element >> (3 - (counter % 4)) * 8);
221 size_t totalSize =
sizeof(RegistryHeader) +
sizeof(RegistryFooter);
224 for (
auto& entry : configuration)
226 totalSize +=
sizeof(entry.first);
227 totalSize += entry.second.sizeBytes();
RegistryError deserializeConfiguration(RegistryConfiguration &configuration)
De-serializes the data from a serialized vector into the configuration map. In case of malformed seri...
RegistrySerializer(std::vector< uint8_t > &vector)
Construct a new Registry Serializer object.
RegistryError serializeConfiguration(RegistryConfiguration &configuration)
Serializes the configuration map into the uint8_t vector for serialized data.
This file includes all the types the logdecoder script will decode.
std::unordered_map< ConfigurationId, EntryStructsUnion > RegistryConfiguration
RegistryError
RegistryError enumeration as return type.
@ CHECKSUM_FAIL
The custom checksum check fails.
@ NO_SPACE_FOR_HEADER
There is not enough space to write the header.
@ NO_SUCH_TYPE
There is no such type in TypeEnum.
@ MALFORMED_SERIALIZED_DATA
Malformed data while deserializing.
@ WRONG_ENDIANESS
The endianess not corresponds.
@ WRONG_WRITES_SIZE
Cannot write due to wrong data size.
Coordinates struct with latitude [degree], longitude [degree].
Union data struct to be stored in the map. It does contain the enumeration index and the value of suc...
static EntryStructsUnion make(float value)
Set the Union object with its float value.