From 626201d0e016fa399caa05823240abf1ccbcfd03 Mon Sep 17 00:00:00 2001 From: justyy Date: Wed, 14 Jan 2026 16:15:10 +0000 Subject: [PATCH] Refactor views-zip-enumerate --- views-zip-enumerate/main.cpp | 19 ++++++++++++++----- views-zip-enumerate/tests.sh | 5 +++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100755 views-zip-enumerate/tests.sh 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