From 314a41be6b39b6c5967d79555dbf018dbc7eb5f6 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Sun, 22 May 2022 20:45:31 +0200 Subject: Rewrote cbits to make it dual: fixed-sized or dynamically sized by adding optional i_len template parameter. Renamed cbits_set_values() to cbits_set_pattern(). Added example bits2.c --- examples/bits.c | 26 +++++++++++++------------- examples/bits2.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 examples/bits2.c (limited to 'examples') diff --git a/examples/bits.c b/examples/bits.c index 680b3501..bd2a9f03 100644 --- a/examples/bits.c +++ b/examples/bits.c @@ -4,8 +4,8 @@ int main() { c_autovar (cbits set = cbits_with_size(23, true), cbits_drop(&set)) { - printf("count %" PRIuMAX ", %" PRIuMAX "\n", cbits_count(set), set.size); - cbits s1 = cbits_new("1110100110111"); + printf("count %" PRIuMAX ", %" PRIuMAX "\n", cbits_count(set), cbits_size(set)); + cbits s1 = cbits_from("1110100110111"); char buf[256]; cbits_to_str(s1, buf, 0, -1); printf("buf: %s: %" PRIuMAX "\n", buf, cbits_count(s1)); @@ -13,11 +13,11 @@ int main() cbits_reset(&set, 9); cbits_resize(&set, 43, false); - c_autobuf (str, char, set.size + 1) + c_autobuf (str, char, cbits_size(set) + 1) printf(" str: %s\n", cbits_to_str(set, str, 0, -1)); - printf("%4" PRIuMAX ": ", set.size); - c_forrange (i, set.size) + printf("%4" PRIuMAX ": ", cbits_size(set)); + c_forrange (i, cbits_size(set)) printf("%d", cbits_test(set, i)); puts(""); @@ -26,13 +26,13 @@ int main() cbits_resize(&set, 93, false); cbits_resize(&set, 102, true); cbits_set_value(&set, 99, false); - printf("%4" PRIuMAX ": ", set.size); - c_forrange (i, set.size) + printf("%4" PRIuMAX ": ", cbits_size(set)); + c_forrange (i, cbits_size(set)) printf("%d", cbits_test(set, i)); puts("\nIterate:"); - printf("%4" PRIuMAX ": ", set.size); - c_forrange (i, set.size) + printf("%4" PRIuMAX ": ", cbits_size(set)); + c_forrange (i, cbits_size(set)) printf("%d", cbits_test(set, i)); puts(""); @@ -42,19 +42,19 @@ int main() cbits_set(&s2, 17); cbits_set(&s2, 18); printf(" new: "); - c_forrange (i, s2.size) + c_forrange (i, cbits_size(s2)) printf("%d", cbits_test(s2, i)); puts(""); printf(" xor: "); cbits_xor(&set, s2); - c_forrange (i, set.size) + c_forrange (i, cbits_size(set)) printf("%d", cbits_test(set, i)); puts(""); cbits_set_all(&set, false); - printf("%4" PRIuMAX ": ", set.size); - c_forrange (i, set.size) + printf("%4" PRIuMAX ": ", cbits_size(set)); + c_forrange (i, cbits_size(set)) printf("%d", cbits_test(set, i)); puts(""); } diff --git a/examples/bits2.c b/examples/bits2.c new file mode 100644 index 00000000..e9202efc --- /dev/null +++ b/examples/bits2.c @@ -0,0 +1,42 @@ +#include +// Example of static sized (stack allocated) bitsets + +#define i_type Bits +#define i_len 80 // enable fixed bitset on the stack +#include + +int main() +{ + Bits s1 = Bits_from("1110100110111"); + + printf("size %" PRIuMAX "\n", Bits_size(s1)); + char buf[256]; + Bits_to_str(s1, buf, 0, -1); + printf("buf: %s: count=%" PRIuMAX "\n", buf, Bits_count(s1)); + + Bits_reset(&s1, 8); + c_autobuf (str, char, Bits_size(s1) + 1) + printf(" s1: %s\n", Bits_to_str(s1, str, 0, -1)); + + Bits s2 = Bits_clone(s1); + + Bits_flip_all(&s2); + Bits_reset(&s2, 66); + Bits_reset(&s2, 67); + printf(" s2: "); + c_forrange (i, Bits_size(s2)) + printf("%d", Bits_test(s2, i)); + puts(""); + + printf("xor: "); + Bits_xor(&s1, s2); + c_forrange (i, Bits_size(s1)) + printf("%d", Bits_test(s1, i)); + puts(""); + + printf("all: "); + Bits_set_pattern(&s1, 0x3333333333333333); + c_forrange (i, Bits_size(s1)) + printf("%d", Bits_test(s1, i)); + puts(""); +} -- cgit v1.2.3