blob: de7c4041b9a42d76a08d642ecc9222f986a38d47 [file] [log] [blame]
Zane Shelley8f60a622021-02-01 14:41:30 -06001#pragma once
2
3/**
4 * @brief Specially utilities that are specific to the analyzer (typically
5 * stuff that involves libhei).
6 */
7
8#include <hei_main.hpp>
9#include <util/bin_stream.hpp>
10
11namespace util
12{
13
14/** @brief Extracts big-endian data to host RegisterId_t. */
15template <>
16inline BinFileReader& BinFileReader::operator>>(libhei::RegisterId_t& r)
17{
18 // A register ID is only 3 bytes, but there isn't a 3-byte integer type.
19 // So extract 3 bytes to a uint32_t and drop the unused byte.
20 uint32_t tmp = 0;
21 read(&tmp, 3);
22 r = static_cast<libhei::RegisterId_t>(be32toh(tmp) >> 8);
23 return *this;
24}
25
26/** @brief Inserts host RegisterId_t to big-endian data. */
27template <>
28inline BinFileWriter& BinFileWriter::operator<<(libhei::RegisterId_t r)
29{
30 // A register ID is only 3 bytes, but there isn't a 3-byte integer type.
31 // So extract 3 bytes to a uint32_t and drop the unused byte.
32 uint32_t tmp = htobe32(static_cast<uint32_t>(r) << 8);
33 write(&tmp, 3);
34 return *this;
35}
36
37} // namespace util