24 const uint32_t index = input %
BASE;
26 output_string[pos - 1] =
ALPHABET[index];
40 const char* first_significant = output_string;
41 while (*first_significant ==
ALPHABET[0]) {
47 if (*first_significant ==
'\0') {
48 if (first_significant != output_string) {
50 output_string[1] =
'\0';
57 char* dst = output_string;
58 while ((*dst++ = *first_significant++) !=
'\0') {
88 const auto c =
static_cast<unsigned char>(input_string[pos]);
106 const uint32_t index = input %
BASE;
108 output_string[pos - 1] =
ALPHABET[index];
138 const auto c =
static_cast<unsigned char>(input_string[pos]);
154 if (*input_string ==
'\0') {
157 const char*
const start = input_string;
158 while (*input_string !=
'\0') {
159 const auto c =
static_cast<unsigned char>(*input_string++);
164 return input_string - start;
176 while (*max_string !=
'\0') {
177 const auto current =
static_cast<unsigned char>(*input_string);
178 const auto maximum =
static_cast<unsigned char>(*max_string);
179 if (current < maximum) {
182 if (current > maximum) {
199 if (input_string ==
nullptr) {
200 throw std::invalid_argument(
"Invalid HHC string (nullptr)");
205 throw std::invalid_argument(
"Invalid HHC string (length " + std::to_string(length) +
")");
213 for (std::size_t i = 0; i < padding; ++i) {
216 for (std::size_t i = 0; i < length; ++i) {
217 padded_string[padding + i] = input_string[i];
225 throw std::out_of_range(
"HHC string exceeds 32-bit bounds");
239 if (input_string ==
nullptr) {
240 throw std::invalid_argument(
"Invalid HHC string (nullptr)");
245 throw std::invalid_argument(
"Invalid HHC string (length " + std::to_string(length) +
")");
253 for (std::size_t i = 0; i < padding; ++i) {
256 for (std::size_t i = 0; i < length; ++i) {
257 padded_string[padding + i] = input_string[i];
265 throw std::out_of_range(
"HHC string exceeds 64-bit bounds");
#define HHC_ASSERT(expr)
HHC assertion macro.
Definition hhc_assert.hpp:210
constexpr auto HHC_64BIT_ENCODED_MAX_STRING
Definition hhc_constants.hpp:47
constexpr size_t HHC_64BIT_STRING_LENGTH
Definition hhc_constants.hpp:43
constexpr size_t HHC_32BIT_ENCODED_LENGTH
Definition hhc_constants.hpp:44
constexpr uint32_t hhc_32bit_decode_unsafe(const char *input_string)
Decode a 32-bit integer from a 6-character string.
Definition hhc.hpp:84
constexpr uint64_t hhc_64bit_decode_unsafe(const char *input_string)
Decode a 64-bit integer from a 11-character string.
Definition hhc.hpp:134
constexpr void hhc_unpad_string(char *output_string)
Unpad a string by removing the leading '-' padding characters and moving the significant content to t...
Definition hhc.hpp:37
constexpr auto HHC_32BIT_ENCODED_MAX_STRING
Definition hhc_constants.hpp:46
constexpr void hhc_64bit_encode_unpadded(uint64_t input, char *output_string)
Encode a 64-bit integer into a 11-character string without padding.
Definition hhc.hpp:120
constexpr size_t HHC_32BIT_STRING_LENGTH
Definition hhc_constants.hpp:42
constexpr uint8_t HHC_INVALID_CHAR
Definition hhc_constants.hpp:20
constexpr uint32_t hhc_32bit_decode(const char *input_string)
Decode a 32-bit integer from a 6-character string.
Definition hhc.hpp:198
constexpr std::size_t hhc_validate_string(const char *input_string)
Validate a string to ensure it is a valid HHC string.
Definition hhc.hpp:152
constexpr void hhc_64bit_encode_padded(uint64_t input, char *output_string)
Encode a 64-bit integer into a 11-character string.
Definition hhc.hpp:103
constexpr std::array< char, BASE > ALPHABET
Definition hhc_constants.hpp:10
constexpr void hhc_32bit_encode_unpadded(uint32_t input, char *output_string)
Encode a 32-bit integer into a 6-character string without padding.
Definition hhc.hpp:70
constexpr size_t HHC_64BIT_ENCODED_LENGTH
Definition hhc_constants.hpp:45
constexpr auto INVERSE_ALPHABET
Definition hhc_constants.hpp:39
constexpr void hhc_32bit_encode_padded(uint32_t input, char *output_string)
Encode a 32-bit integer into a 6-character string.
Definition hhc.hpp:20
constexpr uint32_t BASE
Definition hhc_constants.hpp:9
constexpr uint64_t hhc_64bit_decode(const char *input_string)
Decode a 64-bit integer from a 11-character string.
Definition hhc.hpp:238
constexpr bool hhc_bounds_check(const char *input_string, const char *max_string)
Check if a string is within the bounds of a maximum string.
Definition hhc.hpp:173