From dde58b2349fd6b7e82f49f6d892cb1ad33432cb8 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Fri, 29 Mar 2019 17:49:46 -0300 Subject: [PATCH] Modified stack iterator index --- examples/for_each.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- src/stack.h | 4 ++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/examples/for_each.c b/examples/for_each.c index 07b9f3b..3ee7f62 100644 --- a/examples/for_each.c +++ b/examples/for_each.c @@ -5,25 +5,36 @@ // Create containers to use only in this file COLLECTION_GENERATE(LIST, PUBLIC, l, list, static, , int) +COLLECTION_GENERATE(LINKEDLIST, PUBLIC, ll, llist, static, , int) COLLECTION_GENERATE(STACK, PUBLIC, s, stack, static, , int) COLLECTION_GENERATE(QUEUE, PUBLIC, q, queue, static, , int) COLLECTION_GENERATE(DEQUE, PUBLIC, d, deque, static, , int) +COLLECTION_GENERATE(TREESET, PUBLIC, ts, tset, static, , int) + +int intcmp(int a, int b) +{ + return a - b; +} int main(int argc, char const *argv[]) { // Initialize all of them with an internal capacity of 100 list *l = l_new(100); + llist *ll = ll_new(); stack *s = s_new(100); queue *q = q_new(100); deque *d = d_new(100); + tset *ts = ts_new(intcmp); // Add 20 elements to each of them for (int i = 0; i < 20; i++) { l_push_back(l, i); + ll_push_back(ll, i); s_push(s, i); q_enqueue(q, i); d_push_back(d, i); + ts_insert(ts, i); } // Some extra elements @@ -33,6 +44,15 @@ int main(int argc, char const *argv[]) d_push_back(d, 21); d_push_back(d, 22); d_push_back(d, 23); + ll_push_back(ll, 21); + ll_push_back(ll, 22); + ll_push_back(ll, 23); + ll_push_back(ll, 24); + ts_insert(ts, 21); + ts_insert(ts, 22); + ts_insert(ts, 23); + ts_insert(ts, 24); + ts_insert(ts, 25); // All FOR_EACH macros contains three available variables: // - var : the elements that changes with each iteration @@ -48,9 +68,9 @@ int main(int argc, char const *argv[]) }) FOR_EACH(s, stack, int, s, { - if (index == iter.target->count - 1) + if (index == 0) printf("[ %d, ", var); - else if (index == 0) + else if (index == iter.target->count - 1) printf("%d ]\n", var); else printf("%d, ", var); @@ -74,10 +94,30 @@ int main(int argc, char const *argv[]) printf("%d, ", var); }) + FOR_EACH(ll, llist, int, ll, { + if (index == 0) + printf("[ %d, ", var); + else if (index == iter.target->count - 1) + printf("%d ]\n", var); + else + printf("%d, ", var); + }) + + FOR_EACH(ts, tset, int, ts, { + if (index == 0) + printf("[ %d, ", var); + else if (index == iter.target->count - 1) + printf("%d ]\n", var); + else + printf("%d, ", var); + }) + l_free(l); + ll_free(ll); s_free(s); q_free(q); d_free(d); + ts_free(ts); return 0; } diff --git a/src/stack.h b/src/stack.h index bd4f530..8b4bee6 100644 --- a/src/stack.h +++ b/src/stack.h @@ -238,7 +238,7 @@ if (iter->end) \ return false; \ \ - *index = iter->cursor; \ + *index = iter->target->count - iter->cursor - 1; \ *result = iter->target->buffer[iter->cursor]; \ iter->start = false; \ \ @@ -255,7 +255,7 @@ if (iter->start) \ return false; \ \ - *index = iter->cursor; \ + *index = iter->target->count - iter->cursor - 1; \ *result = iter->target->buffer[iter->cursor]; \ iter->end = false; \ \