From 0e95e4b73e6bf87fc9286b7498db16a17f1b1cfe Mon Sep 17 00:00:00 2001 From: Filip Sajdak Date: Wed, 19 Apr 2023 18:37:42 +0200 Subject: [PATCH] Refactor args_t to use ranges instead of vector --- include/cpp2util.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/include/cpp2util.h b/include/cpp2util.h index f101af45f4..e778442ab3 100644 --- a/include/cpp2util.h +++ b/include/cpp2util.h @@ -213,6 +213,7 @@ #include #include #include + #include #ifndef CPP2_NO_EXCEPTIONS #include @@ -1493,25 +1494,26 @@ inline auto to_string(std::tuple const& t) -> std::string //----------------------------------------------------------------------- // -// args: see main() arguments as vector +// args: see main() arguments as std::ranges::view // //----------------------------------------------------------------------- // -struct args_t : std::vector +struct args_t : std::ranges::transform_view< + std::span, + decltype([](char const* s) { return std::string_view{s}; }) + > { - args_t(int c, char const* const* v) : vector{static_cast(c)}, argc{c}, argv{v} {} - int argc = 0; char const* const* argv = nullptr; }; inline auto make_args(int argc, char const* const* argv) -> args_t { - auto ret = args_t{argc, argv}; - for (auto i = 0; i < argc; ++i) { - ret[i] = std::string_view{argv[i]}; - } - return ret; + return args_t{ + { std::span(argv, argc), {} }, + argc, + argv + }; }