From 00804d9ff488f63468a0bb528c7b807aea7c3ea3 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Mon, 18 Apr 2022 00:44:51 +0200 Subject: Converted all example to use cstr_str(&s) instead of s.str to allow SSO string. Fixed misc warnings. --- benchmarks/build_all.sh | 1 + benchmarks/misc/string_bench.cpp | 2 +- benchmarks/picobench/picobench_cmap.cpp | 11 ++++++----- benchmarks/picobench/picobench_csmap.cpp | 13 +++++++------ examples/arc_containers.c | 6 +++--- examples/astar.c | 6 +++--- examples/books.c | 6 +++--- examples/box.c | 16 ++++++++-------- examples/convert.c | 14 +++++++------- examples/csmap_erase.c | 2 +- examples/csmap_insert.c | 2 +- examples/cstr_match.c | 2 +- examples/demos.c | 30 +++++++++++++++--------------- examples/ex_gauss1.c | 2 +- examples/ex_gauss2.c | 2 +- examples/hashmap.c | 6 +++--- examples/inits.c | 4 ++-- examples/make.sh | 3 ++- examples/mapmap.c | 4 ++-- examples/mmap.c | 2 +- examples/multimap.c | 9 +++++---- examples/music_arc.c | 7 ++++--- examples/new_arr.c | 2 +- examples/new_map.c | 2 +- examples/new_pque.c | 2 +- examples/new_smap.c | 2 +- examples/new_sptr.c | 4 ++-- examples/person_arc.c | 14 +++++++------- examples/phonebook.c | 4 ++-- examples/rawptr_elements.c | 2 +- examples/regex1.c | 4 ++-- examples/replace.c | 20 ++++++++++---------- examples/splitstr.c | 2 +- examples/sview_split.c | 2 +- examples/unordered_set.c | 2 +- examples/utf8replace_c.c | 6 +++--- examples/vikings.c | 4 ++-- examples/words.c | 4 ++-- src/casefold.py | 12 ++++++------ src/cregex_utf8.c | 12 ++++++------ 40 files changed, 128 insertions(+), 122 deletions(-) diff --git a/benchmarks/build_all.sh b/benchmarks/build_all.sh index 348a79dd..fda58f69 100644 --- a/benchmarks/build_all.sh +++ b/benchmarks/build_all.sh @@ -1,5 +1,6 @@ #!/bin/bash cc='g++ -std=c++17' +#cc='g++ -std=c++17 -DSTC_USE_SSO' #cc='clang' #cc='clang -c -DSTC_HEADER' #cc='cl -nologo' diff --git a/benchmarks/misc/string_bench.cpp b/benchmarks/misc/string_bench.cpp index 37db0201..65bf7a0e 100644 --- a/benchmarks/misc/string_bench.cpp +++ b/benchmarks/misc/string_bench.cpp @@ -19,7 +19,7 @@ std::vector read_file(const char* name) c_auto (cstr, line) c_autovar (FILE* f = fopen(name, "r"), fclose(f)) while (cstr_getline(&line, f)) - data.emplace_back(line.str); + data.emplace_back(cstr_str(&line)); return data; } diff --git a/benchmarks/picobench/picobench_cmap.cpp b/benchmarks/picobench/picobench_cmap.cpp index 15ab2aa7..52d219bc 100644 --- a/benchmarks/picobench/picobench_cmap.cpp +++ b/benchmarks/picobench/picobench_cmap.cpp @@ -198,6 +198,7 @@ static void ins_and_access_s(picobench::state& s) static void ins_and_access_cmap_s(picobench::state& s) { cstr str = cstr_with_size(s.arg(), 'x'); + char* buf = cstr_data(&str); size_t result = 0; cmap_str map = cmap_str_init(); cmap_str_max_load_factor(&map, (int)MaxLoadFactor100 / 100.0); @@ -205,12 +206,12 @@ static void ins_and_access_cmap_s(picobench::state& s) picobench::scope scope(s); c_forrange (s.iterations()) { - randomize(str.str, cstr_size(str)); - //if (cstr_size(str) > 30) { printf("%s\n", str.str); exit(0); } - cmap_str_emplace(&map, str.str, str.str); + randomize(buf, s.arg()); + //if (s.arg() > 30) { printf("%s\n", buf); exit(0); } + cmap_str_emplace(&map, buf, buf); - randomize(str.str, cstr_size(str)); - result += cmap_str_erase(&map, str.str); + randomize(buf, s.arg()); + result += cmap_str_erase(&map, buf); } s.set_result(result + cmap_str_size(map)); cstr_drop(&str); diff --git a/benchmarks/picobench/picobench_csmap.cpp b/benchmarks/picobench/picobench_csmap.cpp index 71d54832..be645932 100644 --- a/benchmarks/picobench/picobench_csmap.cpp +++ b/benchmarks/picobench/picobench_csmap.cpp @@ -223,23 +223,24 @@ static void ins_and_access_s(picobench::state& s) static void ins_and_access_csmap_s(picobench::state& s) { cstr str = cstr_with_size(s.arg(), 'x'); + char* buf = cstr_data(&str); size_t result = 0; csmap_str map = csmap_str_init(); picobench::scope scope(s); stc64_srandom(seed); c_forrange (s.iterations()) { - randomize(str.str, cstr_size(str)); - csmap_str_emplace(&map, str.str, str.str); + randomize(buf, s.arg()); + csmap_str_emplace(&map, buf, buf); } stc64_srandom(seed); c_forrange (s.iterations()) { - randomize(str.str, cstr_size(str)); - result += csmap_str_erase(&map, str.str); - /*csmap_str_iter it = csmap_str_find(&map, str.str); + randomize(buf, s.arg()); + result += csmap_str_erase(&map, buf); + /*csmap_str_iter it = csmap_str_find(&map, buf); if (it.ref) { ++result; - csmap_str_erase(&map, it.ref->first.str); + csmap_str_erase(&map, cstr_str(&it.ref->first)); }*/ } s.set_result(result + csmap_str_size(map)); diff --git a/examples/arc_containers.c b/examples/arc_containers.c index ea9395e8..53297270 100644 --- a/examples/arc_containers.c +++ b/examples/arc_containers.c @@ -3,7 +3,7 @@ #define i_type Map #define i_key_str // strings #define i_val int -#define i_keydrop(p) (printf("drop name: %s\n", (p)->str), cstr_drop(p)) +#define i_keydrop(p) (printf("drop name: %s\n", cstr_str(p)), cstr_drop(p)) #include #define i_type Arc // (atomic) ref. counted type @@ -62,13 +62,13 @@ int main() puts("STACKS"); c_foreach (i, Stack, stack) { c_forpair (name, year, Map, *i.ref->get) - printf(" %s:%d", _.name.str, _.year); + printf(" %s:%d", cstr_str(&_.name), _.year); puts(""); } puts("LIST"); c_foreach (i, List, list) { c_forpair (name, year, Map, *i.ref->get) - printf(" %s:%d", _.name.str, _.year); + printf(" %s:%d", cstr_str(&_.name), _.year); puts(""); } } diff --git a/examples/astar.c b/examples/astar.c index ee002b79..bce03716 100644 --- a/examples/astar.c +++ b/examples/astar.c @@ -105,7 +105,7 @@ astar(cstr* maze, int width) point delta = deltas[i]; point next = point_init(current.x + delta.x, current.y + delta.y, width); int new_cost = *csmap_pcost_at(&costs, current); - if (maze->str[point_index(&next)] != '#') + if (cstr_str(maze)[point_index(&next)] != '#') { const csmap_pcost_value *cost = csmap_pcost_get(&costs, next); if (cost == NULL || new_cost < cost->second) @@ -160,8 +160,8 @@ main(void) int width = cstr_find(maze, "\n") + 1; c_autovar (cdeq_point path = astar(&maze, width), cdeq_point_drop(&path)) { - c_foreach (it, cdeq_point, path) maze.str[point_index(it.ref)] = 'x'; - printf("%s", maze.str); + c_foreach (it, cdeq_point, path) cstr_data(&maze)[point_index(it.ref)] = 'x'; + printf("%s", cstr_str(&maze)); } } } diff --git a/examples/books.c b/examples/books.c index 10b5c416..b35f5b36 100644 --- a/examples/books.c +++ b/examples/books.c @@ -44,17 +44,17 @@ int main() c_forrange (i, c_arraylen(to_find)) { const cmap_str_value* b; if ((b = cmap_str_get(&book_reviews, to_find[i]))) - printf("%s: %s\n", b->first.str, b->second.str); + printf("%s: %s\n", cstr_str(&b->first), cstr_str(&b->second)); else printf("%s is unreviewed.\n", to_find[i]); } // Look up the value for a key (will panic if the key is not found). - printf("Review for Jane: %s\n", cmap_str_at(&book_reviews, "Pride and Prejudice")->str); + printf("Review for Jane: %s\n", cstr_str(cmap_str_at(&book_reviews, "Pride and Prejudice"))); // Iterate over everything. c_forpair (book, review, cmap_str, book_reviews) { - printf("%s: \"%s\"\n", _.book.str, _.review.str); + printf("%s: \"%s\"\n", cstr_str(&_.book), cstr_str(&_.review)); } } } diff --git a/examples/box.c b/examples/box.c index 00a092e2..d2d98218 100644 --- a/examples/box.c +++ b/examples/box.c @@ -8,8 +8,8 @@ Person Person_new(const char* name, const char* last) { } int Person_cmp(const Person* a, const Person* b) { - int c = strcmp(a->name.str, b->name.str); - return c ? c : strcmp(a->last.str, b->last.str); + int c = cstr_cmp(&a->name, &b->name); + return c ? c : cstr_cmp(&a->last, &b->last); } Person Person_clone(Person p) { @@ -19,7 +19,7 @@ Person Person_clone(Person p) { } void Person_drop(Person* p) { - printf("drop: %s %s\n", p->name.str, p->last.str); + printf("drop: %s %s\n", cstr_str(&p->name), cstr_str(&p->last)); c_drop(cstr, &p->name, &p->last); } @@ -41,8 +41,8 @@ int main() q = PBox_clone(p); cstr_assign(&q.get->name, "Leland"); - printf("orig: %s %s\n", p.get->name.str, p.get->last.str); - printf("copy: %s %s\n", q.get->name.str, q.get->last.str); + printf("orig: %s %s\n", cstr_str(&p.get->name), cstr_str(&p.get->last)); + printf("copy: %s %s\n", cstr_str(&q.get->name), cstr_str(&q.get->last)); Persons_push_back(&vec, PBox_from(Person_new("Dale", "Cooper"))); Persons_push_back(&vec, PBox_from(Person_new("Audrey", "Home"))); @@ -51,19 +51,19 @@ int main() c_apply(v, Persons_push_back(&vec, PBox_clone(v)), PBox, {p, q}); c_foreach (i, Persons, vec) - printf("%s %s\n", i.ref->get->name.str, i.ref->get->last.str); + printf("%s %s\n", cstr_str(&i.ref->get->name), cstr_str(&i.ref->get->last)); puts(""); // Look-up Audrey! Use a (fake) temporary PBox for lookup. c_autovar (Person a = Person_new("Audrey", "Home"), Person_drop(&a)) { const PBox *v = Persons_get(&vec, a); - if (v) printf("found: %s %s\n", v->get->name.str, v->get->last.str); + if (v) printf("found: %s %s\n", cstr_str(&v->get->name), cstr_str(&v->get->last)); } puts(""); // Alternative to use cbox (when not placed in container). Person *she = c_new(Person, Person_new("Shelly", "Johnson")); - printf("%s %s\n", she->name.str, she->last.str); + printf("%s %s\n", cstr_str(&she->name), cstr_str(&she->last)); c_delete(Person, she); // drop and free puts(""); } diff --git a/examples/convert.c b/examples/convert.c index 8258e1b6..a17e41f6 100644 --- a/examples/convert.c +++ b/examples/convert.c @@ -23,26 +23,26 @@ int main() }); puts("MAP:"); c_foreach (i, cmap_str, map) - printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); + printf(" %s: %s\n", cstr_str(&i.ref->first), cstr_str(&i.ref->second)); puts("\nCLONE MAP:"); mclone = cmap_str_clone(map); c_foreach (i, cmap_str, mclone) - printf(" %s: %s\n", i.ref->first.str, i.ref->second.str); + printf(" %s: %s\n", cstr_str(&i.ref->first), cstr_str(&i.ref->second)); puts("\nCOPY MAP TO VECS:"); c_foreach (i, cmap_str, mclone) { - cvec_str_emplace_back(&keys, i.ref->first.str); - cvec_str_emplace_back(&values, i.ref->second.str); + cvec_str_emplace_back(&keys, cstr_str(&i.ref->first)); + cvec_str_emplace_back(&values, cstr_str(&i.ref->second)); } c_forrange (i, cvec_str_size(keys)) - printf(" %s: %s\n", keys.data[i].str, values.data[i].str); + printf(" %s: %s\n", cstr_str(keys.data + i), cstr_str(values.data + i)); puts("\nCOPY VEC TO LIST:"); c_foreach (i, cvec_str, keys) - clist_str_emplace_back(&list, i.ref->str); + clist_str_emplace_back(&list, cstr_str(i.ref)); c_foreach (i, clist_str, list) - printf(" %s\n", i.ref->str); + printf(" %s\n", cstr_str(i.ref)); } } diff --git a/examples/csmap_erase.c b/examples/csmap_erase.c index 2716ad8f..09d28d78 100644 --- a/examples/csmap_erase.c +++ b/examples/csmap_erase.c @@ -11,7 +11,7 @@ void printmap(mymap m) { c_foreach (elem, mymap, m) - printf(" [%d, %s]", elem.ref->first, elem.ref->second.str); + printf(" [%d, %s]", elem.ref->first, cstr_str(&elem.ref->second)); printf("\nsize() == %" PRIuMAX "\n\n", mymap_size(m)); } diff --git a/examples/csmap_insert.c b/examples/csmap_insert.c index 11217de5..07fba9ed 100644 --- a/examples/csmap_insert.c +++ b/examples/csmap_insert.c @@ -27,7 +27,7 @@ void print_ii(csmap_ii map) { void print_istr(csmap_istr map) { c_foreach (e, csmap_istr, map) - printf("(%d, %s) ", e.ref->first, e.ref->second.str); + printf("(%d, %s) ", e.ref->first, cstr_str(&e.ref->second)); puts(""); } diff --git a/examples/cstr_match.c b/examples/cstr_match.c index 057334f6..08236a0d 100644 --- a/examples/cstr_match.c +++ b/examples/cstr_match.c @@ -5,7 +5,7 @@ int main() { c_autovar (cstr ss = cstr_new("The quick brown fox jumps over the lazy dog.JPG"), cstr_drop(&ss)) { size_t pos = cstr_find_n(ss, "brown", 0, 5); - printf("%" PRIuMAX " [%s]\n", pos, pos == cstr_npos ? "" : &ss.str[pos]); + printf("%" PRIuMAX " [%s]\n", pos, pos == cstr_npos ? "" : cstr_str(&ss) + pos); printf("equals: %d\n", cstr_equals(ss, "The quick brown fox jumps over the lazy dog.JPG")); printf("contains: %d\n", cstr_contains(ss, "umps ove")); printf("starts_with: %d\n", cstr_starts_with(ss, "The quick brown")); diff --git a/examples/demos.c b/examples/demos.c index e91be28a..022735a5 100644 --- a/examples/demos.c +++ b/examples/demos.c @@ -5,26 +5,26 @@ void stringdemo1() printf("\nSTRINGDEMO1\n"); c_autovar (cstr cs = cstr_new("one-nine-three-seven-five"), cstr_drop(&cs)) { - printf("%s.\n", cs.str); + printf("%s.\n", cstr_str(&cs)); cstr_insert(&cs, 3, "-two"); - printf("%s.\n", cs.str); + printf("%s.\n", cstr_str(&cs)); cstr_erase_n(&cs, 7, 5); // -nine - printf("%s.\n", cs.str); + printf("%s.\n", cstr_str(&cs)); cstr_replace(&cs, cstr_find(cs, "seven"), 5, "four"); - printf("%s.\n", cs.str); + printf("%s.\n", cstr_str(&cs)); - cstr_take(&cs, cstr_from_fmt("%s *** %s", cs.str, cs.str)); - printf("%s.\n", cs.str); + cstr_take(&cs, cstr_from_fmt("%s *** %s", cstr_str(&cs), cstr_str(&cs))); + printf("%s.\n", cstr_str(&cs)); - printf("find \"four\": %s\n", cs.str + cstr_find(cs, "four")); + printf("find \"four\": %s\n", cstr_str(&cs) + cstr_find(cs, "four")); // reassign: cstr_assign(&cs, "one two three four five six seven"); cstr_append(&cs, " eight"); - printf("append: %s\n", cs.str); + printf("append: %s\n", cstr_str(&cs)); } } @@ -64,11 +64,11 @@ void vectordemo2() cvec_str_emplace_back(&names, "Joe"); cvec_str_emplace_back(&names, "Chris"); cstr_assign(&names.data[1], "Jane"); // replace Joe - printf("names[1]: %s\n", names.data[1].str); + printf("names[1]: %s\n", cstr_str(&names.data[1])); cvec_str_sort(&names); // Sort the array c_foreach (i, cvec_str, names) - printf("sorted: %s\n", i.ref->str); + printf("sorted: %s\n", cstr_str(i.ref)); } } @@ -152,11 +152,11 @@ void mapdemo2() // iterate the map: for (cmap_si_iter i = cmap_si_begin(&nums); i.ref != cmap_si_end(&nums).ref; cmap_si_next(&i)) - printf("long: %s: %d\n", i.ref->first.str, i.ref->second); + printf("long: %s: %d\n", cstr_str(&i.ref->first), i.ref->second); // or rather use the short form: c_foreach (i, cmap_si, nums) - printf("short: %s: %d\n", i.ref->first.str, i.ref->second); + printf("short: %s: %d\n", cstr_str(&i.ref->first), i.ref->second); } } @@ -173,14 +173,14 @@ void mapdemo3() cmap_str_emplace(&table, "Sunny", "day"); cmap_str_iter it = cmap_str_find(&table, "Make"); c_foreach (i, cmap_str, table) - printf("entry: %s: %s\n", i.ref->first.str, i.ref->second.str); - printf("size %" PRIuMAX ": remove: Make: %s\n", cmap_str_size(table), it.ref->second.str); + printf("entry: %s: %s\n", cstr_str(&i.ref->first), cstr_str(&i.ref->second)); + printf("size %" PRIuMAX ": remove: Make: %s\n", cmap_str_size(table), cstr_str(&it.ref->second)); //cmap_str_erase(&table, "Make"); cmap_str_erase_at(&table, it); printf("size %" PRIuMAX "\n", cmap_str_size(table)); c_foreach (i, cmap_str, table) - printf("entry: %s: %s\n", i.ref->first.str, i.ref->second.str); + printf("entry: %s: %s\n", cstr_str(&i.ref->first), cstr_str(&i.ref->second)); cmap_str_drop(&table); // frees key and value cstrs, and hash table. } diff --git a/examples/ex_gauss1.c b/examples/ex_gauss1.c index 8a39732a..63a4b45e 100644 --- a/examples/ex_gauss1.c +++ b/examples/ex_gauss1.c @@ -54,7 +54,7 @@ int main() size_t n = (size_t) (i.ref->second * StdDev * Scale * 2.5 / (float)N); if (n > 0) { cstr_resize(&bar, n, '*'); - printf("%4d %s\n", i.ref->first, bar.str); + printf("%4d %s\n", i.ref->first, cstr_str(&bar)); } } } diff --git a/examples/ex_gauss2.c b/examples/ex_gauss2.c index 702c8ff3..f2f11a4a 100644 --- a/examples/ex_gauss2.c +++ b/examples/ex_gauss2.c @@ -34,7 +34,7 @@ int main() size_t n = (size_t) (_.count * StdDev * Scale * 2.5 / (float)N); if (n > 0) { cstr_resize(&bar, n, '*'); - printf("%4d %s\n", _.index, bar.str); + printf("%4d %s\n", _.index, cstr_str(&bar)); } } } diff --git a/examples/hashmap.c b/examples/hashmap.c index c3e9afce..e81a0405 100644 --- a/examples/hashmap.c +++ b/examples/hashmap.c @@ -26,14 +26,14 @@ int main(void) { const cmap_str_value* v; if ((v = cmap_str_get(&contacts, "Daniel"))) - printf("Calling Daniel: %s\n", call(v->second.str)); + printf("Calling Daniel: %s\n", call(cstr_str(&v->second))); else printf("Don't have Daniel's number."); cmap_str_emplace(&contacts, "Daniel", "164-6743"); if ((v = cmap_str_get(&contacts, "Ashley"))) - printf("Calling Ashley: %s\n", call(v->second.str)); + printf("Calling Ashley: %s\n", call(cstr_str(&v->second))); else printf("Don't have Ashley's number."); @@ -41,7 +41,7 @@ int main(void) { puts(""); c_forpair (contact, number, cmap_str, contacts) { - printf("Calling %s: %s\n", _.contact.str, call(_.number.str)); + printf("Calling %s: %s\n", cstr_str(&_.contact), call(cstr_str(&_.number))); } puts(""); } diff --git a/examples/inits.c b/examples/inits.c index 3bd7e3b4..97d86389 100644 --- a/examples/inits.c +++ b/examples/inits.c @@ -60,7 +60,7 @@ int main(void) cmap_id_insert(&idnames, 120, cstr_from_fmt("Howdy, -%d-", year)); c_foreach (i, cmap_id, idnames) - printf("%d: %s\n", i.ref->first, i.ref->second.str); + printf("%d: %s\n", i.ref->first, cstr_str(&i.ref->second)); puts(""); } @@ -83,7 +83,7 @@ int main(void) cmap_cnt_emplace(&countries, "Finland", 0).ref->second += 20; c_forpair (country, health, cmap_cnt, countries) - printf("%s: %d\n", _.country.str, _.health); + printf("%s: %d\n", cstr_str(&_.country), _.health); puts(""); } diff --git a/examples/make.sh b/examples/make.sh index 3f2247b6..ef0468c7 100644 --- a/examples/make.sh +++ b/examples/make.sh @@ -1,6 +1,7 @@ #!/bin/bash cc='gcc -s -O2 -Wall -std=c99 -pedantic' -#cc='clang -s -O2 -Wall -std=c99 -pedantic' +#cc='gcc -x c++ -s -O2 -Wall -std=c++20' +#cc='clang -s -O2 -Wall -std=c99 -pedantic -DSTC_USE_SSO' #cc='clang' #cc='clang -c -DSTC_HEADER' #cc='cl -O2 -nologo -W2 -MD' diff --git a/examples/mapmap.c b/examples/mapmap.c index 0d6d2843..7faaffd1 100644 --- a/examples/mapmap.c +++ b/examples/mapmap.c @@ -3,7 +3,7 @@ #define i_type People #define i_key_str #define i_val_str -#define i_keydrop(p) (printf("kdrop: %s\n", p->str), cstr_drop(p)) +#define i_keydrop(p) (printf("kdrop: %s\n", cstr_str(p)), cstr_drop(p)) #include #define i_type Departments @@ -55,7 +55,7 @@ int main(void) c_foreach (i, Departments, map) c_forpair (name, email, People, i.ref->second) - printf("%s: %s - %s\n", i.ref->first.str, _.name.str, _.email.str); + printf("%s: %s - %s\n", cstr_str(&i.ref->first), cstr_str(&_.name), cstr_str(&_.email)); puts(""); printf("found: %d\n", contains(&map, "Nick Denton")); diff --git a/examples/mmap.c b/examples/mmap.c index 289da616..6ffd3a5d 100644 --- a/examples/mmap.c +++ b/examples/mmap.c @@ -17,7 +17,7 @@ void print(const char* lbl, const Multimap mmap) printf("%s ", lbl); c_foreach (e, Multimap, mmap) { c_foreach (s, clist_str, e.ref->second) - printf("{%d,%s} ", e.ref->first, s.ref->str); + printf("{%d,%s} ", e.ref->first, cstr_str(s.ref)); } puts(""); } diff --git a/examples/multimap.c b/examples/multimap.c index 472af8aa..08fd8ad5 100644 --- a/examples/multimap.c +++ b/examples/multimap.c @@ -70,7 +70,7 @@ int main() { const clist_OL empty = clist_OL_init(); - for (int i = 0; i < c_arraylen(ol_data); ++i) + for (size_t i = 0; i < c_arraylen(ol_data); ++i) { struct OlympicsData* d = &ol_data[i]; OlympicLocation loc = {.year = d->year, @@ -90,9 +90,10 @@ int main() { // Loop the locations for a country sorted by year c_foreach (loc, clist_OL, country.ref->second) - printf("%s: %d, %s, %s\n", country.ref->first.str, loc.ref->year, - loc.ref->city.str, - loc.ref->date.str); + printf("%s: %d, %s, %s\n", cstr_str(&country.ref->first), + loc.ref->year, + cstr_str(&loc.ref->city), + cstr_str(&loc.ref->date)); } } } diff --git a/examples/music_arc.c b/examples/music_arc.c index b2661ffe..b8525022 100644 --- a/examples/music_arc.c +++ b/examples/music_arc.c @@ -13,7 +13,7 @@ Song Song_new(const char* artist, const char* title) { return (Song){cstr_from(artist), cstr_from(title)}; } void Song_drop(Song* s) { - printf("drop: %s\n", s->title.str); + printf("drop: %s\n", cstr_str(&s->title)); c_drop(cstr, &s->artist, &s->title); } @@ -47,8 +47,9 @@ void example3() }); c_foreach (s, SongVec, vec2) - printf("%s - %s: refs %lu\n", s.ref->get->artist.str, s.ref->get->title.str, - *s.ref->use_count); + printf("%s - %s: refs %lu\n", cstr_str(&s.ref->get->artist), + cstr_str(&s.ref->get->title), + *s.ref->use_count); } } diff --git a/examples/new_arr.c b/examples/new_arr.c index a593536e..b44474c9 100644 --- a/examples/new_arr.c +++ b/examples/new_arr.c @@ -56,6 +56,6 @@ int main() cstr_assign(&text2d.data[4][0], "world"); c_foreach (i, carr2_str, text2d) - printf("line: %s\n", i.ref->str); + printf("line: %s\n", cstr_str(i.ref)); } } diff --git a/examples/new_map.c b/examples/new_map.c index 97fce008..ec37a846 100644 --- a/examples/new_map.c +++ b/examples/new_map.c @@ -66,6 +66,6 @@ int main() "So long, friend", }); c_foreach (i, cset_str, sset) - printf(" %s\n", i.ref->str); + printf(" %s\n", cstr_str(i.ref)); } } diff --git a/examples/new_pque.c b/examples/new_pque.c index 1485e630..79e895d8 100644 --- a/examples/new_pque.c +++ b/examples/new_pque.c @@ -58,7 +58,7 @@ int main() cpque_int_push(&ique, 123); cpque_int_push(&ique, 321); // print - for (int i=0; iname.str, p->last.str); + printf("drop: %s %s\n", cstr_str(&p->name), cstr_str(&p->last)); c_drop(cstr, &p->name, &p->last); } @@ -37,7 +37,7 @@ int main(void) { q = carc_person_clone(p); r = carc_person_clone(p); s = carc_person_from(Person_clone(*p.get)); // deep copy - printf("%s %s. uses: %lu\n", r.get->name.str, s.get->last.str, *p.use_count); + printf("%s %s. uses: %lu\n", cstr_str(&r.get->name), cstr_str(&s.get->last), *p.use_count); } c_auto (cstack_iptr, stk) { diff --git a/examples/person_arc.c b/examples/person_arc.c index e668cda6..2fb51be5 100644 --- a/examples/person_arc.c +++ b/examples/person_arc.c @@ -8,8 +8,8 @@ Person Person_new(const char* name, const char* last) { } int Person_cmp(const Person* a, const Person* b) { - int c = strcmp(a->name.str, b->name.str); - return c ? c : strcmp(a->last.str, b->last.str); + int c = cstr_cmp(&a->name, &b->name); + return c ? c : cstr_cmp(&a->last, &b->last); } Person Person_clone(Person p) { @@ -19,7 +19,7 @@ Person Person_clone(Person p) { } void Person_drop(Person* p) { - printf("drop: %s %s\n", p->name.str, p->last.str); + printf("drop: %s %s\n", cstr_str(&p->name), cstr_str(&p->last)); c_drop(cstr, &p->name, &p->last); } @@ -43,8 +43,8 @@ int main() q = PSPtr_from(Person_clone(*p.get)); cstr_assign(&q.get->name, "Leland"); - printf("orig: %s %s\n", p.get->name.str, p.get->last.str); - printf("copy: %s %s\n", q.get->name.str, q.get->last.str); + printf("orig: %s %s\n", cstr_str(&p.get->name), cstr_str(&p.get->last)); + printf("copy: %s %s\n", cstr_str(&q.get->name), cstr_str(&q.get->last)); Persons_push_back(&vec, PSPtr_from(Person_new("Dale", "Cooper"))); Persons_push_back(&vec, PSPtr_from(Person_new("Audrey", "Home"))); @@ -53,13 +53,13 @@ int main() c_apply(v, Persons_push_back(&vec, PSPtr_clone(v)), PSPtr, {p, q}); c_foreach (i, Persons, vec) - printf("%s %s\n", i.ref->get->name.str, i.ref->get->last.str); + printf("%s %s\n", cstr_str(&i.ref->get->name), cstr_str(&i.ref->get->last)); puts(""); // Look-up Audrey! c_autovar (Person a = Person_new("Audrey", "Home"), Person_drop(&a)) { const PSPtr *v = Persons_get(&vec, a); - if (v) printf("found: %s %s\n", v->get->name.str, v->get->last.str); + if (v) printf("found: %s %s\n", cstr_str(&v->get->name), cstr_str(&v->get->last)); } puts(""); diff --git a/examples/phonebook.c b/examples/phonebook.c index fff84bec..b00a49a8 100644 --- a/examples/phonebook.c +++ b/examples/phonebook.c @@ -34,7 +34,7 @@ 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); + printf("%s\t- %s\n", cstr_str(&i.ref->first), cstr_str(&i.ref->second)); } int main(int argc, char **argv) @@ -42,7 +42,7 @@ int main(int argc, char **argv) c_auto (cset_str, names) { c_apply(v, cset_str_emplace(&names, v), const char*, {"Hello", "Cool", "True"}); - c_foreach (i, cset_str, names) printf("%s ", i.ref->str); + c_foreach (i, cset_str, names) printf("%s ", cstr_str(i.ref)); puts(""); } diff --git a/examples/rawptr_elements.c b/examples/rawptr_elements.c index 483e7c9a..8f7dd4de 100644 --- a/examples/rawptr_elements.c +++ b/examples/rawptr_elements.c @@ -57,6 +57,6 @@ int main() cmap_str_emplace(&map, "goodbye", 400); c_forpair (name, number, cmap_str, map) - printf("%s: %" PRIdMAX "\n", _.name.str, *_.number); + printf("%s: %" PRIdMAX "\n", cstr_str(&_.name), *_.number); } } diff --git a/examples/regex1.c b/examples/regex1.c index e244c984..23a28f08 100644 --- a/examples/regex1.c +++ b/examples/regex1.c @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) if (cstr_equals(input, "q")) break; - if (cregex_find(&float_expr, input.str, 0, NULL, 0) > 0) + if (cregex_find(&float_expr, cstr_str(&input), 0, NULL, 0) > 0) printf("Input is a float\n"); else printf("Invalid input : Not a float\n"); @@ -29,4 +29,4 @@ int main(int argc, char* argv[]) } } -#include "../src/cregex.c" \ No newline at end of file +#include "../src/cregex.c" diff --git a/examples/replace.c b/examples/replace.c index c425e4f8..a5bcf4d3 100644 --- a/examples/replace.c +++ b/examples/replace.c @@ -10,23 +10,23 @@ int main () // replace signatures used in the same order as described above: - // Ustring positions: 0123456789*123456789*12345 - cstr s = cstr_from(base); // "this is a test string." + // Ustring positions: 0123456789*123456789*12345 + cstr s = cstr_from(base); // "this is a test string." cstr m = cstr_clone(s); c_autodefer (cstr_drop(&s), cstr_drop(&m)) { - cstr_append(&m, m.str); - cstr_append(&m, m.str); - printf("%s\n", m.str); + cstr_append(&m, cstr_str(&m)); + cstr_append(&m, cstr_str(&m)); + printf("%s\n", cstr_str(&m)); cstr_replace(&s, 9, 5, s2); // "this is an example string." (1) - printf("(1) %s\n", s.str); + printf("(1) %s\n", cstr_str(&s)); cstr_replace_n(&s, 19, 6, s3+7, 6); // "this is an example phrase." (2) - printf("(2) %s\n", s.str); + printf("(2) %s\n", cstr_str(&s)); cstr_replace(&s, 8, 10, "just a"); // "this is just a phrase." (3) - printf("(3) %s\n", s.str); + printf("(3) %s\n", cstr_str(&s)); cstr_replace_n(&s, 8, 6,"a shorty", 7); // "this is a short phrase." (4) - printf("(4) %s\n", s.str); + printf("(4) %s\n", cstr_str(&s)); cstr_replace(&s, 22, 1, "!!!"); // "this is a short phrase!!!" (5) - printf("(5) %s\n", s.str); + printf("(5) %s\n", cstr_str(&s)); } } diff --git a/examples/splitstr.c b/examples/splitstr.c index 35fe3cfa..427c61c8 100644 --- a/examples/splitstr.c +++ b/examples/splitstr.c @@ -32,5 +32,5 @@ int main() c_autovar (cvec_str v = string_split(c_sv("Split,this,,string,now,"), c_sv(",")), cvec_str_drop(&v)) c_foreach (i, cvec_str, v) - printf("[%s]\n", i.ref->str); + printf("[%s]\n", cstr_str(i.ref)); } diff --git a/examples/sview_split.c b/examples/sview_split.c index 0db175ce..3e3c584b 100644 --- a/examples/sview_split.c +++ b/examples/sview_split.c @@ -15,6 +15,6 @@ int main() c_auto (cstr, y, m, d) { y = cstr_from_sv(year), m = cstr_from_sv(month), d = cstr_from_sv(day); - printf("%s, %s, %s\n", y.str, m.str, d.str); + printf("%s, %s, %s\n", cstr_str(&y), cstr_str(&m), cstr_str(&d)); } } diff --git a/examples/unordered_set.c b/examples/unordered_set.c index f4e37cf8..2decb88c 100644 --- a/examples/unordered_set.c +++ b/examples/unordered_set.c @@ -36,6 +36,6 @@ int main() // content printf("All elements :\n"); c_foreach (itr, cset_str, stringSet) - printf("%s\n", itr.ref->str); + printf("%s\n", cstr_str(itr.ref)); } } diff --git a/examples/utf8replace_c.c b/examples/utf8replace_c.c index 49680ecd..5ca51d22 100644 --- a/examples/utf8replace_c.c +++ b/examples/utf8replace_c.c @@ -5,14 +5,14 @@ int main() { c_auto (cstr, hello) { hello = cstr_new("hell😀 world"); - printf("%s\n", hello.str); + printf("%s\n", cstr_str(&hello)); cstr_replace_sv( &hello, - utf8_substr(hello.str, 4, 1), + utf8_substr(cstr_str(&hello), 4, 1), c_sv("🐨") ); - printf("%s\n", hello.str); + printf("%s\n", cstr_str(&hello)); csview sv = csview_from_s(&hello); c_foreach (c, csview, sv) diff --git a/examples/vikings.c b/examples/vikings.c index 943b1f36..b093ff9b 100644 --- a/examples/vikings.c +++ b/examples/vikings.c @@ -30,7 +30,7 @@ static inline Viking Viking_from(RViking raw) { // note: parameter is by value return c_make(Viking){cstr_from(raw.name), cstr_from(raw.country)}; } static inline RViking Viking_toraw(const Viking* vk) { - return c_make(RViking){vk->name.str, vk->country.str}; + return c_make(RViking){cstr_str(&vk->name), cstr_str(&vk->country)}; } // With this in place, we define the Viking => int hash map type: @@ -63,7 +63,7 @@ int main() Vikings_emplace(&vikings, einar, 0).ref->second += 5; // add 5 more to Einar c_forpair (viking, hp, Vikings, vikings) { - printf("%s of %s has %d hp\n", _.viking.name.str, _.viking.country.str, _.hp); + printf("%s of %s has %d hp\n", cstr_str(&_.viking.name), cstr_str(&_.viking.country), _.hp); } } } diff --git a/examples/words.c b/examples/words.c index 852207a9..28de2638 100644 --- a/examples/words.c +++ b/examples/words.c @@ -19,12 +19,12 @@ int main1() }); c_foreach (w, cvec_str, words) { - cmap_str_emplace(&word_map, w.ref->str, 0).ref->second += 1; + cmap_str_emplace(&word_map, cstr_str(w.ref), 0).ref->second += 1; } c_foreach (i, cmap_str, word_map) { printf("%d occurrences of word '%s'\n", - i.ref->second, i.ref->first.str); + i.ref->second, cstr_str(&i.ref->first)); } } return 0; diff --git a/src/casefold.py b/src/casefold.py index 82d19853..951f3bf6 100644 --- a/src/casefold.py +++ b/src/casefold.py @@ -150,7 +150,7 @@ if __name__ == "__main__": print(r''' uint32_t utf8_tolower(uint32_t c) { - for (int i=0; i < sizeof casefold/sizeof *casefold; ++i) { + for (size_t i=0; i < sizeof casefold/sizeof *casefold; ++i) { if (c <= casefold[i].c1) { if (c < casefold[i].c0) return c; int d = casefold[i].m1 - casefold[i].c1; @@ -162,11 +162,11 @@ uint32_t utf8_tolower(uint32_t c) { } uint32_t utf8_toupper(uint32_t c) { - for (int i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { + for (size_t i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { struct CaseFold cfold = casefold[cfold_low[i]]; if (c <= cfold.m1) { int d = cfold.m1 - cfold.c1; - if (c < cfold.c0 + d) return c; + if (c < (uint32_t)(cfold.c0 + d)) return c; if (d == 1) return c - ((cfold.m1 & 1) == (c & 1)); return c - d; } @@ -185,7 +185,7 @@ bool utf8_islower(uint32_t c) { bool utf8_isspace(uint32_t c) { static uint16_t t[] = {0x20, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x85, 0xA0, 0x1680, 0x2028, 0x2029, 0x202F, 0x205F, 0x3000}; - for (int i=0; i= 0x2000) & (c <= 0x200A); } @@ -198,7 +198,7 @@ bool utf8_isdigit(uint32_t c) { bool utf8_isxdigit(uint32_t c) { static uint16_t t[] = {0x30, 0x39, 0x41, 0x46, 0x61, 0x66, 0xFF10, 0xFF19, 0xFF21, 0xFF26, 0xFF41, 0xFF46}; - for (int i=1; i= t[i - 1]; return false; } @@ -218,7 +218,7 @@ bool utf8_isalpha(uint32_t c) { #ifdef TEST int main() { - for (int i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) + for (size_t i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { char x[3][5]={0}; uint32_t a = casefold[i].c0; diff --git a/src/cregex_utf8.c b/src/cregex_utf8.c index ad4176ba..69be6315 100644 --- a/src/cregex_utf8.c +++ b/src/cregex_utf8.c @@ -63,7 +63,7 @@ static uint8_t cfold_low[] = { }; uint32_t utf8_tolower(uint32_t c) { - for (int i=0; i < sizeof casefold/sizeof *casefold; ++i) { + for (size_t i=0; i < sizeof casefold/sizeof *casefold; ++i) { if (c <= casefold[i].c1) { if (c < casefold[i].c0) return c; int d = casefold[i].m1 - casefold[i].c1; @@ -75,11 +75,11 @@ uint32_t utf8_tolower(uint32_t c) { } uint32_t utf8_toupper(uint32_t c) { - for (int i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { + for (size_t i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { struct CaseFold cfold = casefold[cfold_low[i]]; if (c <= cfold.m1) { int d = cfold.m1 - cfold.c1; - if (c < cfold.c0 + d) return c; + if (c < (uint32_t)(cfold.c0 + d)) return c; if (d == 1) return c - ((cfold.m1 & 1) == (c & 1)); return c - d; } @@ -98,7 +98,7 @@ bool utf8_islower(uint32_t c) { bool utf8_isspace(uint32_t c) { static uint16_t t[] = {0x20, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x85, 0xA0, 0x1680, 0x2028, 0x2029, 0x202F, 0x205F, 0x3000}; - for (int i=0; i= 0x2000) & (c <= 0x200A); } @@ -111,7 +111,7 @@ bool utf8_isdigit(uint32_t c) { bool utf8_isxdigit(uint32_t c) { static uint16_t t[] = {0x30, 0x39, 0x41, 0x46, 0x61, 0x66, 0xFF10, 0xFF19, 0xFF21, 0xFF26, 0xFF41, 0xFF46}; - for (int i=1; i= t[i - 1]; return false; } @@ -131,7 +131,7 @@ bool utf8_isalpha(uint32_t c) { #ifdef TEST int main() { - for (int i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) + for (size_t i=0; i < sizeof cfold_low/sizeof *cfold_low; ++i) { char x[3][5]={0}; uint32_t a = casefold[i].c0; -- cgit v1.2.3