1.1 --- a/razor.c Wed Sep 19 15:26:25 2007 -0400
1.2 +++ b/razor.c Wed Sep 19 15:50:36 2007 -0400
1.3 @@ -55,7 +55,6 @@
1.4 };
1.5
1.6 struct razor_set {
1.7 - struct array buckets;
1.8 struct array string_pool;
1.9 struct array property_pool;
1.10 struct array packages;
1.11 @@ -71,6 +70,7 @@
1.12
1.13 struct razor_importer {
1.14 struct razor_set *set;
1.15 + struct array buckets;
1.16 struct import_property_context requires;
1.17 struct import_property_context provides;
1.18 struct razor_package *package;
1.19 @@ -205,13 +205,11 @@
1.20 ;
1.21 size = set->header->sections[i].type;
1.22 munmap(set->header, size);
1.23 - free(set->buckets.data);
1.24 } else {
1.25 for (i = 0; i < ARRAY_SIZE(razor_sections); i++) {
1.26 a = (void *) set + razor_sections[i].offset;
1.27 free(a->data);
1.28 }
1.29 - free(set->buckets.data);
1.30 }
1.31
1.32 free(set);
1.33 @@ -274,19 +272,19 @@
1.34 return hash;
1.35 }
1.36
1.37 -unsigned long
1.38 -razor_set_lookup(struct razor_set *set, const char *key)
1.39 +static unsigned long
1.40 +razor_importer_lookup(struct razor_importer *importer, const char *key)
1.41 {
1.42 unsigned int mask, start, i;
1.43 unsigned long *b;
1.44 char *pool;
1.45
1.46 - pool = set->string_pool.data;
1.47 - mask = set->buckets.alloc - 1;
1.48 + pool = importer->set->string_pool.data;
1.49 + mask = importer->buckets.alloc - 1;
1.50 start = hash_string(key) * sizeof(unsigned long);
1.51
1.52 - for (i = 0; i < set->buckets.alloc; i += sizeof *b) {
1.53 - b = set->buckets.data + ((start + i) & mask);
1.54 + for (i = 0; i < importer->buckets.alloc; i += sizeof *b) {
1.55 + b = importer->buckets.data + ((start + i) & mask);
1.56
1.57 if (*b == 0)
1.58 return 0;
1.59 @@ -325,18 +323,18 @@
1.60 }
1.61
1.62 static void
1.63 -do_insert(struct razor_set *set, unsigned long value)
1.64 +do_insert(struct razor_importer *importer, unsigned long value)
1.65 {
1.66 unsigned int mask, start, i;
1.67 unsigned long *b;
1.68 const char *key;
1.69
1.70 - key = (char *) set->string_pool.data + value;
1.71 - mask = set->buckets.alloc - 1;
1.72 + key = (char *) importer->set->string_pool.data + value;
1.73 + mask = importer->buckets.alloc - 1;
1.74 start = hash_string(key) * sizeof(unsigned long);
1.75
1.76 - for (i = 0; i < set->buckets.alloc; i += sizeof *b) {
1.77 - b = set->buckets.data + ((start + i) & mask);
1.78 + for (i = 0; i < importer->buckets.alloc; i += sizeof *b) {
1.79 + b = importer->buckets.data + ((start + i) & mask);
1.80 if (*b == 0) {
1.81 *b = value;
1.82 break;
1.83 @@ -344,45 +342,45 @@
1.84 }
1.85 }
1.86
1.87 -unsigned long
1.88 -razor_set_insert(struct razor_set *set, const char *key)
1.89 +static unsigned long
1.90 +razor_importer_insert(struct razor_importer *importer, const char *key)
1.91 {
1.92 unsigned long value, *buckets, *b, *end;
1.93 int alloc;
1.94
1.95 - alloc = set->buckets.alloc;
1.96 - array_add(&set->buckets, 4 * sizeof *buckets);
1.97 - if (alloc != set->buckets.alloc) {
1.98 - end = set->buckets.data + alloc;
1.99 - memset(end, 0, set->buckets.alloc - alloc);
1.100 - for (b = set->buckets.data; b < end; b++) {
1.101 + alloc = importer->buckets.alloc;
1.102 + array_add(&importer->buckets, 4 * sizeof *buckets);
1.103 + if (alloc != importer->buckets.alloc) {
1.104 + end = importer->buckets.data + alloc;
1.105 + memset(end, 0, importer->buckets.alloc - alloc);
1.106 + for (b = importer->buckets.data; b < end; b++) {
1.107 value = *b;
1.108 if (value != 0) {
1.109 *b = 0;
1.110 - do_insert(set, value);
1.111 + do_insert(importer, value);
1.112 }
1.113 }
1.114 }
1.115
1.116 - value = add_to_string_pool(set, key);
1.117 - do_insert (set, value);
1.118 + value = add_to_string_pool(importer->set, key);
1.119 + do_insert (importer, value);
1.120
1.121 return value;
1.122 }
1.123
1.124 static unsigned long
1.125 -razor_set_tokenize(struct razor_set *set, const char *string)
1.126 +razor_importer_tokenize(struct razor_importer *importer, const char *string)
1.127 {
1.128 unsigned long token;
1.129
1.130 if (string == NULL)
1.131 - return razor_set_tokenize(set, "");
1.132 + return razor_importer_tokenize(importer, "");
1.133
1.134 - token = razor_set_lookup(set, string);
1.135 + token = razor_importer_lookup(importer, string);
1.136 if (token != 0)
1.137 return token;
1.138
1.139 - return razor_set_insert(set, string);
1.140 + return razor_importer_insert(importer, string);
1.141 }
1.142
1.143 void
1.144 @@ -392,8 +390,8 @@
1.145 struct razor_package *p;
1.146
1.147 p = array_add(&importer->set->packages, sizeof *p);
1.148 - p->name = razor_set_tokenize(importer->set, name);
1.149 - p->version = razor_set_tokenize(importer->set, version);
1.150 + p->name = razor_importer_tokenize(importer, name);
1.151 + p->version = razor_importer_tokenize(importer, version);
1.152
1.153 importer->package = p;
1.154 array_init(&importer->requires.package);
1.155 @@ -424,8 +422,8 @@
1.156 unsigned long *r;
1.157
1.158 p = array_add(pctx->all, sizeof *p);
1.159 - p->name = razor_set_tokenize(importer->set, name);
1.160 - p->version = razor_set_tokenize(importer->set, version);
1.161 + p->name = razor_importer_tokenize(importer, name);
1.162 + p->version = razor_importer_tokenize(importer, version);
1.163 p->packages = importer->package -
1.164 (struct razor_package *) importer->set->packages.data;
1.165
1.166 @@ -703,6 +701,7 @@
1.167 free(map);
1.168
1.169 set = importer->set;
1.170 + array_release(&importer->buckets);
1.171 free(importer);
1.172
1.173 return set;
1.174 @@ -971,7 +970,6 @@
1.175
1.176 set = razor_import_rzr_files(argc - 2, argv + 2);
1.177
1.178 - printf("bucket allocation: %d\n", set->buckets.alloc);
1.179 printf("pool size: %d\n", set->string_pool.size);
1.180 printf("pool allocation: %d\n", set->string_pool.alloc);
1.181 printf("packages: %d\n",
1.182 @@ -984,11 +982,6 @@
1.183 razor_set_write(set, repo_filename);
1.184
1.185 razor_set_destroy(set);
1.186 - } else if (strcmp(argv[1], "lookup") == 0) {
1.187 - set = razor_set_open(repo_filename);
1.188 - printf("%s is %lu\n", argv[2],
1.189 - razor_set_lookup(set, argv[2]));
1.190 - razor_set_destroy(set);
1.191 } else if (strcmp(argv[1], "list") == 0) {
1.192 set = razor_set_open(repo_filename);
1.193 razor_set_list(set);