Port to new libdynamic API
This commit is contained in:
1 parent
90d3dda830
commit
049d8b6ca6
1 file changed
+21
-11
+21
-11
@@ -45,6 +45,9 @@ static size_t hash_func (void *a)
|
|||||||
static int equal_func(void *a, void *b)
|
static int equal_func(void *a, void *b)
|
||||||
{
|
{
|
||||||
const unsigned long *pa = a;
|
const unsigned long *pa = a;
|
||||||
|
if (b == NULL) {
|
||||||
|
return *pa == -1U;
|
||||||
|
}
|
||||||
const unsigned long *pb = b;
|
const unsigned long *pb = b;
|
||||||
return *pa == *pb;
|
return *pa == *pb;
|
||||||
}
|
}
|
||||||
@@ -52,8 +55,12 @@ static int equal_func(void *a, void *b)
|
|||||||
static void set_func(void *a, void *b)
|
static void set_func(void *a, void *b)
|
||||||
{
|
{
|
||||||
unsigned long *pa = a;
|
unsigned long *pa = a;
|
||||||
const unsigned long *pb = b;
|
if (b == NULL) {
|
||||||
*pa = *pb;
|
*pa = -1U;
|
||||||
|
} else {
|
||||||
|
const unsigned long *pb = b;
|
||||||
|
*pa = *pb;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct map_element map_element;
|
typedef struct map_element map_element;
|
||||||
@@ -67,10 +74,10 @@ static void
|
|||||||
test_dict(size_t n)
|
test_dict(size_t n)
|
||||||
{
|
{
|
||||||
map dict;
|
map dict;
|
||||||
map_construct(&dict, sizeof(map_element), (map_element[]) {{.key = -1}}, set_func);
|
map_construct(&dict, sizeof(map_element), set_func);
|
||||||
|
|
||||||
for (size_t i = 0; i < n; i++) {
|
for (size_t i = 0; i < n; i++) {
|
||||||
map_insert(&dict, (map_element[]) {{.key = rand_get(), .value = rand_get()}}, hash_func, equal_func, set_func, NULL);
|
map_insert(&dict, (map_element[]) {{.key = rand_get(), .value = rand_get()}}, hash_func, set_func, equal_func, NULL);
|
||||||
}
|
}
|
||||||
rand_init();
|
rand_init();
|
||||||
unsigned int s = 0;
|
unsigned int s = 0;
|
||||||
@@ -90,6 +97,8 @@ typedef char char_array_t[256];
|
|||||||
static int char_equal (void *a, void *b)
|
static int char_equal (void *a, void *b)
|
||||||
{
|
{
|
||||||
const char_array_t *pa = (const char_array_t *)a;
|
const char_array_t *pa = (const char_array_t *)a;
|
||||||
|
if (b == NULL)
|
||||||
|
return strcmp(*pa, "") == 0;
|
||||||
const char_array_t *pb = (const char_array_t *)b;
|
const char_array_t *pb = (const char_array_t *)b;
|
||||||
return strcmp(*pa,*pb)==0;
|
return strcmp(*pa,*pb)==0;
|
||||||
}
|
}
|
||||||
@@ -103,8 +112,12 @@ static size_t char_hash(void *a)
|
|||||||
static void char_set(void *a, void *b)
|
static void char_set(void *a, void *b)
|
||||||
{
|
{
|
||||||
char_array_t *pa = (char_array_t *)a;
|
char_array_t *pa = (char_array_t *)a;
|
||||||
const char_array_t *pb = (const char_array_t *)b;
|
if (b == NULL) {
|
||||||
strcpy(*pa,*pb);
|
strcpy(*pa, "");
|
||||||
|
} else {
|
||||||
|
const char_array_t *pb = (const char_array_t *)b;
|
||||||
|
strcpy(*pa,*pb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct big_map_element big_map_element;
|
typedef struct big_map_element big_map_element;
|
||||||
@@ -118,16 +131,13 @@ static void
|
|||||||
test_dict_big(size_t n)
|
test_dict_big(size_t n)
|
||||||
{
|
{
|
||||||
map dict;
|
map dict;
|
||||||
big_map_element empty;
|
map_construct(&dict, sizeof(big_map_element), char_set);
|
||||||
strcpy(empty.key, "");
|
|
||||||
strcpy(empty.value, "");
|
|
||||||
map_construct(&dict, sizeof(big_map_element), &empty, char_set);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < n; i++) {
|
for (size_t i = 0; i < n; i++) {
|
||||||
big_map_element el;
|
big_map_element el;
|
||||||
sprintf(el.key, "%u", rand_get());
|
sprintf(el.key, "%u", rand_get());
|
||||||
sprintf(el.value, "%u", rand_get());
|
sprintf(el.value, "%u", rand_get());
|
||||||
map_insert(&dict, &el, char_hash, char_equal, char_set, NULL);
|
map_insert(&dict, &el, char_hash, char_set, char_equal, NULL);
|
||||||
}
|
}
|
||||||
rand_init();
|
rand_init();
|
||||||
unsigned int s = 0;
|
unsigned int s = 0;
|
||||||
|
|||||||
Reference in new issue
Block a user