GCC Code Coverage Report


Directory: ./
File: Utils/Hash/Crc32/HashImpl.cpp
Date: 2026-11-03 21:15:54
Exec Total Coverage
Lines: 33 33 100.0%
Functions: 9 9 100.0%
Branches: 6 6 100.0%

Line Branch Exec Source
1 // ======================================================================
2 // \title CRC32.cpp
3 // \author dinkel
4 // \brief cpp file for CRC32 implementation of Hash class
5 //
6 // \copyright
7 // Copyright 2009-2015, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12
13 #include <Utils/Hash/Hash.hpp>
14 #include "Crc32.hpp"
15
16 namespace Utils {
17
18 105092 Hash ::Hash() {
19 105092 this->init();
20 105092 }
21
22 105297 Hash ::~Hash() = default;
23
24 55127 void Hash ::hash(const void* const data, const FwSizeType len, HashBuffer& buffer) {
25
1/1
✓ Branch 2 taken 55127 times.
55127 Hash crc32;
26
1/1
✓ Branch 1 taken 55127 times.
55127 crc32.update(data, len);
27
1/1
✓ Branch 1 taken 55127 times.
55127 crc32.finalize(buffer);
28 110254 }
29
30 135242 void Hash ::init() {
31 135242 this->hash_handle = 0xffffffffL;
32 135242 }
33
34 2383301 void Hash ::update(const void* const data, FwSizeType len) {
35 static_assert(sizeof(Utils::Hash::hash_handle) == sizeof(U32), "hash handle size must match CRC32 size");
36 2383301 FW_ASSERT(data != nullptr);
37 2383301 this->hash_handle = crc32_ieee802_3_update(static_cast<const U8*>(data), len, this->hash_handle);
38 2383301 }
39
40 57186 void Hash ::finalize(HashBuffer& buffer) const {
41
1/1
✓ Branch 2 taken 57186 times.
57186 HashBuffer bufferOut;
42 // For CRC32 we need to return the one's complement of the result:
43
1/1
✓ Branch 3 taken 57186 times.
57186 Fw::SerializeStatus status = bufferOut.serializeFrom(~(this->hash_handle));
44 57186 FW_ASSERT(Fw::FW_SERIALIZE_OK == status, status, static_cast<FwAssertArgType>(bufferOut.getCapacity()));
45
1/1
✓ Branch 4 taken 57186 times.
57186 buffer = bufferOut;
46 114372 }
47
48 7704 void Hash ::finalize(U32& hashvalue) const {
49 // For CRC32 we need to return the one's complement of the result:
50 7704 hashvalue = ~(this->hash_handle);
51 7704 }
52
53 3 void Hash ::setHashValue(HashBuffer& value) {
54 3 Fw::SerializeStatus status = value.deserializeTo(this->hash_handle);
55 3 FW_ASSERT(Fw::FW_SERIALIZE_OK == status);
56 // Expecting `value` to already be one's complement; so doing one's complement
57 // here for correct hash updates
58 3 this->hash_handle = ~this->hash_handle;
59 3 }
60
61 299 void Hash ::setHashValue(U32 value) {
62 299 this->hash_handle = ~value;
63 299 }
64
65 } // namespace Utils
66