diff --git a/views-zip-enumerate/main.cpp b/views-zip-enumerate/main.cpp index f74dc38..79aba65 100644 --- a/views-zip-enumerate/main.cpp +++ b/views-zip-enumerate/main.cpp @@ -1,12 +1,22 @@ #include #include +#include +#include #include +using pair = std::pair; + +void +default_callback(pair p) +{ + std::cout << "Index: " << p.first << ", Character: " << p.second << '\n'; +} + void -enumerate(std::string_view str) +enumerate(std::string_view str, std::function callback = nullptr) { for (const auto& [index, character] : std::views::zip(std::views::iota(0), str)) { - std::cout << index << ": " << character << '\n'; + callback({index, character}); } } @@ -15,15 +25,14 @@ main(int argc, char* argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " ...\n"; - enumerate("default string"); + enumerate("default string", default_callback); // make pipeline happy return 0; } for (int i = 1; i < argc; ++i) { std::string_view input = argv[i]; std::cout << "Enumerating string: " << input << '\n'; - enumerate(input); - std::cout << "------------------------\n"; + enumerate(input, [](pair p) { std::cout << "Index: " << p.first << ", Character: " << p.second << '\n'; }); } return 0; } diff --git a/views-zip-enumerate/tests.sh b/views-zip-enumerate/tests.sh new file mode 100755 index 0000000..0382f16 --- /dev/null +++ b/views-zip-enumerate/tests.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -ex + +./views-zip-enumerate 1234 ABCD