Iterator sample
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <initializer_list>
#include "zip.h"
#include "index_iter.h"
#include "list.h"
#include "linked_list.h"
int main() {
auto l = List<int>{ 7, 3, 2 };
#if 0
printf("C Style\n");
for (size_t i = 0; i < l.count; ++i) {
auto value = l[i];
printf("%zu: %i\n", i, value);
}
#endif
#if 0
printf("Iterator in C style loop\n");
auto iter = l.indexed();
auto begin = iter.begin();
auto end = iter.end();
for (auto it = begin; it != end; ++it) {
auto [value, i] = *it;
printf("%zu: %i\n", i, value);
}
#endif
#if 0
printf("C++ Iterator\n");
for (auto [value, i] : l.indexed()) {
printf("%zu: %i\n", i, value);
}
#endif
#if 0
printf("C++ Iterator without index\n");
for (auto value : l) {
printf("%i\n", value);
}
#endif
#if 0
auto list = Linked_List<int> {934, 482, 349, 832};
list.reserve(5);
list.add(91);
list.add(82);
list.add_range({123, 421, 999});
#elif 1
auto list = Linked_List<int>(2);
list.add_range({123, 421, 999});
list.add(91);
list.add(82);
list.add(11);
#else
auto list = Linked_List<int> {};
list.add(73);
list.add(52);
list.add(98);
list.add(23);
list.add(91);
list.add(82);
#endif
#if 1
printf("Linked list\n");
for (auto value : list) {
printf("%i\n", value);
}
#endif
#if 0
printf("Linked list with index\n");
for (auto [value, i] : list.indexed()) {
printf("%zu: %i\n", i, value);
}
#endif
#if 0
printf("Linked list ptr\n");
printf("%p\n", &list.first->elements[0]);
printf("%p\n", &list.first->next->elements[0]);
for (auto ptr : list.iter_ptr()) {
printf("%i, %p\n", *ptr, ptr);
}
#endif
#if 1
printf("Linked list ptr with index\n");
printf("%p\n", &list.first->elements[0]);
printf("%p\n", &list.first->next->elements[0]);
for (auto [ptr, index] : list.iter_ptr().indexed()) {
printf("%zu: %i, %p\n", index, *ptr, ptr);
}
#endif
#if 1
printf("Linked list indexing\n");
printf("%i\n", list[0]);
printf("%i\n", list[1]);
printf("%i\n", list[2]);
printf("%i\n", list[3]);
printf("%i\n", list[4]);
printf("%i\n", list[5]);
#endif
#if 1
printf("Zip\n");
auto list2 = Linked_List<char *> {"a", "b", "c", "d", "e"};
auto zip_iter = zip2(list, list2);
for (auto [a, b] : zip_iter) {
printf("%s: %i\n", b, a);
}
#endif
list.release();
return 0;
}INFO