diff options
| -rw-r--r-- | README.md | 16 | ||||
| -rw-r--r-- | docs/ccommon_api.md | 13 | ||||
| -rw-r--r-- | include/stc/algo/crange.h | 12 | ||||
| -rw-r--r-- | include/stc/ccommon.h | 4 | ||||
| -rw-r--r-- | misc/examples/forfilter.c | 4 | ||||
| -rw-r--r-- | misc/examples/prime.c | 2 |
6 files changed, 28 insertions, 23 deletions
@@ -3,7 +3,7 @@ STC - Smart Template Containers =============================== -### [Version 4.3 RC2](#version-history) +### [Version 4.3 RC3](#version-history) --- Description @@ -613,10 +613,20 @@ STC is generally very memory efficient. Memory usage for the different container # Version History ## Version 4.3 -- algo/coroutine.h much improved with new API and more features. +- Some breaking changes. +- coroutines: much improved with some new API and added features. +- cspan: Support for column-major (fortran order) multidim spans and transposed views. +- Removed default comparison for clist, cvec and cdeq (as with cstack and cqueue). + - Using i_val_str, i_valclass, i_valboxed still expects comparisons defined. + - Define i_native_cmp to enable built-in i_val types comparisons (<, ==). +- cstr and csview are now shared linked by default. Static linking by defining i_static. - New cdeq and cqueue implementation(s), using circular buffer. -- Removed deprecated uppercase flow-control macro names. +- Renamed i_extern => i_import. + - Define i_import before #include <stc/cstr.h> will also define utf8 case conversions. + - Define i_import before #include <stc/cregex.h> will also define cstr + utf8 tables. +- Renamed c_make() => c_init() macro for initialization lists. - Removed deprecated crandom.h. Use crand.h with new API. +- Removed deprecated uppercase flow-control macro names. - Improved default string hash function. ## Version 4.2 diff --git a/docs/ccommon_api.md b/docs/ccommon_api.md index d39f6de6..f21f2eaf 100644 --- a/docs/ccommon_api.md +++ b/docs/ccommon_api.md @@ -82,16 +82,16 @@ c_forrange (i, 30, 0, -5) printf(" %lld", i); ### crange A number sequence generator type, similar to [boost::irange](https://www.boost.org/doc/libs/release/libs/range/doc/html/range/reference/ranges/irange.html). The **crange_value** type is `long long`. Below *start*, *stop*, and *step* are of type *crange_value*: ```c -crange crange_init(stop); // will generate 0, 1, ..., stop-1 -crange crange_init(start, stop); // will generate start, start+1, ... stop-1 -crange crange_init(start, stop, step); // will generate start, start+step, ... upto-not-including stop +crange crange_make(stop); // will generate 0, 1, ..., stop-1 +crange crange_make(start, stop); // will generate start, start+1, ... stop-1 +crange crange_make(start, stop, step); // will generate start, start+step, ... upto-not-including stop // note that step may be negative. crange_iter crange_begin(crange* self); crange_iter crange_end(crange* self); void crange_next(crange_iter* it); // 1. All primes less than 32: -crange r1 = crange_init(3, 32, 2); +crange r1 = crange_make(3, 32, 2); printf("2"); // first prime c_forfilter (i, crange, r1, isPrime(*i.ref)) printf(" %lld", *i.ref); @@ -99,7 +99,7 @@ c_forfilter (i, crange, r1, isPrime(*i.ref)) // 2. The first 11 primes: printf("2"); -crange range = crange_init(3, INT64_MAX, 2); +crange range = crange_make(3, INT64_MAX, 2); c_forfilter (i, crange, range, isPrime(*i.ref) && c_flt_take(10) @@ -140,7 +140,7 @@ bool isPrime(long long i) { int main() { // Get 10 prime numbers starting from 1000. Skip the first 15 primes, // then select every 25th prime (including the initial). - crange R = crange_init(1001, INT64_MAX, 2); // 1001, 1003, ... + crange R = crange_make(1001, INT64_MAX, 2); // 1001, 1003, ... c_forfilter (i, crange, R, isPrime(*i.ref) && @@ -171,7 +171,6 @@ Make any container from an initializer list: ... // Initializes with const char*, internally converted to cstr! cset_str myset = c_init(cset_str, {"This", "is", "the", "story"}); -cset_str myset2 = c_clone(myset); int x = 7, y = 8; cmap_int mymap = c_init(cmap_int, { {1, 2}, {3, 4}, {5, 6}, {x, y} }); diff --git a/include/stc/algo/crange.h b/include/stc/algo/crange.h index 34ed541b..45ef53a1 100644 --- a/include/stc/algo/crange.h +++ b/include/stc/algo/crange.h @@ -27,14 +27,14 @@ int main() { - crange r1 = crange_init(80, 90); + crange r1 = crange_make(80, 90); c_foreach (i, crange, r1) printf(" %lld", *i.ref); puts(""); // use a temporary crange object. int a = 100, b = INT32_MAX; - crange r2 = crange_init(a, b, 8); + crange r2 = crange_make(a, b, 8); c_forfilter (i, crange, r2, c_flt_skip(i, 10) && c_flt_take(i, 3)) @@ -51,11 +51,11 @@ typedef long long crange_value; typedef struct { crange_value start, end, step, value; } crange; typedef struct { crange_value *ref, end, step; } crange_iter; -#define crange_init(...) c_MACRO_OVERLOAD(crange_init, __VA_ARGS__) -#define crange_init_1(stop) crange_init_3(0, stop, 1) -#define crange_init_2(start, stop) crange_init_3(start, stop, 1) +#define crange_make(...) c_MACRO_OVERLOAD(crange_make, __VA_ARGS__) +#define crange_make_1(stop) crange_make_3(0, stop, 1) +#define crange_make_2(start, stop) crange_make_3(start, stop, 1) -STC_INLINE crange crange_init_3(crange_value start, crange_value stop, crange_value step) +STC_INLINE crange crange_make_3(crange_value start, crange_value stop, crange_value step) { crange r = {start, stop - (step > 0), step}; return r; } STC_INLINE crange_iter crange_begin(crange* self) diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h index 0cce1610..d6da8734 100644 --- a/include/stc/ccommon.h +++ b/include/stc/ccommon.h @@ -241,8 +241,4 @@ STC_INLINE intptr_t cnextpow2(intptr_t n) { asm("mulq %3" : "=a"(*(lo)), "=d"(*(hi)) : "a"(a), "rm"(b)) #endif -// [deprecated]: -#define c_make(...) c_init(__VA_ARGS__) -#define cspan_make(...) cspan_init(__VA_ARGS__) -#define crange_make(...) crange_init(__VA_ARGS__) #endif // CCOMMON_H_INCLUDED diff --git a/misc/examples/forfilter.c b/misc/examples/forfilter.c index d39693b5..7e3c4c9c 100644 --- a/misc/examples/forfilter.c +++ b/misc/examples/forfilter.c @@ -55,7 +55,7 @@ fn main() { void demo2(void) { IVec vector = {0}; - crange r = crange_init(INT64_MAX); + crange r = crange_make(INT64_MAX); c_forfilter (x, crange, r, c_flt_skipwhile(x, *x.ref != 11) && (*x.ref % 2) != 0 && @@ -125,7 +125,7 @@ void demo5(void) { #define flt_even(i) ((*i.ref & 1) == 0) #define flt_mid_decade(i) ((*i.ref % 10) != 0) - crange R = crange_init(1963, INT32_MAX); + crange R = crange_make(1963, INT32_MAX); c_forfilter (i, crange, R, c_flt_skip(i,15) && diff --git a/misc/examples/prime.c b/misc/examples/prime.c index 34fa144c..cb3b095a 100644 --- a/misc/examples/prime.c +++ b/misc/examples/prime.c @@ -41,7 +41,7 @@ int main(void) puts("\n"); puts("Show the last 50 primes using a temporary crange generator:"); - crange range = crange_init(n - 1, 0, -2); + crange range = crange_make(n - 1, 0, -2); c_forfilter (i, crange, range, cbits_test(&primes, *i.ref/2) && |
