summaryrefslogtreecommitdiffhomepage
path: root/misc
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2023-03-12 13:30:15 +0100
committerTyge Løvset <[email protected]>2023-03-12 13:30:15 +0100
commitc9be5f66a481bd040b36a25314f6589dd939daa5 (patch)
treed71cc01f17fabc526a72219c225b015b4130c8b3 /misc
parent1ac8bb4ff664baa838b44ed6bf62225766f000c5 (diff)
downloadSTC-modified-c9be5f66a481bd040b36a25314f6589dd939daa5.tar.gz
STC-modified-c9be5f66a481bd040b36a25314f6589dd939daa5.zip
Safer state machine in coroutine.h (internal).
Removed c_forwhile() macro. Redundant, use c_forfilter(). Removed find and eq in cspan (use general c_find_if() instead for search).
Diffstat (limited to 'misc')
-rw-r--r--misc/examples/forfilter.c36
-rw-r--r--misc/examples/forloops.c20
-rw-r--r--misc/examples/list.c11
-rw-r--r--misc/examples/prime.c6
4 files changed, 37 insertions, 36 deletions
diff --git a/misc/examples/forfilter.c b/misc/examples/forfilter.c
index 2be975a6..cd6d59cc 100644
--- a/misc/examples/forfilter.c
+++ b/misc/examples/forfilter.c
@@ -32,13 +32,13 @@ void demo1(void)
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
+ 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);
@@ -65,10 +65,10 @@ 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))
+ 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);
@@ -97,7 +97,7 @@ void demo3(void)
SVec_push(&words, *w.ref);
c_forfilter (w, SVec, words,
- csview_contains(*w.ref, "i"))
+ csview_contains(*w.ref, "i"))
SVec_push(&words_containing_i, *w.ref);
puts("demo3:");
@@ -127,12 +127,12 @@ void demo5(void)
#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,5))
+ 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,5))
printf(" %lld", *i.ref);
puts("");
}
diff --git a/misc/examples/forloops.c b/misc/examples/forloops.c
index 707e8285..144ec637 100644
--- a/misc/examples/forloops.c
+++ b/misc/examples/forloops.c
@@ -60,20 +60,20 @@ int main()
c_forpair (key, val, IMap, map)
printf(" (%d %d)", *_.key, *_.val);
- puts("\n\nc_forwhile:");
- c_forwhile (i, IVec, IVec_begin(&vec), i.index < 3)
+ puts("\n\nc_forfilter 1:");
+ c_forfilter (i, IVec, vec, c_flt_take(i, 3))
printf(" %d", *i.ref);
#define isOdd(i) (*i.ref & 1)
- puts("\n\nc_forfilter:");
- c_forfilter (i, IVec, vec
- , c_flt_skipwhile(i, *i.ref != 65)
- && c_flt_takewhile(i, *i.ref != 280)
- && c_flt_skipwhile(i, isOdd(i))
- && isOdd(i)
- && c_flt_skip(i, 2)
- && c_flt_take(i, 2))
+ puts("\n\nc_forfilter 2:");
+ c_forfilter (i, IVec, vec,
+ c_flt_skipwhile(i, *i.ref != 65) &&
+ c_flt_takewhile(i, *i.ref != 280) &&
+ c_flt_skipwhile(i, isOdd(i)) &&
+ isOdd(i) &&
+ c_flt_skip(i, 2) &&
+ c_flt_take(i, 2))
printf(" %d", *i.ref);
puts("");
// 189
diff --git a/misc/examples/list.c b/misc/examples/list.c
index b345bd16..c12d67e9 100644
--- a/misc/examples/list.c
+++ b/misc/examples/list.c
@@ -1,11 +1,12 @@
#include <stdio.h>
#include <time.h>
+#include <stc/calgo.h>
+#include <stc/crandom.h>
#define i_val double
#define i_tag fx
#define i_extern // include sort function
#include <stc/clist.h>
-#include <stc/crandom.h>
int main() {
const int n = 1000000;
@@ -24,8 +25,8 @@ int main() {
sum += *i.ref;
printf("sum %f\n\n", sum);
- c_forwhile (i, clist_fx, clist_fx_begin(&list), i.index < 10)
- printf("%8d: %10f\n", (int)i.index, *i.ref);
+ c_forfilter (i, clist_fx, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_last(i), *i.ref);
puts("sort");
clist_fx_sort(&list); // mergesort O(n*log n)
@@ -37,8 +38,8 @@ int main() {
last = *i.ref;
}
- c_forwhile (i, clist_fx, clist_fx_begin(&list), i.index < 10)
- printf("%8d: %10f\n", (int)i.index, *i.ref);
+ c_forfilter (i, clist_fx, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_last(i), *i.ref);
puts("");
clist_fx_clear(&list);
diff --git a/misc/examples/prime.c b/misc/examples/prime.c
index 59ee336c..16a59774 100644
--- a/misc/examples/prime.c
+++ b/misc/examples/prime.c
@@ -43,9 +43,9 @@ int main(void)
puts("Show the last 50 primes using a temporary crange generator:");
crange R = crange_make(n - 1, 0, -2);
- c_forfilter (i, crange, R
- , cbits_test(&primes, *i.ref>>1)
- && c_flt_take(i, 50)) {
+ c_forfilter (i, crange, R,
+ cbits_test(&primes, *i.ref>>1) &&
+ c_flt_take(i, 50)) {
printf("%lld ", *i.ref);
if (c_flt_last(i) % 10 == 0) puts("");
}