Skip to content

Commit 8b3d1a3

Browse files
committed
Refactor args_t to use ranges instead of vector
1 parent 65fcd0f commit 8b3d1a3

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

Diff for: include/cpp2util.h

+12-10
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@
213213
#include <cstdio>
214214
#include <cstdint>
215215
#include <algorithm>
216+
#include <ranges>
216217

217218
#ifndef CPP2_NO_EXCEPTIONS
218219
#include <exception>
@@ -1493,25 +1494,26 @@ inline auto to_string(std::tuple<Ts...> const& t) -> std::string
14931494

14941495
//-----------------------------------------------------------------------
14951496
//
1496-
// args: see main() arguments as vector<string_view>
1497+
// args: see main() arguments as std::ranges::view<string_view>
14971498
//
14981499
//-----------------------------------------------------------------------
14991500
//
1500-
struct args_t : std::vector<std::string_view>
1501+
struct args_t : std::ranges::transform_view<
1502+
std::span<char const* const>,
1503+
decltype([](char const* s) { return std::string_view{s}; })
1504+
>
15011505
{
1502-
args_t(int c, char const* const* v) : vector{static_cast<size_t>(c)}, argc{c}, argv{v} {}
1503-
15041506
int argc = 0;
15051507
char const* const* argv = nullptr;
15061508
};
15071509

1508-
inline auto make_args(int argc, char const* const* argv) -> args_t
1510+
inline auto make_args(int argc, char const* const* argv) -> auto
15091511
{
1510-
auto ret = args_t{argc, argv};
1511-
for (auto i = 0; i < argc; ++i) {
1512-
ret[i] = std::string_view{argv[i]};
1513-
}
1514-
return ret;
1512+
return args_t{
1513+
{ std::span(argv, argc), {} },
1514+
argc,
1515+
argv
1516+
};
15151517
}
15161518

15171519

0 commit comments

Comments
 (0)