diff options
| -rw-r--r-- | hash_table.h | 6 | ||||
| -rw-r--r-- | list.h | 6 | ||||
| -rw-r--r-- | pqueue.h | 6 | ||||
| -rw-r--r-- | str.c | 7 | ||||
| -rw-r--r-- | str.h | 1 | ||||
| -rw-r--r-- | tree_map.h | 6 | ||||
| -rw-r--r-- | vec.h | 7 |
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; \ @@ -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) { \ @@ -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; \ @@ -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); } @@ -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); @@ -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; \ @@ -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); \ |
