summaryrefslogtreecommitdiffhomepage
path: root/misc/examples/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/examples/list.c')
-rw-r--r--misc/examples/list.c94
1 files changed, 44 insertions, 50 deletions
diff --git a/misc/examples/list.c b/misc/examples/list.c
index b345bd16..363d7fec 100644
--- a/misc/examples/list.c
+++ b/misc/examples/list.c
@@ -1,69 +1,63 @@
#include <stdio.h>
#include <time.h>
+#include <stc/algo/filter.h>
+#include <stc/crand.h>
+#define i_type DList
#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;
+ const int n = 3000000;
+ DList list = {0};
- c_auto (clist_fx, list)
- {
- stc64_t rng = stc64_new(1234);
- stc64_uniformf_t dist = stc64_uniformf_new(100.0f, n);
- int m = 0;
- c_forrange (n)
- clist_fx_push_back(&list, stc64_uniformf(&rng, &dist)), ++m;
+ crand_t rng = crand_init(1234567);
+ int m = 0;
+ c_forrange (n)
+ DList_push_back(&list, crand_f64(&rng)*n + 100), ++m;
- double sum = 0.0;
- printf("sumarize %d:\n", m);
- c_foreach (i, clist_fx, list)
- sum += *i.ref;
- printf("sum %f\n\n", sum);
+ double sum = 0.0;
+ printf("sumarize %d:\n", m);
+ c_foreach (i, DList, list)
+ 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, DList, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_getcount(i), *i.ref);
- puts("sort");
- clist_fx_sort(&list); // mergesort O(n*log n)
- puts("sorted");
+ puts("sort");
+ DList_sort(&list); // qsort O(n*log n)
+ puts("sorted");
- double last = 0;
- c_foreach (i, clist_fx, list) {
- if (*i.ref < last) {printf("ERROR"); exit(-1);}
- last = *i.ref;
- }
+ c_forfilter (i, DList, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_getcount(i), *i.ref);
+ puts("");
- c_forwhile (i, clist_fx, clist_fx_begin(&list), i.index < 10)
- printf("%8d: %10f\n", (int)i.index, *i.ref);
- puts("");
+ DList_drop(&list);
+ list = c_make(DList, {10, 20, 30, 40, 30, 50});
- clist_fx_clear(&list);
- c_forlist (i, int, {10, 20, 30, 40, 30, 50})
- clist_fx_push_back(&list, *i.ref);
+ const double* v = DList_get(&list, 30);
+ printf("found: %f\n", *v);
- const double* v = clist_fx_get(&list, 30);
- printf("found: %f\n", *v);
- c_foreach (i, clist_fx, list)
- printf(" %g", *i.ref);
- puts("");
+ c_foreach (i, DList, list)
+ printf(" %g", *i.ref);
+ puts("");
- clist_fx_remove(&list, 30);
- clist_fx_insert_at(&list, clist_fx_begin(&list), 5); // same as push_front()
- clist_fx_push_back(&list, 500);
- clist_fx_push_front(&list, 1964);
+ DList_remove(&list, 30);
+ DList_insert_at(&list, DList_begin(&list), 5); // same as push_front()
+ DList_push_back(&list, 500);
+ DList_push_front(&list, 1964);
- printf("Full: ");
- c_foreach (i, clist_fx, list)
- printf(" %g", *i.ref);
+ printf("Full: ");
+ c_foreach (i, DList, list)
+ printf(" %g", *i.ref);
- printf("\nSubs: ");
- clist_fx_iter it = clist_fx_begin(&list);
- c_foreach (i, clist_fx, clist_fx_advance(it, 4), clist_fx_end(&list))
- printf(" %g", *i.ref);
- puts("");
- }
+ printf("\nSubs: ");
+ DList_iter it = DList_begin(&list);
+
+ c_foreach (i, DList, DList_advance(it, 4), DList_end(&list))
+ printf(" %g", *i.ref);
+ puts("");
+
+ DList_drop(&list);
}