summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-03-30 23:42:03 +0200
committerTyge Løvset <[email protected]>2021-03-30 23:42:03 +0200
commit996286ceea95b8e7ee5a6acd9fa79875ba381f16 (patch)
tree5a07821cc76efc354201926a1352ee10199fb203
parentf352471e79cbdad71409ad5a679d03cab9634d43 (diff)
downloadSTC-modified-996286ceea95b8e7ee5a6acd9fa79875ba381f16.tar.gz
STC-modified-996286ceea95b8e7ee5a6acd9fa79875ba381f16.zip
Moved cset and csset definitions to cset.h and csset.h. Updated docs.
-rw-r--r--docs/cdeq_api.md2
-rw-r--r--docs/clist_api.md2
-rw-r--r--docs/cmap_api.md6
-rw-r--r--docs/cset_api.md2
-rw-r--r--docs/csset_api.md2
-rw-r--r--docs/cvec_api.md2
-rw-r--r--examples/demos.c1
-rw-r--r--examples/phonebook.c59
-rw-r--r--stc/cmap.h40
-rw-r--r--stc/cset.h42
-rw-r--r--stc/csmap.h48
-rw-r--r--stc/csset.h44
12 files changed, 147 insertions, 103 deletions
diff --git a/docs/cdeq_api.md b/docs/cdeq_api.md
index a5920c6d..21f8b5c8 100644
--- a/docs/cdeq_api.md
+++ b/docs/cdeq_api.md
@@ -12,7 +12,7 @@ See the c++ class [std::deque](https://en.cppreference.com/w/cpp/container/deque
using_cdeq(X, Value);
using_cdeq(X, Value, valueCompare);
-using_cdeq(X, Value, valueCompare, valueDel, valueClone);
+using_cdeq(X, Value, valueCompare, valueDel, valueClone = c_no_clone);
using_cdeq(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue);
using_cdeq_str();
diff --git a/docs/clist_api.md b/docs/clist_api.md
index afc20fdf..ed4ca21b 100644
--- a/docs/clist_api.md
+++ b/docs/clist_api.md
@@ -21,7 +21,7 @@ See the c++ class [std::forward_list](https://en.cppreference.com/w/cpp/containe
using_clist(X, Value);
using_clist(X, Value, valueCompare);
-using_clist(X, Value, valueCompare, valueDel, valueClone);
+using_clist(X, Value, valueCompare, valueDel, valueClone = c_no_clone);
using_clist(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue);
using_clist_str() // using_clist(str, cstr, ...)
diff --git a/docs/cmap_api.md b/docs/cmap_api.md
index 9c5bcf48..77c8d765 100644
--- a/docs/cmap_api.md
+++ b/docs/cmap_api.md
@@ -13,7 +13,7 @@ See the c++ class [std::unordered_map](https://en.cppreference.com/w/cpp/contain
using_cmap(X, Key, Mapped);
using_cmap(X, Key, Mapped, keyEquals, keyHash);
-using_cmap(X, Key, Mapped, keyEquals, keyHash, mappedDel, mappedClone);
+using_cmap(X, Key, Mapped, keyEquals, keyHash, mappedDel, mappedClone = c_no_clone);
using_cmap(X, Key, Mapped, keyEquals, keyHash, mappedDel, mappedFromRaw, mappedToRaw, RawMapped);
using_cmap(X, Key, Mapped, keyEqualsRaw, keyHashRaw, mappedDel, mappedFromRaw, mappedToRaw, RawMapped,
keyDel, keyFromRaw, keyToRaw, RawKey);
@@ -21,12 +21,12 @@ using_cmap_keydef(X, Key, Mapped, keyEquals, keyHash, keyDel, keyClone);
using_cmap_keydef(X, Key, Mapped, keyEqualsRaw, keyHashRaw, keyDel, keyFromRaw, keyToRaw, RawKey);
using_cmap_strkey(X, Mapped); // using_cmap(X, cstr, Mapped, ...)
-using_cmap_strkey(X, Mapped, mappedDel, mappedClone);
+using_cmap_strkey(X, Mapped, mappedDel, mappedClone = c_no_clone);
using_cmap_strkey(X, Mapped, mappedDel, mappedFromRaw, mappedToRaw, RawMapped);
using_cmap_strval(X, Key); // using_cmap(X, Key, cstr, ...)
using_cmap_strval(X, Key, keyEquals, keyHash);
-using_cmap_strval(X, Key, keyEquals, keyHash, keyDel, keyClone);
+using_cmap_strval(X, Key, keyEquals, keyHash, keyDel, keyClone = c_no_clone);
using_cmap_strval(X, Key, keyEqualsRaw, keyHashRaw, keyDel, keyFromRaw, keyToRaw, RawKey);
using_cmap_str() // using_cmap(str, cstr, cstr, ...)
diff --git a/docs/cset_api.md b/docs/cset_api.md
index fe35c56c..26515a11 100644
--- a/docs/cset_api.md
+++ b/docs/cset_api.md
@@ -11,7 +11,7 @@ A **cset** is an associative container that contains a set of unique objects of
using_cset(X, Key);
using_cset(X, Key, keyEquals, keyHash);
-using_cset(X, Key, keyEquals, keyHash, keyDel, keyClone);
+using_cset(X, Key, keyEquals, keyHash, keyDel, keyClone = c_no_clone);
using_cset(X, Key, keyEqualsRaw, keyHashRaw, keyDel, keyFromRaw, keyToRaw, RawKey);
using_cset_str(); // using_cset(str, cstr, ...)
diff --git a/docs/csset_api.md b/docs/csset_api.md
index fc425292..accc81d9 100644
--- a/docs/csset_api.md
+++ b/docs/csset_api.md
@@ -12,7 +12,7 @@ See the c++ class [std::set](https://en.cppreference.com/w/cpp/container/set) fo
using_csset(X, Key);
using_csset(X, Key, keyCompare);
-using_csset(X, Key, keyCompare, keyDel, keyClone);
+using_csset(X, Key, keyCompare, keyDel, keyClone = c_no_clone);
using_csset(X, Key, keyCompareRaw, keyDel, keyFromRaw, keyToRaw, RawKey);
using_csset_str(); // using_csset(str, cstr, ...)
diff --git a/docs/cvec_api.md b/docs/cvec_api.md
index d1a23695..50223e00 100644
--- a/docs/cvec_api.md
+++ b/docs/cvec_api.md
@@ -16,7 +16,7 @@ See the c++ class [std::vector](https://en.cppreference.com/w/cpp/container/vect
using_cvec(X, Value);
using_cvec(X, Value, valueCompare);
-using_cvec(X, Value, valueCompare, valueDel, valueClone);
+using_cvec(X, Value, valueCompare, valueDel, valueClone = c_no_clone);
using_cvec(X, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue);
using_cvec_str(); // using_cvec(str, cstr, ...)
diff --git a/examples/demos.c b/examples/demos.c
index 9d7f894c..d8228b4e 100644
--- a/examples/demos.c
+++ b/examples/demos.c
@@ -1,6 +1,7 @@
#include <stc/cvec.h>
#include <stc/clist.h>
#include <stc/carray.h>
+#include <stc/cset.h>
#include <stc/cmap.h>
#include <stc/cstr.h>
diff --git a/examples/phonebook.c b/examples/phonebook.c
index 6b2ec687..72ce11f2 100644
--- a/examples/phonebook.c
+++ b/examples/phonebook.c
@@ -22,6 +22,7 @@
// Program to emulates the phone book.
#include <stdio.h>
+#include <stc/cset.h>
#include <stc/cmap.h>
#include <stc/cstr.h>
@@ -30,48 +31,48 @@ using_cset_str();
void print_phone_book(cmap_str phone_book)
{
- c_foreach (i, cmap_str, phone_book)
- printf("%s\t- %s\n", i.ref->first.str, i.ref->second.str);
+ c_foreach (i, cmap_str, phone_book)
+ printf("%s\t- %s\n", i.ref->first.str, i.ref->second.str);
}
int main(int argc, char **argv)
{
- c_static_assert(3 == 3, "hello");
+ c_static_assert(3 == 3, "hello");
- c_init (cset_str, names, {"Hello", "Cool", "True"});
- c_foreach (i, cset_str, names) printf("set: %s\n", i.ref->str);
+ c_init (cset_str, names, {"Hello", "Cool", "True"});
+ c_foreach (i, cset_str, names) printf("set: %s\n", i.ref->str);
- bool erased;
- c_init (cmap_str, phone_book, {
- {"Lilia Friedman", "(892) 670-4739"},
- {"Tariq Beltran", "(489) 600-7575"},
- {"Laiba Juarez", "(303) 885-5692"},
- {"Elliott Mooney", "(945) 616-4482"},
- });
+ bool erased;
+ c_init (cmap_str, phone_book, {
+ {"Lilia Friedman", "(892) 670-4739"},
+ {"Tariq Beltran", "(489) 600-7575"},
+ {"Laiba Juarez", "(303) 885-5692"},
+ {"Elliott Mooney", "(945) 616-4482"},
+ });
- printf("Phone book:\n");
- print_phone_book(phone_book);
+ printf("Phone book:\n");
+ print_phone_book(phone_book);
- cmap_str_emplace(&phone_book, "Zak Byers", "(551) 396-1880");
- cmap_str_emplace(&phone_book, "Zak Byers", "(551) 396-1990");
+ cmap_str_emplace(&phone_book, "Zak Byers", "(551) 396-1880");
+ cmap_str_emplace(&phone_book, "Zak Byers", "(551) 396-1990");
- printf("\nPhone book after adding Zak Byers:\n");
- print_phone_book(phone_book);
+ printf("\nPhone book after adding Zak Byers:\n");
+ print_phone_book(phone_book);
- if (cmap_str_find(&phone_book, "Tariq Beltran").ref != NULL)
- printf("\nTariq Beltran is in phone book\n");
+ if (cmap_str_find(&phone_book, "Tariq Beltran").ref != NULL)
+ printf("\nTariq Beltran is in phone book\n");
- erased = cmap_str_erase(&phone_book, "Tariq Beltran");
- erased = cmap_str_erase(&phone_book, "Elliott Mooney");
+ erased = cmap_str_erase(&phone_book, "Tariq Beltran");
+ erased = cmap_str_erase(&phone_book, "Elliott Mooney");
- printf("\nPhone book after erasing Tariq and Elliott:\n");
- print_phone_book(phone_book);
+ printf("\nPhone book after erasing Tariq and Elliott:\n");
+ print_phone_book(phone_book);
- cmap_str_emplace_or_assign(&phone_book, "Zak Byers", "(555) 396-188");
+ cmap_str_emplace_or_assign(&phone_book, "Zak Byers", "(555) 396-188");
- printf("\nPhone book after update phone of Zak Byers:\n");
- print_phone_book(phone_book);
+ printf("\nPhone book after update phone of Zak Byers:\n");
+ print_phone_book(phone_book);
- cmap_str_del(&phone_book);
- puts("done");
+ cmap_str_del(&phone_book);
+ puts("done");
} \ No newline at end of file
diff --git a/stc/cmap.h b/stc/cmap.h
index f17ed995..59acc1a6 100644
--- a/stc/cmap.h
+++ b/stc/cmap.h
@@ -25,27 +25,22 @@
// Unordered set/map - implemented as closed hashing with linear probing and no tombstones.
/*
-#include <stdio.h>
#include <stc/cmap.h>
-using_cset(sx, int); // Set of int
+#include <stdio.h>
+
using_cmap(mx, int, char); // Map of int -> char
int main(void) {
- cset_sx s = cset_sx_init();
- cset_sx_insert(&s, 5);
- cset_sx_insert(&s, 8);
- c_foreach (i, cset_sx, s)
- printf("set %d\n", *i.ref);
- cset_sx_del(&s);
-
cmap_mx m = cmap_mx_init();
cmap_mx_emplace(&m, 5, 'a');
cmap_mx_emplace(&m, 8, 'b');
cmap_mx_emplace(&m, 12, 'c');
+
cmap_mx_iter_t it = cmap_mx_find(&m, 10); // none
char val = cmap_mx_find(&m, 5).ref->second;
cmap_mx_emplace_or_assign(&m, 5, 'd'); // update
cmap_mx_erase(&m, 8);
+
c_foreach (i, cmap_mx, m)
printf("map %d: %c\n", i.ref->first, i.ref->second);
cmap_mx_del(&m);
@@ -86,36 +81,18 @@ typedef struct {size_t idx; uint_fast8_t hx;} chash_bucket_t;
keyDel, keyFromRaw, keyToRaw, RawKey)
#define using_cmap_keydef(...) c_MACRO_OVERLOAD(using_cmap_keydef, __VA_ARGS__)
+
#define using_cmap_keydef_7(X, Key, Mapped, keyEquals, keyHash, keyDel, keyClone) \
using_cmap_keydef_9(X, Key, Mapped, keyEquals, keyHash, \
keyDel, keyClone, c_trivial_toraw, Key)
+
#define using_cmap_keydef_9(X, Key, Mapped, keyEqualsRaw, keyHashRaw, \
keyDel, keyFromRaw, keyToRaw, RawKey) \
_using_CHASH(X, cmap_, Key, Mapped, keyEqualsRaw, keyHashRaw, \
c_trivial_del, c_trivial_fromraw, c_trivial_toraw, Mapped, \
keyDel, keyFromRaw, keyToRaw, RawKey)
-/* cset: */
-#define using_cset(...) \
- c_MACRO_OVERLOAD(using_cset, __VA_ARGS__)
-
-#define using_cset_2(X, Key) \
- using_cset_4(X, Key, c_default_equals, c_default_hash)
-#define using_cset_4(X, Key, keyEquals, keyHash) \
- using_cset_6(X, Key, keyEquals, keyHash, c_trivial_del, c_trivial_fromraw)
-#define using_cset_5(X, Key, keyEquals, keyHash, keyDel) \
- using_cset_6(X, Key, keyEquals, keyHash, keyDel, c_no_clone)
-#define using_cset_6(X, Key, keyEquals, keyHash, keyDel, keyClone) \
- using_cset_8(X, Key, keyEquals, keyHash, keyDel, keyClone, c_trivial_toraw, Key)
-
-#define using_cset_8(X, Key, keyEqualsRaw, keyHashRaw, keyDel, keyFromRaw, keyToRaw, RawKey) \
- _using_CHASH(X, cset_, Key, Key, keyEqualsRaw, keyHashRaw, \
- @@, @@, @@, void, \
- keyDel, keyFromRaw, keyToRaw, RawKey)
-
-/* cset_str, cmap_str, cmap_strkey, cmap_strval: */
-#define using_cset_str() \
- _using_CHASH_strkey(str, cset_, cstr_t, @@, @@, @@, void)
+/* cmap_str, cmap_strkey, cmap_strval: */
#define using_cmap_str() \
_using_CHASH(str, cmap_, cstr_t, cstr_t, cstr_equals_raw, cstr_hash_raw, \
cstr_del, cstr_from, cstr_c_str, const char*, \
@@ -155,11 +132,8 @@ typedef struct {size_t idx; uint_fast8_t hx;} chash_bucket_t;
cstr_del, cstr_from, cstr_c_str, const char*, \
keyDel, keyFromRaw, keyToRaw, RawKey)
-#define SET_ONLY_cset_(...) __VA_ARGS__
#define SET_ONLY_cmap_(...)
-#define MAP_ONLY_cset_(...)
#define MAP_ONLY_cmap_(...) __VA_ARGS__
-#define KEY_REF_cset_(vp) (vp)
#define KEY_REF_cmap_(vp) (&(vp)->first)
#ifndef CMAP_SIZE_T
#define CMAP_SIZE_T uint32_t
diff --git a/stc/cset.h b/stc/cset.h
index 9cbe6c9e..b4d411a5 100644
--- a/stc/cset.h
+++ b/stc/cset.h
@@ -24,7 +24,49 @@
#define CSET_H_INCLUDED
// Unordered set - implemented as closed hashing with linear probing and no tombstones.
+/*
+#include <stc/cset.h>
+#include <stdio.h>
+
+using_cset(sx, int); // Set of int
+
+int main(void) {
+ cset_sx s = cset_sx_init();
+ cset_sx_insert(&s, 5);
+ cset_sx_insert(&s, 8);
+
+ c_foreach (i, cset_sx, s)
+ printf("set %d\n", *i.ref);
+ cset_sx_del(&s);
+}
+*/
#include "cmap.h"
+/* cset: */
+#define using_cset(...) \
+ c_MACRO_OVERLOAD(using_cset, __VA_ARGS__)
+
+#define using_cset_2(X, Key) \
+ using_cset_4(X, Key, c_default_equals, c_default_hash)
+#define using_cset_4(X, Key, keyEquals, keyHash) \
+ using_cset_6(X, Key, keyEquals, keyHash, c_trivial_del, c_trivial_fromraw)
+#define using_cset_5(X, Key, keyEquals, keyHash, keyDel) \
+ using_cset_6(X, Key, keyEquals, keyHash, keyDel, c_no_clone)
+#define using_cset_6(X, Key, keyEquals, keyHash, keyDel, keyClone) \
+ using_cset_8(X, Key, keyEquals, keyHash, keyDel, keyClone, c_trivial_toraw, Key)
+
+#define using_cset_8(X, Key, keyEqualsRaw, keyHashRaw, keyDel, keyFromRaw, keyToRaw, RawKey) \
+ _using_CHASH(X, cset_, Key, Key, keyEqualsRaw, keyHashRaw, \
+ @@, @@, @@, void, \
+ keyDel, keyFromRaw, keyToRaw, RawKey)
+
+/* cset_str: */
+#define using_cset_str() \
+ _using_CHASH_strkey(str, cset_, cstr_t, @@, @@, @@, void)
+
+#define SET_ONLY_cset_(...) __VA_ARGS__
+#define MAP_ONLY_cset_(...)
+#define KEY_REF_cset_(vp) (vp)
+
#endif
diff --git a/stc/csmap.h b/stc/csmap.h
index a6185ef7..39f1c0a9 100644
--- a/stc/csmap.h
+++ b/stc/csmap.h
@@ -27,17 +27,22 @@
/*
#include <stdio.h>
#include <stc/csmap.h>
-using_csset(i, int); // Set of int
+using_csmap(mx, int, char); // Sorted map<int, char>
int main(void) {
- csset_i s = csset_i_init();
- csset_i_insert(&s, 5);
- csset_i_insert(&s, 8);
- csset_i_insert(&s, 3);
- csset_i_insert(&s, 5);
- c_foreach (k, csset_i, s)
- printf("set %d\n", *k.ref);
- csset_i_del(&s);
+ csmap_mx m = csmap_mx_init();
+ csmap_mx_emplace(&m, 5, 'a');
+ csmap_mx_emplace(&m, 8, 'b');
+ csmap_mx_emplace(&m, 12, 'c');
+
+ csmap_mx_iter_t it = csmap_mx_find(&m, 10); // none
+ char val = csmap_mx_find(&m, 5).ref->second;
+ csmap_mx_emplace_or_assign(&m, 5, 'd'); // update
+ csmap_mx_erase(&m, 8);
+
+ c_foreach (i, csmap_mx, m)
+ printf("map %d: %c\n", i.ref->first, i.ref->second);
+ csmap_mx_del(&m);
}
*/
#include "ccommon.h"
@@ -77,27 +82,7 @@ int main(void) {
c_trivial_del, c_trivial_fromraw, c_trivial_toraw, Mapped, \
keyDel, keyFromRaw, keyToRaw, RawKey)
-/* csset: */
-#define using_csset(...) \
- c_MACRO_OVERLOAD(using_csset, __VA_ARGS__)
-
-#define using_csset_2(X, Key) \
- using_csset_3(X, Key, c_default_compare)
-#define using_csset_3(X, Key, keyCompare) \
- using_csset_5(X, Key, keyCompare, c_trivial_del, c_trivial_fromraw)
-#define using_csset_4(X, Key, keyCompare, keyDel) \
- using_csset_5(X, Key, keyCompare, keyDel, c_no_clone)
-#define using_csset_5(X, Key, keyCompare, keyDel, keyClone) \
- using_csset_7(X, Key, keyCompare, keyDel, keyClone, c_trivial_toraw, Key)
-
-#define using_csset_7(X, Key, keyCompareRaw, keyDel, keyFromRaw, keyToRaw, RawKey) \
- _using_AATREE(X, csset_, Key, Key, keyCompareRaw, \
- @@, @@, @@, void, \
- keyDel, keyFromRaw, keyToRaw, RawKey)
-
-/* csset_str, csmap_str, csmap_strkey, csmap_strval: */
-#define using_csset_str() \
- _using_AATREE_strkey(str, csset_, cstr_t, @@, @@, @@, void)
+/* csmap_str, csmap_strkey, csmap_strval: */
#define using_csmap_str() \
_using_AATREE(str, csmap_, cstr_t, cstr_t, cstr_compare_raw, \
cstr_del, cstr_from, cstr_c_str, const char*, \
@@ -137,11 +122,8 @@ int main(void) {
cstr_del, cstr_from, cstr_c_str, const char*, \
keyDel, keyFromRaw, keyToRaw, RawKey)
-#define SET_ONLY_csset_(...) __VA_ARGS__
#define SET_ONLY_csmap_(...)
-#define MAP_ONLY_csset_(...)
#define MAP_ONLY_csmap_(...) __VA_ARGS__
-#define KEY_REF_csset_(vp) (vp)
#define KEY_REF_csmap_(vp) (&(vp)->first)
#ifndef CSMAP_SIZE_T
#define CSMAP_SIZE_T uint32_t
diff --git a/stc/csset.h b/stc/csset.h
index 24150d52..9f2711c3 100644
--- a/stc/csset.h
+++ b/stc/csset.h
@@ -24,7 +24,51 @@
#define CSSET_H_INCLUDED
// Sorted set - implemented as an AA-tree (balanced binary tree).
+/*
+#include <stc/csset.h>
+#include <stdio.h>
+
+using_csset(i, int); // sorted set of int
+
+int main(void) {
+ csset_i s = csset_i_init();
+ csset_i_insert(&s, 5);
+ csset_i_insert(&s, 8);
+ csset_i_insert(&s, 3);
+ csset_i_insert(&s, 5);
+
+ c_foreach (k, csset_i, s)
+ printf("set %d\n", *k.ref);
+ csset_i_del(&s);
+}
+*/
#include "csmap.h"
+/* csset: */
+#define using_csset(...) \
+ c_MACRO_OVERLOAD(using_csset, __VA_ARGS__)
+
+#define using_csset_2(X, Key) \
+ using_csset_3(X, Key, c_default_compare)
+#define using_csset_3(X, Key, keyCompare) \
+ using_csset_5(X, Key, keyCompare, c_trivial_del, c_trivial_fromraw)
+#define using_csset_4(X, Key, keyCompare, keyDel) \
+ using_csset_5(X, Key, keyCompare, keyDel, c_no_clone)
+#define using_csset_5(X, Key, keyCompare, keyDel, keyClone) \
+ using_csset_7(X, Key, keyCompare, keyDel, keyClone, c_trivial_toraw, Key)
+
+#define using_csset_7(X, Key, keyCompareRaw, keyDel, keyFromRaw, keyToRaw, RawKey) \
+ _using_AATREE(X, csset_, Key, Key, keyCompareRaw, \
+ @@, @@, @@, void, \
+ keyDel, keyFromRaw, keyToRaw, RawKey)
+
+/* csset_str: */
+#define using_csset_str() \
+ _using_AATREE_strkey(str, csset_, cstr_t, @@, @@, @@, void)
+
+#define SET_ONLY_csset_(...) __VA_ARGS__
+#define MAP_ONLY_csset_(...)
+#define KEY_REF_csset_(vp) (vp)
+
#endif