diff --git a/src/linkedlist.h b/src/linkedlist.h index 0131ba6..65b6b76 100644 --- a/src/linkedlist.h +++ b/src/linkedlist.h @@ -381,7 +381,7 @@ iter->cursor = target->head; \ iter->index = 0; \ iter->start = true; \ - iter->end = false; \ + iter->end = PFX##_empty(target); \ } \ \ FMOD bool PFX##_iter_start(SNAME##_iter *iter) \ diff --git a/src/list.h b/src/list.h index da855f8..4b89b7e 100644 --- a/src/list.h +++ b/src/list.h @@ -326,7 +326,7 @@ iter->target = target; \ iter->cursor = 0; \ iter->start = true; \ - iter->end = false; \ + iter->end = PFX##_empty(target); \ } \ \ FMOD bool PFX##_iter_start(SNAME##_iter *iter) \ diff --git a/src/stack.h b/src/stack.h index 0e51e42..2ec1a5f 100644 --- a/src/stack.h +++ b/src/stack.h @@ -207,7 +207,7 @@ iter->target = target; \ iter->cursor = iter->target->count - 1; \ iter->start = true; \ - iter->end = false; \ + iter->end = PFX##_empty(target); \ } \ \ FMOD bool PFX##_iter_start(SNAME##_iter *iter) \ diff --git a/tests/iterators/linkedlist.c b/tests/iterators/linkedlist.c index e198115..d120605 100644 --- a/tests/iterators/linkedlist.c +++ b/tests/iterators/linkedlist.c @@ -33,6 +33,20 @@ int main(int argc, char const *argv[]) printf("\n\n"); } + for (ll_iter_tostart(&iter); !ll_iter_end(&iter); /**/) + { + ll_iter_next(&iter, &r, &i); + printf("LL[%2d] = %2d\n", i, r); + } + + printf("\n"); + + for (ll_iter_toend(&iter); !ll_iter_start(&iter); /**/) + { + ll_iter_prev(&iter, &r, &i); + printf("LL[%2d] = %2d\n", i, r); + } + ll_free(ll); return 0; diff --git a/tests/iterators/list.c b/tests/iterators/list.c index 865b91a..2272ef2 100644 --- a/tests/iterators/list.c +++ b/tests/iterators/list.c @@ -1,5 +1,5 @@ // Checks if the list iterator can go back and forward in the list without -// hitting invalid states or a nul pointer. Check is done visually. +// hitting invalid states or a null pointer. Check is done visually. #include #include #include @@ -33,6 +33,20 @@ int main(int argc, char const *argv[]) printf("\n\n"); } + for (l_iter_tostart(&iter); !l_iter_end(&iter); /**/) + { + l_iter_next(&iter, &r, &i); + printf("L[%2d] = %2d\n", i, r); + } + + printf("\n"); + + for (l_iter_toend(&iter); !l_iter_start(&iter); /**/) + { + l_iter_prev(&iter, &r, &i); + printf("L[%2d] = %2d\n", i, r); + } + l_free(l); return 0; diff --git a/tests/iterators/stack.c b/tests/iterators/stack.c index bd8e5d7..fd62983 100644 --- a/tests/iterators/stack.c +++ b/tests/iterators/stack.c @@ -1,5 +1,5 @@ // Checks if the stack iterator can go back and forward in the stack without -// hitting invalid states or a nul pointer. Check is done visually. +// hitting invalid states or a null pointer. Check is done visually. #include #include #include @@ -33,6 +33,20 @@ int main(int argc, char const *argv[]) printf("\n\n"); } + for (s_iter_tostart(&iter); !s_iter_end(&iter); /**/) + { + s_iter_next(&iter, &r, &i); + printf("S[%2d] = %2d\n", i, r); + } + + printf("\n"); + + for (s_iter_toend(&iter); !s_iter_start(&iter); /**/) + { + s_iter_prev(&iter, &r, &i); + printf("S[%2d] = %2d\n", i, r); + } + s_free(s); return 0;