diff options
| author | Tyge Løvset <[email protected]> | 2023-03-01 14:36:38 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2023-03-01 14:36:38 +0100 |
| commit | 78a7e85535fd02e643bf98103223d4218e80133f (patch) | |
| tree | be22b46aaa7ac48b29125863d27db591cf12dcdf /misc/examples/forfilter.c | |
| parent | 8fdcfbf621b5e8c1298a89579594db0817adce26 (diff) | |
| download | STC-modified-78a7e85535fd02e643bf98103223d4218e80133f.tar.gz STC-modified-78a7e85535fd02e643bf98103223d4218e80133f.zip | |
Moved algorithm examples to algo folder.
Diffstat (limited to 'misc/examples/forfilter.c')
| -rw-r--r-- | misc/examples/forfilter.c | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/misc/examples/forfilter.c b/misc/examples/forfilter.c deleted file mode 100644 index 5e1cf15e..00000000 --- a/misc/examples/forfilter.c +++ /dev/null @@ -1,147 +0,0 @@ -#include <stdio.h> -#define i_extern -#include <stc/cstr.h> -#include <stc/csview.h> -#include <stc/algo/filter.h> -#include <stc/algo/crange.h> - -#define i_type IVec -#define i_val int -#include <stc/cstack.h> - -#define i_type SVec -#define i_valclass csview -#include <stc/cstack.h> - -// filters and transforms: -#define flt_skipValue(i, x) (*i.ref != (x)) -#define flt_isEven(i) ((*i.ref & 1) == 0) -#define flt_isOdd(i) (*i.ref & 1) -#define flt_square(i) (*i.ref * *i.ref) - -void demo1(void) -{ - c_auto (IVec, vec) { - c_forlist (i, int, {0, 1, 2, 3, 4, 5, 80, 6, 7, 80, 8, 9, 80, - 10, 11, 12, 13, 14, 15, 80, 16, 17}) - IVec_push(&vec, *i.ref); - - puts("demo1:"); - c_forfilter (i, IVec, vec, flt_skipValue(i, 80)) - printf(" %d", *i.ref); - puts(""); - - int res, sum = 0; - c_forfilter (i, IVec, vec - , c_flt_skipwhile(i, *i.ref != 80) - && c_flt_skip(i, 1) - && c_flt_skipwhile(i, *i.ref != 80) - && flt_isEven(i) - && flt_skipValue(i, 80) - , c_flt_take(i, 5) // short-circuit - ){ - sum += res = flt_square(i); - printf(" %d", res); - } - printf("\n sum: %d\n", sum); - } -} - - -/* Rust: -fn main() { - let vector = (1..) // Infinite range of integers - .skip_while(|x| *x != 11) // Skip initial numbers unequal 11 - .filter(|x| x % 2 != 0) // Collect odd numbers - .take(5) // Only take five numbers - .map(|x| x * x) // Square each number - .collect::<Vec<usize>>(); // Return as a new Vec<usize> - println!("{:?}", vector); // Print result -} -*/ - -void demo2(void) -{ - c_auto (IVec, vector) { - puts("demo2:"); - crange R = crange_make(INT64_MAX); - c_forfilter (x, crange, R - , c_flt_skipwhile(x, *x.ref != 11) - && *x.ref % 2 != 0 - , c_flt_take(x, 5)) - IVec_push(&vector, (int)(*x.ref * *x.ref)); - c_foreach (x, IVec, vector) - printf(" %d", *x.ref); - puts(""); - } -} - -/* Rust: -fn main() { - let sentence = "This is a sentence in Rust."; - let words: Vec<&str> = sentence - .split_whitespace() - .collect(); - let words_containing_i: Vec<&str> = words - .into_iter() - .filter(|word| word.contains("i")) - .collect(); - println!("{:?}", words_containing_i); -} -*/ -void demo3(void) -{ - c_auto (SVec, words, words_containing_i) { - const char* sentence = "This is a sentence in C99."; - c_fortoken (w, sentence, " ") - SVec_push(&words, *w.ref); - - c_forfilter (w, SVec, words, - csview_contains(*w.ref, "i")) - SVec_push(&words_containing_i, *w.ref); - - puts("demo3:"); - c_foreach (w, SVec, words_containing_i) - printf(" %.*s", c_SV(*w.ref)); - puts(""); - } -} - -void demo4(void) -{ - csview s = c_sv("ab123cReAghNGnΩoEp"); // Ω = multi-byte - c_auto (cstr, out) { - c_forfilter (i, csview, s, utf8_isupper(utf8_peek(i.ref))) { - char chr[4]; - utf8_encode(chr, utf8_tolower(utf8_peek(i.ref))); - cstr_push(&out, chr); - } - puts("demo4:"); - printf(" %s\n", cstr_str(&out)); - } -} - -void demo5(void) -{ - #define flt_even(i) ((*i.ref & 1) == 0) - #define flt_mid_decade(i) ((*i.ref % 10) != 0) - puts("demo5:"); - crange R = crange_make(1963, INT32_MAX); - c_forfilter (i, crange, R - , c_flt_skip(i,15) - && c_flt_skipwhile(i, flt_mid_decade(i)) - && c_flt_skip(i,30) - && flt_even(i) - , c_flt_take(i,10)) - printf(" %lld", *i.ref); - puts(""); -} - -int main(void) -{ - demo1(); - demo2(); - demo3(); - demo4(); - demo5(); -} |
