diff options
| -rw-r--r-- | examples/list.c | 26 | ||||
| -rw-r--r-- | stc/clist.h | 5 |
2 files changed, 21 insertions, 10 deletions
diff --git a/examples/list.c b/examples/list.c index 4a131fac..9c393bcc 100644 --- a/examples/list.c +++ b/examples/list.c @@ -5,20 +5,30 @@ typedef_clist(fx, double);
int main() {
- int k, n = 100000;
+ int k;
+ const int n = 2000000;
+
clist_fx list = clist_ini;
- crand_rng64_t eng = crand_rng64_init(time(NULL));
- crand_uniform_f64_t dist = crand_uniform_f64_init(0.0f, n);
+ crand_rng64_t eng = crand_rng64_init(1234);
+ crand_uniform_f64_t dist = crand_uniform_f64_init(100.0f, n);
+ int m = 0;
+ for (int i = 0; i < n; ++i)
+ clist_fx_push_back(&list, crand_uniform_f64(&eng, &dist)), ++m;
+ double sum = 0.0;
+ printf("sumarize %d:\n", m);
+ c_foreach (i, clist_fx, list)
+ sum += *i.get;
+ printf("sum %f\n\n", sum);
- for (int i = 0; i < 100000; ++i)
- clist_fx_push_back(&list, crand_uniform_f64(&eng, &dist));
- k = 0; c_foreach (i, clist_fx, list)
+ k = 0;
+ c_foreach (i, clist_fx, list)
if (++k <= 10) printf("%8d: %10f\n", k, *i.get); else break;
-
+ puts("sort");
clist_fx_sort(&list); // mergesort O(n*log n)
puts("sorted");
- k = 0; c_foreach (i, clist_fx, list)
+ k = 0;
+ c_foreach (i, clist_fx, list)
if (++k <= 10) printf("%8d: %10f\n", k, *i.get); else break;
puts("");
diff --git a/stc/clist.h b/stc/clist.h index 4eac50f1..f2313642 100644 --- a/stc/clist.h +++ b/stc/clist.h @@ -246,8 +246,9 @@ STC_API size_t _clist_size(const clist_void* self); } \
STC_API clist_##X##_iter_t \
clist_##X##_erase_after(clist_##X* self, clist_##X##_iter_t pos) { \
- _c_clist_erase_after(self, X, _clist_node(X, pos.get), valueDestroy); \
- clist_##X##_next(&pos); return pos; \
+ clist_##X##_node_t* node = _clist_node(X, pos.get); \
+ _c_clist_erase_after(self, X, node, valueDestroy); \
+ clist_##X##_next(&pos); return pos;\
} \
\
STC_API clist_##X##_iter_t \
|
