| 78 | }; |
| 79 | |
| 80 | struct Hex { |
| 81 | uint64 value; |
| 82 | enum PadSpec spec; |
| 83 | template <class Int> |
| 84 | explicit Hex(Int v, PadSpec s = kNoPad) : spec(s) { |
| 85 | // Prevent sign-extension by casting integers to |
| 86 | // their unsigned counterparts. |
| 87 | static_assert( |
| 88 | sizeof(v) == 1 || sizeof(v) == 2 || sizeof(v) == 4 || sizeof(v) == 8, |
| 89 | "Unknown integer type"); |
| 90 | value = sizeof(v) == 1 |
| 91 | ? static_cast<uint8>(v) |
| 92 | : sizeof(v) == 2 ? static_cast<uint16>(v) |
| 93 | : sizeof(v) == 4 ? static_cast<uint32>(v) |
| 94 | : static_cast<uint64>(v); |
| 95 | } |
| 96 | }; |
| 97 | |
| 98 | class AlphaNum { |
| 99 | public: |
no outgoing calls