Coverage Report

Created: 2025-07-01 06:18

/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
0
  constexpr List() {}
Unexecuted instantiation: 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()
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List()
26
27
  template <typename... ArgsT>
28
  List(Description &&D, ArgsT &&...Args) noexcept
29
0
      : List(std::forward<ArgsT>(Args)...) {
30
0
    Desc = std::move(D.Value);
31
0
  }
Unexecuted instantiation: 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&&)
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List<WasmEdge::PO::MetaVar>(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&)
32
33
  template <typename... ArgsT>
34
  List(MetaVar &&M, ArgsT &&...Args) noexcept
35
0
      : List(std::forward<ArgsT>(Args)...) {
36
0
    Meta = std::move(M.Value);
37
0
  }
Unexecuted instantiation: 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&&)
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::List<>(WasmEdge::PO::MetaVar&&)
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
0
  std::string_view description() const noexcept { return Desc; }
Unexecuted instantiation: 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
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::description() const
64
65
0
  std::string_view meta() const noexcept { return Meta; }
Unexecuted instantiation: 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
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::meta() const
66
67
0
  bool hidden() const noexcept { return Hidden; }
Unexecuted instantiation: 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
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::hidden() const
68
69
0
  std::size_t min_narg() const noexcept { return IsOneOrMore ? 1 : 0; }
Unexecuted instantiation: 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
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::min_narg() const
70
71
0
  std::size_t max_narg() const noexcept {
72
0
    return std::numeric_limits<std::size_t>::max();
73
0
  }
Unexecuted instantiation: 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
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::max_narg() const
74
75
  const std::vector<T> &value() const noexcept { return Store; }
76
0
  std::vector<T> &value() noexcept { return Store; }
Unexecuted instantiation: 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()
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::value()
77
78
0
  void default_argument() noexcept { Store = std::move(Default); }
Unexecuted instantiation: 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()
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::default_argument()
79
80
0
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
81
0
    if (auto Res = ParserT::parse(std::move(Argument)); !Res) {
82
0
      return cxx20::unexpected(Res.error());
83
0
    } else {
84
0
      Store.push_back(*Res);
85
0
    }
86
0
    return {};
87
0
  }
Unexecuted instantiation: 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> >)
Unexecuted instantiation: WasmEdge::PO::List<int, WasmEdge::PO::Parser<int> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
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