root/src/StreamUtils.h @ f16b75e3
| f16b75e3 | david.sorber | #include <cmath>
|
|
#include <cstdint>
|
|||
#include <iomanip>
|
|||
#include <iostream>
|
|||
#include <ostream>
|
|||
struct format_hex
|
|||
{
|
|||
uint64_t value;
|
|||
const uint32_t width;
|
|||
const char fill;
|
|||
format_hex(uint64_t val, uint32_t width_=4, char fill_='0')
|
|||
: value(val),
|
|||
width(width_),
|
|||
fill(fill_)
|
|||
{
|
|||
}
|
|||
friend inline std::ostream& operator<<(
|
|||
std::ostream& os,
|
|||
const format_hex& rhs)
|
|||
{
|
|||
return os << std::hex << std::setfill(rhs.fill) << std::setw(rhs.width)
|
|||
<< std::uppercase << static_cast<long>(rhs.value) << std::dec;
|
|||
}
|
|||
};
|
|||
/**
|
|||
* Stream version of hex bytes inline little endian
|
|||
*/
|
|||
struct HexBytesInlineLE
|
|||
{
|
|||
const uint8_t* data;
|
|||
double numBytes;
|
|||
const char* sep;
|
|||
HexBytesInlineLE(const char* data_, double numBytes_, const char* sep_=" ")
|
|||
: data(reinterpret_cast<const uint8_t*>(data_)), numBytes(numBytes_), sep(sep_)
|
|||
{
|
|||
}
|
|||
HexBytesInlineLE(const uint8_t* data_, double numBytes_, const char* sep_=" ")
|
|||
: data(data_), numBytes(numBytes_), sep(sep_)
|
|||
{
|
|||
}
|
|||
friend inline std::ostream& operator<<(
|
|||
std::ostream& os,
|
|||
const HexBytesInlineLE& rhs)
|
|||
{
|
|||
for (int32_t idx = rhs.numBytes - 1; idx > -1; --idx)
|
|||
{
|
|||
os << format_hex(rhs.data[idx], 2) << ((idx <= (rhs.numBytes - 1)) ? rhs.sep : "");
|
|||
}
|
|||
return os;
|
|||
}
|
|||
};
|
|||
/**
|
|||
* Stream version of hex bytes inline big endian
|
|||
*/
|
|||
struct HexBytesInlineBE
|
|||
{
|
|||
const uint8_t* data;
|
|||
double numBytes;
|
|||
const char* sep;
|
|||
HexBytesInlineBE(const char* data_, double numBytes_, const char* sep_=" ")
|
|||
: data(reinterpret_cast<const uint8_t*>(data_)), numBytes(numBytes_), sep(sep_)
|
|||
{
|
|||
}
|
|||
HexBytesInlineBE(const uint8_t* data_, double numBytes_, const char* sep_=" ")
|
|||
: data(data_), numBytes(numBytes_), sep(sep_)
|
|||
{
|
|||
}
|
|||
friend inline std::ostream& operator<<(
|
|||
std::ostream& os,
|
|||
const HexBytesInlineBE& rhs)
|
|||
{
|
|||
for (uint32_t idx = 0; idx < rhs.numBytes; ++idx)
|
|||
{
|
|||
os << format_hex(rhs.data[idx], 2) << ((idx < (rhs.numBytes - 1)) ? rhs.sep : "");
|
|||
}
|
|||
return os;
|
|||
}
|
|||
};
|