format code

This commit is contained in:
2026-08-04 12:17:59 +03:00
parent da43582394
commit 69151d54dd
+26
View File
@@ -48,6 +48,7 @@ struct set* set_new(void) {
set->strings_cap = 0; set->strings_cap = 0;
set->strings = NULL; set->strings = NULL;
set->symbols_v = NULL; set->symbols_v = NULL;
return set; return set;
} }
@@ -71,6 +72,8 @@ void set_add(struct set* set, const char* sym) {
memcpy(set->strings + set->strings_len, sym, length); memcpy(set->strings + set->strings_len, sym, length);
set->strings_len = required; set->strings_len = required;
++set->cnt; ++set->cnt;
return;
} }
struct set* set_free(struct set* set) { struct set* set_free(struct set* set) {
@@ -79,6 +82,7 @@ struct set* set_free(struct set* set) {
_free(set->symbols_v); _free(set->symbols_v);
set = _free(set); set = _free(set);
} }
return NULL; return NULL;
} }
@@ -95,6 +99,7 @@ static unsigned hash(const char* str) {
hash += hash << 3; hash += hash << 3;
hash ^= hash >> 11; hash ^= hash >> 11;
hash += hash << 15; hash += hash << 15;
return hash; return hash;
} }
@@ -104,12 +109,14 @@ static int compare_symbols(const void* arg1, const void* arg2) {
if (s1->hash > s2->hash) return 1; if (s1->hash > s2->hash) return 1;
if (s1->hash < s2->hash) return -1; if (s1->hash < s2->hash) return -1;
return 0; return 0;
} }
static void sort_symbols(struct symbols* values, size_t count, unsigned bpp) { static void sort_symbols(struct symbols* values, size_t count, unsigned bpp) {
if (count < 128) { if (count < 128) {
qsort(values, count, sizeof(*values), compare_symbols); qsort(values, count, sizeof(*values), compare_symbols);
return; return;
} }
@@ -142,6 +149,8 @@ static void sort_symbols(struct symbols* values, size_t count, unsigned bpp) {
if (source != values) memcpy(values, source, count * sizeof(*values)); if (source != values) memcpy(values, source, count * sizeof(*values));
_free(temporary); _free(temporary);
return;
} }
static const char base64_alphabet[] = static const char base64_alphabet[] =
@@ -151,6 +160,7 @@ static size_t base64_encoded_size(size_t byte_count) {
if (byte_count > SIZE_MAX - 2) abort(); if (byte_count > SIZE_MAX - 2) abort();
size_t groups = (byte_count + 2) / 3; size_t groups = (byte_count + 2) / 3;
if (groups > (SIZE_MAX - FORMAT_HEADER_LEN - 1) / 4) abort(); if (groups > (SIZE_MAX - FORMAT_HEADER_LEN - 1) / 4) abort();
return groups * 4; return groups * 4;
} }
@@ -179,6 +189,8 @@ static void base64_encode(const unsigned char* input, size_t input_len, char* ou
output[2] = base64_alphabet[(value >> 6) & 0x3f]; output[2] = base64_alphabet[(value >> 6) & 0x3f];
output[3] = '='; output[3] = '=';
} }
return;
} }
static unsigned char* pack_hashes(const unsigned* hashes, size_t count, unsigned bpp, static unsigned char* pack_hashes(const unsigned* hashes, size_t count, unsigned bpp,
@@ -194,14 +206,17 @@ static unsigned char* pack_hashes(const unsigned* hashes, size_t count, unsigned
for (size_t i = 0; i < count; ++i) { for (size_t i = 0; i < count; ++i) {
bits |= (uint64_t)hashes[i] << filled; bits |= (uint64_t)hashes[i] << filled;
filled += bpp; filled += bpp;
while (filled >= 8) { while (filled >= 8) {
*output++ = (unsigned char)bits; *output++ = (unsigned char)bits;
bits >>= 8; bits >>= 8;
filled -= 8; filled -= 8;
} }
} }
if (filled) *output++ = (unsigned char)bits; if (filled) *output++ = (unsigned char)bits;
assert((size_t)(output - bytes) == *byte_count); assert((size_t)(output - bytes) == *byte_count);
return bytes; return bytes;
} }
@@ -242,6 +257,7 @@ const char* set_fini(struct set* set, int bpp) {
_free(bytes); _free(bytes);
_free(unique_hashes); _free(unique_hashes);
return output; return output;
} }
@@ -279,6 +295,7 @@ static inline int decode_writer_put(struct decode_writer* writer, uint32_t bytes
unsigned current = (unsigned)(writer->bits & writer->mask); unsigned current = (unsigned)(writer->bits & writer->mask);
writer->bits >>= writer->bpp; writer->bits >>= writer->bpp;
writer->filled -= writer->bpp; writer->filled -= writer->bpp;
if (writer->written > 0 && writer->hashes[writer->written - 1] >= current) return -1; if (writer->written > 0 && writer->hashes[writer->written - 1] >= current) return -1;
writer->hashes[writer->written++] = current; writer->hashes[writer->written++] = current;
} }
@@ -352,10 +369,12 @@ static int decode_set(const char* str, struct decoded_set* decoded) {
decoded->hashes = hashes; decoded->hashes = hashes;
decoded->count = count; decoded->count = count;
decoded->bpp = bpp; decoded->bpp = bpp;
return 0; return 0;
invalid: invalid:
_free(hashes); _free(hashes);
return -1; return -1;
} }
@@ -396,6 +415,7 @@ static size_t downsample_set(size_t count, const unsigned* hashes, unsigned* res
} }
while (low < low_end) *output++ = *low++; while (low < low_end) *output++ = *low++;
while (high < high_end) *output++ = *high++ & mask; while (high < high_end) *output++ = *high++ & mask;
return (size_t)(output - result); return (size_t)(output - result);
} }
@@ -421,6 +441,8 @@ static void downsample_to(struct decoded_set* set, unsigned target_bpp) {
_free(original); _free(original);
set->hashes = scratch; set->hashes = scratch;
} }
return;
} }
static const unsigned* step_lower_bound(const unsigned* first, const unsigned* last, unsigned value, static const unsigned* step_lower_bound(const unsigned* first, const unsigned* last, unsigned value,
@@ -442,6 +464,7 @@ static const unsigned* step_lower_bound(const unsigned* first, const unsigned* l
else else
step /= 2; step /= 2;
} }
return first + position + 1; return first + position + 1;
} }
@@ -458,6 +481,7 @@ static int sorted_subset(const unsigned* small, size_t small_count, const unsign
if (large == large_end || *large != value) return 0; if (large == large_end || *large != value) return 0;
++large; ++large;
} }
return 1; return 1;
} }
@@ -467,6 +491,7 @@ static int sorted_subset(const unsigned* small, size_t small_count, const unsign
if (large == large_end || *large != value) return 0; if (large == large_end || *large != value) return 0;
++large; ++large;
} }
return 1; return 1;
} }
@@ -494,5 +519,6 @@ int rpmsetcmp(const char* str1, const char* str2) {
_free(set1.hashes); _free(set1.hashes);
_free(set2.hashes); _free(set2.hashes);
return result; return result;
} }