start on newset.c
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
#include "system.h"
|
||||
|
||||
struct set {
|
||||
int cnt;
|
||||
struct symbols {
|
||||
const char* str;
|
||||
unsigned hash;
|
||||
}* symbols_v;
|
||||
};
|
||||
|
||||
struct set* set_new() {
|
||||
// should we use x___ funcs?
|
||||
struct set* set = xmalloc(sizeof *set);
|
||||
set->cnt = 0;
|
||||
set->symbols_v = NULL;
|
||||
|
||||
return set;
|
||||
}
|
||||
|
||||
void set_add(struct set* set, const char* sym) {
|
||||
const int delta = 1024;
|
||||
|
||||
if ((set->cnt & (delta - 1)) == 0) {
|
||||
set->symbols_v = xrealloc(set->symbols_v, sizeof(*set->symbols_v) * (set->cnt + delta));
|
||||
}
|
||||
|
||||
set->symbols_v[set->cnt].str = xstrdup(sym);
|
||||
set->symbols_v[set->cnt].hash = 0;
|
||||
set->cnt++;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
struct set* set_free(struct set* set) {
|
||||
if (set) {
|
||||
for (int i = 0; i < set->cnt; i++) {
|
||||
_free((char*)set->symbols_v[i].str);
|
||||
}
|
||||
|
||||
_free(set->symbols_v);
|
||||
set = _free(set);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ---
|
||||
|
||||
const char* set_fini(struct set* set, int bpp) {
|
||||
// Implementation for finalizing the set
|
||||
return NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user