/src/WasmEdge/include/po/list.h
Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: Apache-2.0 |
2 | | // SPDX-FileCopyrightText: 2019-2024 Second State INC |
3 | | |
4 | | //===-- wasmedge/po/list.h - Option list ----------------------------------===// |
5 | | // |
6 | | // Part of the WasmEdge Project. |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | #pragma once |
10 | | |
11 | | #include "po/helper.h" |
12 | | #include "po/parser.h" |
13 | | |
14 | | #include <cstdint> |
15 | | #include <limits> |
16 | | #include <string> |
17 | | #include <type_traits> |
18 | | #include <vector> |
19 | | |
20 | | namespace WasmEdge { |
21 | | namespace PO { |
22 | | |
23 | | template <typename T, typename ParserT = Parser<T>> class List { |
24 | | public: |
25 | 12.3k | constexpr List() {} WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::List() Line | Count | Source | 25 | 8.20k | constexpr List() {} |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List() Line | Count | Source | 25 | 4.10k | constexpr List() {} |
|
26 | | |
27 | | template <typename... ArgsT> |
28 | | List(Description &&D, ArgsT &&...Args) noexcept |
29 | 12.3k | : List(std::forward<ArgsT>(Args)...) { |
30 | 12.3k | Desc = std::move(D.Value); |
31 | 12.3k | } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::List<WasmEdge::PO::MetaVar>(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&) Line | Count | Source | 29 | 8.20k | : List(std::forward<ArgsT>(Args)...) { | 30 | 8.20k | Desc = std::move(D.Value); | 31 | 8.20k | } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List<WasmEdge::PO::MetaVar>(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&) Line | Count | Source | 29 | 4.10k | : List(std::forward<ArgsT>(Args)...) { | 30 | 4.10k | Desc = std::move(D.Value); | 31 | 4.10k | } |
|
32 | | |
33 | | template <typename... ArgsT> |
34 | | List(MetaVar &&M, ArgsT &&...Args) noexcept |
35 | 12.3k | : List(std::forward<ArgsT>(Args)...) { |
36 | 12.3k | Meta = std::move(M.Value); |
37 | 12.3k | } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::List<>(WasmEdge::PO::MetaVar&&) Line | Count | Source | 35 | 8.20k | : List(std::forward<ArgsT>(Args)...) { | 36 | 8.20k | Meta = std::move(M.Value); | 37 | 8.20k | } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List<>(WasmEdge::PO::MetaVar&&) Line | Count | Source | 35 | 4.10k | : List(std::forward<ArgsT>(Args)...) { | 36 | 4.10k | Meta = std::move(M.Value); | 37 | 4.10k | } |
|
38 | | |
39 | | template <typename... ArgsT> |
40 | | List(ZeroOrMore &&, ArgsT &&...Args) noexcept |
41 | | : List(std::forward<ArgsT>(Args)...) { |
42 | | IsOneOrMore = false; |
43 | | } |
44 | | |
45 | | template <typename... ArgsT> |
46 | | List(OneOrMore &&, ArgsT &&...Args) noexcept |
47 | | : List(std::forward<ArgsT>(Args)...) { |
48 | | IsOneOrMore = true; |
49 | | } |
50 | | |
51 | | template <typename... ArgsT> |
52 | | List(DefaultValue<T> &&V, ArgsT &&...Args) noexcept |
53 | | : List(std::forward<ArgsT>(Args)...) { |
54 | | Default.push_back(std::move(V.Value)); |
55 | | } |
56 | | |
57 | | template <typename... ArgsT> |
58 | | List(Hidden &&, ArgsT &&...Args) noexcept |
59 | | : List(std::forward<ArgsT>(Args)...) { |
60 | | Hidden = true; |
61 | | } |
62 | | |
63 | 12.3k | std::string_view description() const noexcept { return Desc; } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::description() const Line | Count | Source | 63 | 8.20k | std::string_view description() const noexcept { return Desc; } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::description() const Line | Count | Source | 63 | 4.10k | std::string_view description() const noexcept { return Desc; } |
|
64 | | |
65 | 12.3k | std::string_view meta() const noexcept { return Meta; } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::meta() const Line | Count | Source | 65 | 8.20k | std::string_view meta() const noexcept { return Meta; } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::meta() const Line | Count | Source | 65 | 4.10k | std::string_view meta() const noexcept { return Meta; } |
|
66 | | |
67 | 12.3k | bool hidden() const noexcept { return Hidden; } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::hidden() const Line | Count | Source | 67 | 8.20k | bool hidden() const noexcept { return Hidden; } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::hidden() const Line | Count | Source | 67 | 4.10k | bool hidden() const noexcept { return Hidden; } |
|
68 | | |
69 | 12.3k | std::size_t min_narg() const noexcept { return IsOneOrMore ? 1 : 0; } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::min_narg() const Line | Count | Source | 69 | 8.20k | std::size_t min_narg() const noexcept { return IsOneOrMore ? 1 : 0; } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::min_narg() const Line | Count | Source | 69 | 4.10k | std::size_t min_narg() const noexcept { return IsOneOrMore ? 1 : 0; } |
|
70 | | |
71 | 12.3k | std::size_t max_narg() const noexcept { |
72 | 12.3k | return std::numeric_limits<std::size_t>::max(); |
73 | 12.3k | } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::max_narg() const Line | Count | Source | 71 | 8.20k | std::size_t max_narg() const noexcept { | 72 | 8.20k | return std::numeric_limits<std::size_t>::max(); | 73 | 8.20k | } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::max_narg() const Line | Count | Source | 71 | 4.10k | std::size_t max_narg() const noexcept { | 72 | 4.10k | return std::numeric_limits<std::size_t>::max(); | 73 | 4.10k | } |
|
74 | | |
75 | | const std::vector<T> &value() const noexcept { return Store; } |
76 | 12.3k | std::vector<T> &value() noexcept { return Store; } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::value() Line | Count | Source | 76 | 8.20k | std::vector<T> &value() noexcept { return Store; } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::value() Line | Count | Source | 76 | 4.10k | std::vector<T> &value() noexcept { return Store; } |
|
77 | | |
78 | 2.34k | void default_argument() noexcept { Store = std::move(Default); } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::default_argument() Line | Count | Source | 78 | 532 | void default_argument() noexcept { Store = std::move(Default); } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::default_argument() Line | Count | Source | 78 | 1.81k | void default_argument() noexcept { Store = std::move(Default); } |
|
79 | | |
80 | 2.78M | cxx20::expected<void, Error> argument(std::string Argument) noexcept { |
81 | 2.78M | if (auto Res = ParserT::parse(std::move(Argument)); !Res) { |
82 | 1.92k | return cxx20::unexpected(Res.error()); |
83 | 2.78M | } else { |
84 | 2.78M | Store.push_back(*Res); |
85 | 2.78M | } |
86 | 2.78M | return {}; |
87 | 2.78M | } WasmEdge::PO::List<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, WasmEdge::PO::Parser<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) Line | Count | Source | 80 | 1.86M | cxx20::expected<void, Error> argument(std::string Argument) noexcept { | 81 | 1.86M | if (auto Res = ParserT::parse(std::move(Argument)); !Res) { | 82 | 0 | return cxx20::unexpected(Res.error()); | 83 | 1.86M | } else { | 84 | 1.86M | Store.push_back(*Res); | 85 | 1.86M | } | 86 | 1.86M | return {}; | 87 | 1.86M | } |
WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) Line | Count | Source | 80 | 920k | cxx20::expected<void, Error> argument(std::string Argument) noexcept { | 81 | 920k | if (auto Res = ParserT::parse(std::move(Argument)); !Res) { | 82 | 1.92k | return cxx20::unexpected(Res.error()); | 83 | 918k | } else { | 84 | 918k | Store.push_back(*Res); | 85 | 918k | } | 86 | 918k | return {}; | 87 | 920k | } |
|
88 | | |
89 | | private: |
90 | | std::vector<T> Store; |
91 | | std::vector<T> Default; |
92 | | std::string Desc; |
93 | | std::string Meta; |
94 | | bool IsOneOrMore = false; |
95 | | bool Hidden = false; |
96 | | }; |
97 | | |
98 | | } // namespace PO |
99 | | } // namespace WasmEdge |