Coverage Report

Created: 2025-07-11 06:21

/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