Skip to content

Commit e44e0ab

Browse files
committed
add test for node_loader class
add api for getting all keys and values in adt_set and adt_map
1 parent 145e5c1 commit e44e0ab

File tree

11 files changed

+1620
-370
lines changed

11 files changed

+1620
-370
lines changed

source/adt/include/adt/adt_map.h

+4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ ADT_API int map_insert_array(map m, map_key keys[], map_value values[], size_t s
6363

6464
ADT_API vector map_get(map m, map_key key);
6565

66+
ADT_API vector map_get_keys(map m);
67+
68+
ADT_API vector map_get_values(map m);
69+
6670
ADT_API int map_contains(map m, map_key key);
6771

6872
ADT_API int map_contains_any(map dest, map src);

source/adt/include/adt/adt_set.h

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include <adt/adt_comparable.h>
1717
#include <adt/adt_hash.h>
18+
#include <adt/adt_vector.h>
1819

1920
#ifdef __cplusplus
2021
extern "C" {
@@ -62,6 +63,10 @@ ADT_API int set_insert_array(set s, set_key keys[], set_value values[], size_t s
6263

6364
ADT_API set_value set_get(set s, set_key key);
6465

66+
ADT_API vector set_get_keys(set s);
67+
68+
ADT_API vector set_get_values(set s);
69+
6570
ADT_API int set_contains(set s, set_key key);
6671

6772
ADT_API int set_contains_any(set dest, set src);

source/adt/source/adt_map.c

+42
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,48 @@ vector map_get(map m, map_key key)
251251
return NULL;
252252
}
253253

254+
vector map_get_keys(map m)
255+
{
256+
vector v = vector_create(sizeof(void *));
257+
bucket b;
258+
pair p;
259+
for (size_t iterator = 0; iterator < m->capacity; iterator++)
260+
{
261+
b = &m->buckets[iterator];
262+
263+
if (b->pairs != NULL && b->count > 0)
264+
{
265+
for (size_t index = 0; index < b->count; index++)
266+
{
267+
p = &b->pairs[index];
268+
vector_push_back(v, &p->key);
269+
}
270+
}
271+
}
272+
return v;
273+
}
274+
275+
vector map_get_values(map m)
276+
{
277+
vector v = vector_create(sizeof(void *));
278+
bucket b;
279+
pair p;
280+
for (size_t iterator = 0; iterator < m->capacity; iterator++)
281+
{
282+
b = &m->buckets[iterator];
283+
284+
if (b->pairs != NULL && b->count > 0)
285+
{
286+
for (size_t index = 0; index < b->count; index++)
287+
{
288+
p = &b->pairs[index];
289+
vector_push_back(v, &p->value);
290+
}
291+
}
292+
}
293+
return v;
294+
}
295+
254296
int map_contains(map m, map_key key)
255297
{
256298
if (m != NULL && key != NULL)

source/adt/source/adt_set.c

+42
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,48 @@ set_value set_get(set s, set_key key)
273273
return NULL;
274274
}
275275

276+
vector set_get_keys(set s)
277+
{
278+
vector v = vector_create(sizeof(void *));
279+
bucket b;
280+
pair p;
281+
for (size_t iterator = 0; iterator < s->capacity; iterator++)
282+
{
283+
b = &s->buckets[iterator];
284+
285+
if (b->pairs != NULL && b->count > 0)
286+
{
287+
for (size_t index = 0; index < b->count; index++)
288+
{
289+
p = &b->pairs[index];
290+
vector_push_back(v, &p->key);
291+
}
292+
}
293+
}
294+
return v;
295+
}
296+
297+
vector set_get_values(set s)
298+
{
299+
vector v = vector_create(sizeof(void *));
300+
bucket b;
301+
pair p;
302+
for (size_t iterator = 0; iterator < s->capacity; iterator++)
303+
{
304+
b = &s->buckets[iterator];
305+
306+
if (b->pairs != NULL && b->count > 0)
307+
{
308+
for (size_t index = 0; index < b->count; index++)
309+
{
310+
p = &b->pairs[index];
311+
vector_push_back(v, &p->value);
312+
}
313+
}
314+
}
315+
return v;
316+
}
317+
276318
int set_contains(set s, set_key key)
277319
{
278320
if (s != NULL && key != NULL)

0 commit comments

Comments
 (0)