Move string hash table buckets to importer object.
authorKristian H?gsberg <krh@redhat.com>
Wed Sep 19 15:50:36 2007 -0400 (2007-09-19)
changeset 321609eb5d93a1
parent 31 50fd9002d5ee
child 33 d8cb523fca84
Move string hash table buckets to importer object.
razor.c
     1.1 --- a/razor.c	Wed Sep 19 15:28:19 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);