Coverage Report

Created: 2025-07-23 06:30

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