Arax -8d09c51940345c86062e8ef2427c705ae66e5926
A Runtime Framework for Decoupling Applications from Heterogeneous Accelerators
Loading...
Searching...
No Matches
Kv.c
Go to the documentation of this file.
1#include "Kv.h"
2#include <stdio.h>
3#include <string.h>
4
6{
7 memset(kv, 0, sizeof(*kv));
9}
10
11void utils_kv_set(utils_kv_s *kv, void *key, void *value)
12{
13 // TODO De-tarzanize implementation (ask christos for explanation)
14 // use bsearch and qsort
15 size_t itr = 0;
16
18 for (itr = 0; itr < kv->pairs; itr++) {
19 if (kv->kv[itr].key == key) {
20 kv->kv[itr].value = value;
22 return;
23 }
24 }
25 if (kv->pairs < ARAX_KV_CAP) {
26 kv->kv[kv->pairs].key = key;
27 kv->kv[kv->pairs++].value = value;
28 } else {
30 arax_assert(!"Exceeded ARAX_KV_CAP");
31 }
33}
34
35void** utils_kv_get(utils_kv_s *kv, void *key)
36{
37 size_t itr;
38
40 for (itr = 0; itr < kv->pairs; itr++) {
41 if (kv->kv[itr].key == key) {
43 return &(kv->kv[itr].value);
44 }
45 }
47 return 0;
48}
#define arax_assert(EXPR)
Definition arax_assert.h:7
#define utils_spinlock_lock(V)
Definition queue.c:35
#define utils_spinlock_init(V)
Definition queue.c:34
#define utils_spinlock_unlock(V)
Definition queue.c:36
void utils_kv_init(utils_kv_s *kv)
Definition Kv.c:5
void utils_kv_set(utils_kv_s *kv, void *key, void *value)
Definition Kv.c:11
void ** utils_kv_get(utils_kv_s *kv, void *key)
Definition Kv.c:35
size_t pairs
Definition Kv.h:17
utils_spinlock lock
Definition Kv.h:18
struct utils_kv_s::Pair kv[ARAX_KV_CAP]
void * value
Definition Kv.h:15
void * key
Definition Kv.h:14