aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hash_table.h6
-rw-r--r--list.h6
-rw-r--r--pqueue.h6
-rw-r--r--str.c7
-rw-r--r--str.h1
-rw-r--r--tree_map.h6
-rw-r--r--vec.h7
7 files changed, 38 insertions, 1 deletions
diff --git a/hash_table.h b/hash_table.h
index 9b45dff..24814e4 100644
--- a/hash_table.h
+++ b/hash_table.h
@@ -26,6 +26,7 @@ typedef struct hash_table HashTable;
HashTable ht; \
} K##2##V##HashTable; \
void K##2##V##HashTable_init(K##2##V##HashTable *self); \
+ K##2##V##HashTable K##2##V##HashTable_create(); \
bool K##2##V##HashTable_insert(K##2##V##HashTable *self, K key, V value); \
void K##2##V##HashTable_remove(K##2##V##HashTable *ht, K##2##V##HashTableIter iter); \
V* K##2##V##HashTable_get(K##2##V##HashTable *self, K key); \
@@ -47,6 +48,11 @@ typedef struct hash_table HashTable;
void K##2##V##HashTable_init(K##2##V##HashTable *self) { \
init_hash_table(&self->ht, sizeof(K##2##V##HashTableEntry), 16); \
} \
+ K##2##V##HashTable K##2##V##HashTable_create() { \
+ K##2##V##HashTable self; \
+ K##2##V##HashTable_init(&self); \
+ return self; \
+ } \
bool K##2##V##HashTable_insert(K##2##V##HashTable *self, K key, V value) { \
K##2##V##HashTableEntry entry; \
entry.key = key; \
diff --git a/list.h b/list.h
index 6eb17e9..949677c 100644
--- a/list.h
+++ b/list.h
@@ -20,6 +20,7 @@
size_t len; \
} T##List; \
void T##List_init(T##List *self); \
+ T##List T##List_create(); \
void T##List_free(T##List *self); \
T##List T##List_move(T##List *self); \
T##ListIter T##List_insert_before(T##List *self, T##ListIter iter, T val); \
@@ -48,6 +49,11 @@ LIST_DEF(Int);
self->vtail->prev = self->vhead; \
self->len = 0; \
} \
+ T##List T##List_create() { \
+ T##List self; \
+ T##List_init(&self); \
+ return self; \
+ } \
void T##List_free(T##List *self) { \
T##ListIter cur = self->vhead; \
while (cur != NULL) { \
diff --git a/pqueue.h b/pqueue.h
index 2cf78ec..b9b683d 100644
--- a/pqueue.h
+++ b/pqueue.h
@@ -8,6 +8,7 @@
T##Vector vec; \
} T##PQueue; \
void T##PQueue_init(T##PQueue *self); \
+ T##PQueue T##PQueue_create(); \
void T##PQueue_push(T##PQueue *self, T elem); \
void T##PQueue_pop(T##PQueue *self); \
T* T##PQueue_top(T##PQueue *self); \
@@ -32,6 +33,11 @@ PQUEUE_DEF(VoidPtr);
void T##PQueue_init(T##PQueue *self) { \
T##Vector_init(&self->vec); \
} \
+ T##PQueue T##PQueue_create() { \
+ T##PQueue self; \
+ T##PQueue_init(&self); \
+ return self; \
+ } \
void T##PQueue_push(T##PQueue *self, T elem) { \
T##Vector_push_back(&self->vec, elem); \
int i = self->vec.size - 1; \
diff --git a/str.c b/str.c
index e8616aa..8f9c73b 100644
--- a/str.c
+++ b/str.c
@@ -84,10 +84,17 @@ char *str_strip(char *str) {
memcpy(buf, begin, len);
return buf;
}
+
void StrBuilder_init(StrBuilder* self) {
init_str_builder(self);
}
+StrBuilder StrBuilder_create() {
+ StrBuilder self;
+ StrBuilder_init(&self);
+ return self;
+}
+
void StrBuilder_free(StrBuilder* self) {
free(self->buf);
}
diff --git a/str.h b/str.h
index 62a7e15..46bf471 100644
--- a/str.h
+++ b/str.h
@@ -15,6 +15,7 @@ struct str_builder {
typedef struct str_builder str_builder_t;
typedef struct str_builder StrBuilder;
+StrBuilder StrBuilder_create();
void StrBuilder_init(StrBuilder* self);
void StrBuilder_append(StrBuilder *self, char *format, ...);
void StrBuilder_append_char(StrBuilder *self, char c);
diff --git a/tree_map.h b/tree_map.h
index 5e905a8..5b4c6fd 100644
--- a/tree_map.h
+++ b/tree_map.h
@@ -41,6 +41,7 @@
RBTree tree; \
} K##2##V##TreeMap; \
void K##2##V##TreeMap_init(K##2##V##TreeMap *self); \
+ K##2##V##TreeMap K##2##V##TreeMap_create(); \
K##2##V##TreeMapIter K##2##V##TreeMap_insert(K##2##V##TreeMap *self, K key, V value); \
K##2##V##TreeMapIter K##2##V##TreeMap_find(K##2##V##TreeMap *self, K key); \
V* K##2##V##TreeMap_get(K##2##V##TreeMap *self, K key); \
@@ -63,6 +64,11 @@
self->tree.cmp = K##2##V##TreeMap_cmp; \
self->tree.augment = NULL; \
} \
+ K##2##V##TreeMap K##2##V##TreeMap_create() { \
+ K##2##V##TreeMap self; \
+ K##2##V##TreeMap_init(&self); \
+ return self; \
+ } \
K##2##V##TreeMapIter K##2##V##TreeMap_insert(K##2##V##TreeMap *self, K key, V value) { \
K##2##V##TreeMapNode *newnode = malloc(sizeof(K##2##V##TreeMapNode)); \
newnode->key = key; \
diff --git a/vec.h b/vec.h
index e12ce7d..e040936 100644
--- a/vec.h
+++ b/vec.h
@@ -15,6 +15,7 @@
} T##Vector; \
\
void T##Vector_init(T##Vector *self); \
+ T##Vector T##Vector_create(); \
void T##Vector_push_back(T##Vector *self, T elem); \
void T##Vector_insert_before(T##Vector *self, int n, T elem); \
void T##Vector_pop(T##Vector *self); \
@@ -36,7 +37,11 @@
self->cap = 16; \
self->size = 0; \
} \
- \
+ T##Vector T##Vector_create() { \
+ T##Vector self; \
+ T##Vector_init(&self); \
+ return self; \
+ } \
void T##Vector_push_back(T##Vector *self, T elem) { \
if (self->size + 1 > self->cap) { \
self->buffer = realloc(self->buffer, sizeof(T) * self->cap * 2); \