# HG changeset patch # User Kristian H?gsberg # Date 1190231436 14400 # Node ID 1609eb5d93a1dd0b8cbc20f60885e9e35f03897b # Parent 50fd9002d5ee81823f7587aac455316e89a12006 Move string hash table buckets to importer object. diff -r 50fd9002d5ee -r 1609eb5d93a1 razor.c --- a/razor.c Wed Sep 19 15:28:19 2007 -0400 +++ b/razor.c Wed Sep 19 15:50:36 2007 -0400 @@ -55,7 +55,6 @@ }; struct razor_set { - struct array buckets; struct array string_pool; struct array property_pool; struct array packages; @@ -71,6 +70,7 @@ struct razor_importer { struct razor_set *set; + struct array buckets; struct import_property_context requires; struct import_property_context provides; struct razor_package *package; @@ -205,13 +205,11 @@ ; size = set->header->sections[i].type; munmap(set->header, size); - free(set->buckets.data); } else { for (i = 0; i < ARRAY_SIZE(razor_sections); i++) { a = (void *) set + razor_sections[i].offset; free(a->data); } - free(set->buckets.data); } free(set); @@ -274,19 +272,19 @@ return hash; } -unsigned long -razor_set_lookup(struct razor_set *set, const char *key) +static unsigned long +razor_importer_lookup(struct razor_importer *importer, const char *key) { unsigned int mask, start, i; unsigned long *b; char *pool; - pool = set->string_pool.data; - mask = set->buckets.alloc - 1; + pool = importer->set->string_pool.data; + mask = importer->buckets.alloc - 1; start = hash_string(key) * sizeof(unsigned long); - for (i = 0; i < set->buckets.alloc; i += sizeof *b) { - b = set->buckets.data + ((start + i) & mask); + for (i = 0; i < importer->buckets.alloc; i += sizeof *b) { + b = importer->buckets.data + ((start + i) & mask); if (*b == 0) return 0; @@ -325,18 +323,18 @@ } static void -do_insert(struct razor_set *set, unsigned long value) +do_insert(struct razor_importer *importer, unsigned long value) { unsigned int mask, start, i; unsigned long *b; const char *key; - key = (char *) set->string_pool.data + value; - mask = set->buckets.alloc - 1; + key = (char *) importer->set->string_pool.data + value; + mask = importer->buckets.alloc - 1; start = hash_string(key) * sizeof(unsigned long); - for (i = 0; i < set->buckets.alloc; i += sizeof *b) { - b = set->buckets.data + ((start + i) & mask); + for (i = 0; i < importer->buckets.alloc; i += sizeof *b) { + b = importer->buckets.data + ((start + i) & mask); if (*b == 0) { *b = value; break; @@ -344,45 +342,45 @@ } } -unsigned long -razor_set_insert(struct razor_set *set, const char *key) +static unsigned long +razor_importer_insert(struct razor_importer *importer, const char *key) { unsigned long value, *buckets, *b, *end; int alloc; - alloc = set->buckets.alloc; - array_add(&set->buckets, 4 * sizeof *buckets); - if (alloc != set->buckets.alloc) { - end = set->buckets.data + alloc; - memset(end, 0, set->buckets.alloc - alloc); - for (b = set->buckets.data; b < end; b++) { + alloc = importer->buckets.alloc; + array_add(&importer->buckets, 4 * sizeof *buckets); + if (alloc != importer->buckets.alloc) { + end = importer->buckets.data + alloc; + memset(end, 0, importer->buckets.alloc - alloc); + for (b = importer->buckets.data; b < end; b++) { value = *b; if (value != 0) { *b = 0; - do_insert(set, value); + do_insert(importer, value); } } } - value = add_to_string_pool(set, key); - do_insert (set, value); + value = add_to_string_pool(importer->set, key); + do_insert (importer, value); return value; } static unsigned long -razor_set_tokenize(struct razor_set *set, const char *string) +razor_importer_tokenize(struct razor_importer *importer, const char *string) { unsigned long token; if (string == NULL) - return razor_set_tokenize(set, ""); + return razor_importer_tokenize(importer, ""); - token = razor_set_lookup(set, string); + token = razor_importer_lookup(importer, string); if (token != 0) return token; - return razor_set_insert(set, string); + return razor_importer_insert(importer, string); } void @@ -392,8 +390,8 @@ struct razor_package *p; p = array_add(&importer->set->packages, sizeof *p); - p->name = razor_set_tokenize(importer->set, name); - p->version = razor_set_tokenize(importer->set, version); + p->name = razor_importer_tokenize(importer, name); + p->version = razor_importer_tokenize(importer, version); importer->package = p; array_init(&importer->requires.package); @@ -424,8 +422,8 @@ unsigned long *r; p = array_add(pctx->all, sizeof *p); - p->name = razor_set_tokenize(importer->set, name); - p->version = razor_set_tokenize(importer->set, version); + p->name = razor_importer_tokenize(importer, name); + p->version = razor_importer_tokenize(importer, version); p->packages = importer->package - (struct razor_package *) importer->set->packages.data; @@ -703,6 +701,7 @@ free(map); set = importer->set; + array_release(&importer->buckets); free(importer); return set; @@ -971,7 +970,6 @@ set = razor_import_rzr_files(argc - 2, argv + 2); - printf("bucket allocation: %d\n", set->buckets.alloc); printf("pool size: %d\n", set->string_pool.size); printf("pool allocation: %d\n", set->string_pool.alloc); printf("packages: %d\n", @@ -984,11 +982,6 @@ razor_set_write(set, repo_filename); razor_set_destroy(set); - } else if (strcmp(argv[1], "lookup") == 0) { - set = razor_set_open(repo_filename); - printf("%s is %lu\n", argv[2], - razor_set_lookup(set, argv[2])); - razor_set_destroy(set); } else if (strcmp(argv[1], "list") == 0) { set = razor_set_open(repo_filename); razor_set_list(set);