From 209bfe53ddea2e2d12b45996245babcdec5cdded Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Sun, 16 Aug 2020 13:56:53 +0200 Subject: Fixed comparison in inits.c. Added iterator in bits.c example. --- examples/bits.c | 9 +++++---- examples/inits.c | 20 ++++++++++++-------- stc/cbitset.h | 8 ++++---- stc/cdefs.h | 3 +-- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/examples/bits.c b/examples/bits.c index c54c02fd..d3554033 100644 --- a/examples/bits.c +++ b/examples/bits.c @@ -22,13 +22,14 @@ int main() { cbitset_resize(&set, 102, true); cbitset_set_value(&set, 99, false); printf("%4zu: ", set.size); + for (int i=0; i cstr_t declare_cmap_str(cnt, int); typedef struct {int x, y;} ipair_t; -declare_cvec(ip, ipair_t, c_default_destroy, c_mem_compare); -declare_clist(ip, ipair_t, c_default_destroy, c_mem_compare); +inline static int ipair_compare(const ipair_t* a, const ipair_t* b) { + int c = c_default_compare(&a->x, &b->x); + return c != 0 ? c : c_default_compare(&a->y, &b->y); +} +declare_cvec(ip, ipair_t, c_default_destroy, ipair_compare); +declare_clist(ip, ipair_t, c_default_destroy, ipair_compare); declare_cvec(f, float); declare_cvec_pqueue(f, >); @@ -82,12 +86,12 @@ int main(void) { cvec_ip pairs1 = cvec_init; c_push(&pairs1, cvec_ip, c_items( - {1, 2}, - {3, 4}, {5, 6}, + {3, 4}, + {1, 2}, {7, 8}, )); - + cvec_ip_sort(&pairs1); c_foreach (i, cvec_ip, pairs1) printf("(%d %d) ", i.item->x, i.item->y); puts(""); @@ -97,12 +101,12 @@ int main(void) { clist_ip pairs2 = clist_init; c_push(&pairs2, clist_ip, c_items( - {1, 2}, - {3, 4}, {5, 6}, + {3, 4}, + {1, 2}, {7, 8}, )); - + clist_ip_sort(&pairs2); c_foreach (i, clist_ip, pairs2) printf("(%d %d) ", i.item->value.x, i.item->value.y); puts(""); diff --git a/stc/cbitset.h b/stc/cbitset.h index a88b1b86..4736f329 100644 --- a/stc/cbitset.h +++ b/stc/cbitset.h @@ -147,13 +147,13 @@ STC_INLINE cbitset_t cbitset_not(cbitset_t s1) { cbitset_flip_all(&set); return set; } -struct cbitset_iter; -typedef bool(*cbitset_cb)(struct cbitset_iter); -typedef struct cbitset_iter { +typedef struct cbitset_iter cbitset_iter_t; +typedef bool(*cbitset_cb)(cbitset_iter_t); +struct cbitset_iter { cbitset_t *_bs; cbitset_cb item, end; size_t pos; -} cbitset_iter_t; +}; STC_INLINE bool cbitset_item(cbitset_iter_t it) { return cbitset_test(*it._bs, it.pos); diff --git a/stc/cdefs.h b/stc/cdefs.h index f9867bce..5fc9cfc3 100644 --- a/stc/cdefs.h +++ b/stc/cdefs.h @@ -70,8 +70,7 @@ #define c_default_from_raw(x) (x) #define c_default_to_raw(ptr) (*(ptr)) #define c_no_compare(x, y) (0) -#define c_mem_compare(x, y) memcmp(x, y, sizeof(*(y))) -#define c_mem_equals(x, y) (c_mem_compare(x, y) == 0) +#define c_mem_equals(x, y) (memcmp(x, y, sizeof(*(y))) == 0) #define c_default_equals(x, y) (*(x) == *(y)) #define c_default_less(x, y) (*(x) < *(y)) #define c_compare(less, x, y) (less(x, y) ? -1 : less(y, x)) -- cgit v1.2.3