#include <iostream>
#include <z/all.hpp>
int main() {
auto gen1 = range(0, 5);
auto gen2 = range(5, 10);
std::cout << "Numbers from 0 to 9:" << std::endl;
for (auto &i : chain(gen1, gen2)) {
std::cout << i << ' ';
}
std::cout << std::endl;
array<zstring> arr1 = {"a", "b", "c", "d", "e"};
array<zstring> arr2 = {"f", "g", "h", "i", "j"};
auto gen3 = generatorFrom(arr1);
auto gen4 = generatorFrom(arr2);
std::cout << "\nLetters from a to j:" << std::endl;
for (auto &&i : chain(gen3, gen4)) {
std::cout << i << ' ';
}
std::cout << std::endl;
std::cout << "\nZipped pairs:" << std::endl;
auto gen5 = range(1, 6);
auto gen6 = generatorFrom({"one", "two", "three", "four", "five"});
auto zipped = gen5.zip(gen6);
for (auto [first, second] : zipped) {
std::cout << '(' << first << ", " << second << ") ";
}
std::cout << std::endl;
std::cout << "\nLetters in a string:" << std::endl;
auto gen7 = generatorFrom(
zstring(
"Hello, World!"));
for (char chr : gen7) {
std::cout << chr << ' ';
}
std::cout << std::endl;
auto gen8 = generatorFrom({"a", "b", "c", "d", "e"}).enumerate();
std::cout << "\nEnumerated range:" << std::endl;
for (auto [index, value] : gen8) {
std::cout << '(' << index << ": " << value << ") ";
}
std::cout << std::endl;
auto gen9 = generatorFrom({"apple", "banana", "cherry", "melon"});
auto gen10 = generatorFrom({"banana", "cherry", "date", "fig"});
std::cout << "\nItems in the first generator but not the second:" << std::endl;
for (auto item : gen9.diff(gen10)) {
std::cout << item << ' ';
}
std::cout << std::endl;
auto gen11 = range(0, 20).chunk(5);
std::cout << "\nChunks of 5 items from 0 to 19:" << std::endl;
for (auto chunk : gen11) {
std::cout << "[" << join(chunk, ", ") << "] ";
}
std::cout << std::endl;
return 0;
}
A wrapper for std::vector.
Definition array.hpp:72
A template class for character strings.
Definition string.hpp:62
generator< deref_type< T >, iter_type< T > > generatorFrom(const T &list)
Create a generator from an arbitrary iterable.
Definition generator.hpp:486
generator< long, long > range(long begin, long end, long step=1) noexcept
Generate a sequence of integers in a specified range.
string< E > join(const iterable< T > &list, const string< E > &delim) noexcept
Concatenate elements in an array into a string, separated by a delimiter.
Definition join.hpp:20
core::generator< T, bool > chain(core::generator< T, U > &first, core::generator< T, V > &second) noexcept
Chains two generators together.
Definition chain.hpp:18