From 1992412fd007600856896924f04d460bb212c9f1 Mon Sep 17 00:00:00 2001 From: Mistivia Date: Thu, 25 Dec 2025 04:06:18 +0800 Subject: add create interface --- hash_table.h | 6 ++++++ list.h | 6 ++++++ pqueue.h | 6 ++++++ str.c | 7 +++++++ str.h | 1 + tree_map.h | 6 ++++++ vec.h | 7 ++++++- 7 files changed, 38 insertions(+), 1 deletion(-) 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); \ -- cgit v1.0