[Spread-cvs] commit: r275 - in trunk: libspread stdutil/src
jschultz at spread.org
jschultz at spread.org
Thu Sep 1 15:27:47 EDT 2005
Author: jschultz
Date: 2005-09-01 15:27:47 -0400 (Thu, 01 Sep 2005)
New Revision: 275
Modified:
trunk/libspread/fl.c
trunk/libspread/fl_p.h
trunk/stdutil/src/stdhash.c
Log:
Fix to stdhash and minor changes in hash/cmp fcns in flush. Still needs more work and testing.
Modified: trunk/libspread/fl.c
===================================================================
--- trunk/libspread/fl.c 2005-08-30 13:53:19 UTC (rev 274)
+++ trunk/libspread/fl.c 2005-09-01 19:27:47 UTC (rev 275)
@@ -984,6 +984,7 @@
/* get groups info out of the msg: either in um->groups or um->new_grps */
get_groups_info(um, &bm->num_groups, (char(**)[MAX_GROUP_NAME]) &groups);
+
if ((groups_size = bm->num_groups * MAX_GROUP_NAME) != 0) {
if ((bm->groups = (char(*)[MAX_GROUP_NAME]) malloc(groups_size)) == 0)
stderr_abort("(%s, %d): malloc(%u)\n", __FILE__, __LINE__, groups_size);
@@ -2139,35 +2140,27 @@
}
/* hashing fcns for group names */
-static stdbool group_name_cmp(const void *str1, const void *str2) {
+static int group_name_cmp(const void *str1, const void *str2) {
return strncmp((const char*) str1, (const char*) str2, MAX_GROUP_NAME);
}
-static size_t group_name_hashcode(const void *str) {
- const stduint8 *key = (const stduint8*) str, *end = key + MAX_GROUP_NAME;
- size_t ret = 0;
-
- while (key != end && *key != 0)
- ret = ret * 33 + *key++;
-
- return ret;
+static stdhcode group_name_hashcode(const void *str) {
+ return stdhcode_sfh(str, strlen((const char*) str));
}
-static stdbool group_name_ptr_cmp(const void *strptr1, const void *strptr2) {
+static int group_name_ptr_cmp(const void *strptr1, const void *strptr2) {
return strncmp(*(const char**) strptr1, *(const char**) strptr2, MAX_GROUP_NAME);
}
-static size_t group_name_ptr_hashcode(const void *strptr) {
+static stdhcode group_name_ptr_hashcode(const void *strptr) {
return group_name_hashcode(*(const void**) strptr);
}
-static stdbool group_id_cmp(const void *gid1, const void *gid2) {
+static int group_id_cmp(const void *gid1, const void *gid2) {
return memcmp(gid1, gid2, sizeof(group_id));
}
-static size_t group_id_hashcode(const void *gid) {
- group_id *gid2 = (group_id*) gid;
-
- return (gid2->id[0] ^ gid2->id[1] ^ gid2->id[2]);
+static stdhcode group_id_hashcode(const void *gid) {
+ return stdhcode_sfh(gid, sizeof(group_id));
}
Modified: trunk/libspread/fl_p.h
===================================================================
--- trunk/libspread/fl_p.h 2005-08-30 13:53:19 UTC (rev 274)
+++ trunk/libspread/fl_p.h 2005-09-01 19:27:47 UTC (rev 275)
@@ -334,12 +334,12 @@
static float FL_SP_version(void);
/* group name hash fcns: used by stdhashs where the keys are group_names */
-static stdbool group_name_cmp(const void *str1, const void *str2);
-static size_t group_name_hashcode(const void *str);
-static stdbool group_name_ptr_cmp(const void *str_ptr1, const void *str_ptr2);
-static size_t group_name_ptr_hashcode(const void *str_ptr);
-static stdbool group_id_cmp(const void *gid1, const void *gid2);
-static size_t group_id_hashcode(const void *gid);
+static int group_name_cmp(const void *str1, const void *str2);
+static stdhcode group_name_hashcode(const void *str);
+static int group_name_ptr_cmp(const void *str_ptr1, const void *str_ptr2);
+static stdhcode group_name_ptr_hashcode(const void *str_ptr);
+static int group_id_cmp(const void *gid1, const void *gid2);
+static stdhcode group_id_hashcode(const void *gid);
#ifdef __cplusplus
}
Modified: trunk/stdutil/src/stdhash.c
===================================================================
--- trunk/stdutil/src/stdhash.c 2005-08-30 13:53:19 UTC (rev 274)
+++ trunk/stdutil/src/stdhash.c 2005-09-01 19:27:47 UTC (rev 275)
@@ -461,7 +461,7 @@
stdsize num_ins, stdbool overwrite, stdbool advance)
{
stdcode ret = STDESUCCESS;
- stdsize hthresh = stdhash_high_thresh(h);
+ stdsize hthresh = stdhash_high_thresh(h);
stdhash_node ** search = NULL;
stdhash_node ** first_ins = NULL;
stdit src_it = *b;
@@ -474,7 +474,7 @@
/* check the loading factor on the table: grow/rehash if necessary */
- if (h->num_nodes > hthresh) { /* load factor too high */
+ if (h->num_nodes >= hthresh) { /* load factor too high */
if ((h->opts & STDHASH_OPTS_NO_AUTO_GROW) != 0) { /* growth disallowed */
ret = STDEACCES;
More information about the Spread-cvs
mailing list