Go to the documentation of this file.
116 #define PRIbig "ju" // printf format for big_t
189 s->str = malloc(s->size);
190 assert(s->str != NULL &&
"out of memory");
209 assert(
ret >= 0 &&
"out of memory");
211 if (s->size < s->len + 1) {
214 assert(s->size != 0 &&
"overflow");
215 }
while (s->size < s->len + 1);
216 s->str = realloc(s->str, s->size);
217 assert(s->str != NULL &&
"out of memory");
238 return ((
size_t)((
syms - 1) >> 1) * ((
syms - 2) >> 1) +
239 (left >> 1) - 1) * (
g.max - 1) +
245 if (
g.done != NULL) {
246 for (
size_t n = 0;
n <
g.size;
n++)
250 free(
g.done);
g.done = NULL;
252 free(
g.num);
g.num = NULL;
253 free(
g.code);
g.code = NULL;
267 assert(
syms > left && left > 0 &&
len <
g.max);
277 int least = (left << 1) -
syms;
289 for (
int use = least; use <= most; use++) {
316 int bit = 1 << (
mem & 7);
334 assert(vector != NULL &&
"out of memory");
343 vector = calloc(
length, 1);
344 assert(vector != NULL &&
"out of memory");
349 g.done[
index].vec = vector;
370 rem = 1 << (
len -
g.root);
376 if (
mem >=
g.large) {
389 left -=
g.code[
bits];
390 assert((left & 1) == 0);
396 syms,
g.root + 1, ((1 <<
g.root) - left) << 1);
414 int least = (left << 1) -
syms;
428 rem = 1 << (
len -
g.root);
434 for (use = least; use <= most; use++) {
437 mem + (rem ? 1 << (
len -
g.root) : 0), rem << 1);
439 rem = 1 << (
len -
g.root);
456 for (
int n = 0;
n <=
g.max;
n++)
461 g.large = 1 <<
g.root;
463 for (
int n = 3;
n <=
syms;
n++)
464 for (
int left = 2; left <
n; left += 2) {
468 if (
g.root + 1 <
g.max &&
g.num[
index])
473 if (
g.num[
index - 1] &&
n <= left << 1)
474 examine((
n - left) << 1, (
n - left) << 1,
g.root + 1,
479 printf(
"maximum of %d table entries for root = %d\n",
g.large,
g.root);
498 int main(
int argc,
char **argv) {
510 syms = atoi(argv[1]);
512 g.root = atoi(argv[2]);
514 g.max = atoi(argv[3]);
517 if (argc > 4 ||
syms < 2 ||
g.root < 1 ||
g.max < 1) {
518 fputs(
"invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
524 if (
g.max >
syms - 1)
529 for (
code_t word = 1; word; word <<= 1)
534 fputs(
"abort: code length too long for internal types\n",
stderr);
540 fprintf(
stderr,
"%d symbols cannot be coded in %d bits\n",
546 g.code = calloc(
g.max + 1,
sizeof(
int));
547 assert(
g.code != NULL &&
"out of memory");
555 int n = (
syms - 1) >> 1;
556 assert(
g.size <= (
size_t)-1 /
n &&
"overflow");
559 assert(
g.size <= (
size_t)-1 /
n &&
"overflow");
561 g.num = calloc(
g.size,
sizeof(
big_t));
562 assert(
g.num != NULL &&
"out of memory");
567 for (
int n = 2;
n <=
syms;
n++) {
570 assert(got != (
big_t)-1 &&
sum >= got &&
"overflow");
573 if (
g.max <
syms - 1)
574 printf(
" (%d-bit length limit)\n",
g.max);
576 puts(
" (no length limit)");
582 g.done = calloc(
g.size,
sizeof(
struct tab));
583 assert(
g.done != NULL &&
"out of memory");
592 fputs(
"cannot handle minimum code lengths > root",
stderr);
int main(int argc, char **argv)
void string_clear(string_t *s)
int __cdecl vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
return memset(p, 0, total)
size_t map(int syms, int left, int len)
double sum(const T &container, F functor)
_Use_decl_annotations_ int __cdecl printf(const char *_Format,...)
void string_init(string_t *s)
void string_free(string_t *s)
void examine(int syms, int left, int len, int mem, int rem)
void string_printf(string_t *s, char *fmt,...)
OPENSSL_EXPORT ASN1_BIT_STRING * bits
int been_here(int syms, int left, int len, int mem, int rem)
GTEST_API_ const char * fmt
UniquePtr< SSL_SESSION > ret
big_t count(int syms, int left, int len)
unsigned long long code_t
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:19