Coverage Report

Created: 2025-07-11 06:21

/src/WasmEdge/include/po/option.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/option.h - Option -------------------------------------===//
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 <optional>
16
#include <string>
17
#include <type_traits>
18
19
namespace WasmEdge {
20
namespace PO {
21
22
struct Toggle {};
23
24
template <typename T, typename ParserT = Parser<std::conditional_t<
25
                          std::is_same_v<std::remove_pointer_t<T>, Toggle>,
26
                          bool, std::remove_pointer_t<T>>>>
27
class Option;
28
29
template <typename T> class Option<T, Parser<T>> {
30
public:
31
4.10k
  Option() noexcept {}
WasmEdge::PO::Option<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> > > >::Option()
Line
Count
Source
31
2.05k
  Option() noexcept {}
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option()
Line
Count
Source
31
2.05k
  Option() noexcept {}
32
33
  template <typename... ArgsT>
34
  Option(Description &&D, ArgsT &&...Args) noexcept
35
4.10k
      : Option(std::forward<ArgsT>(Args)...) {
36
4.10k
    Desc = std::move(D.Value);
37
4.10k
  }
WasmEdge::PO::Option<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> > > >::Option<WasmEdge::PO::MetaVar>(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&)
Line
Count
Source
35
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
36
2.05k
    Desc = std::move(D.Value);
37
2.05k
  }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option<WasmEdge::PO::MetaVar, WasmEdge::PO::DefaultValue<unsigned long> >(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&, WasmEdge::PO::DefaultValue<unsigned long>&&)
Line
Count
Source
35
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
36
2.05k
    Desc = std::move(D.Value);
37
2.05k
  }
Unexecuted instantiation: WasmEdge::PO::Option<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> > > >::Option<WasmEdge::PO::DefaultValue<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(WasmEdge::PO::Description&&, WasmEdge::PO::DefaultValue<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)
38
39
  template <typename... ArgsT>
40
  Option(MetaVar &&M, ArgsT &&...Args) noexcept
41
4.10k
      : Option(std::forward<ArgsT>(Args)...) {
42
4.10k
    Meta = std::move(M.Value);
43
4.10k
  }
WasmEdge::PO::Option<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> > > >::Option<>(WasmEdge::PO::MetaVar&&)
Line
Count
Source
41
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
42
2.05k
    Meta = std::move(M.Value);
43
2.05k
  }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option<WasmEdge::PO::DefaultValue<unsigned long> >(WasmEdge::PO::MetaVar&&, WasmEdge::PO::DefaultValue<unsigned long>&&)
Line
Count
Source
41
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
42
2.05k
    Meta = std::move(M.Value);
43
2.05k
  }
44
45
  template <typename... ArgsT>
46
  Option(DefaultValue<T> &&V, ArgsT &&...Args) noexcept
47
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
48
2.05k
    Default.emplace(std::move(V.Value));
49
2.05k
  }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option<>(WasmEdge::PO::DefaultValue<unsigned long>&&)
Line
Count
Source
47
2.05k
      : Option(std::forward<ArgsT>(Args)...) {
48
2.05k
    Default.emplace(std::move(V.Value));
49
2.05k
  }
Unexecuted instantiation: WasmEdge::PO::Option<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> > > >::Option<>(WasmEdge::PO::DefaultValue<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)
50
51
  template <typename... ArgsT>
52
  Option(Hidden &&, ArgsT &&...Args) noexcept
53
      : Option(std::forward<ArgsT>(Args)...) {
54
    Hidden = true;
55
  }
56
57
4.10k
  std::string_view description() const noexcept { return Desc; }
WasmEdge::PO::Option<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
57
2.05k
  std::string_view description() const noexcept { return Desc; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::description() const
Line
Count
Source
57
2.05k
  std::string_view description() const noexcept { return Desc; }
58
59
4.10k
  std::string_view meta() const noexcept { return Meta; }
WasmEdge::PO::Option<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
59
2.05k
  std::string_view meta() const noexcept { return Meta; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::meta() const
Line
Count
Source
59
2.05k
  std::string_view meta() const noexcept { return Meta; }
60
61
4.10k
  bool hidden() const noexcept { return Hidden; }
WasmEdge::PO::Option<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
61
2.05k
  bool hidden() const noexcept { return Hidden; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::hidden() const
Line
Count
Source
61
2.05k
  bool hidden() const noexcept { return Hidden; }
62
63
4.10k
  std::size_t min_narg() const noexcept { return Default.has_value() ? 0 : 1; }
WasmEdge::PO::Option<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
63
2.05k
  std::size_t min_narg() const noexcept { return Default.has_value() ? 0 : 1; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::min_narg() const
Line
Count
Source
63
2.05k
  std::size_t min_narg() const noexcept { return Default.has_value() ? 0 : 1; }
64
65
4.10k
  std::size_t max_narg() const noexcept { return 1; }
WasmEdge::PO::Option<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
65
2.05k
  std::size_t max_narg() const noexcept { return 1; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::max_narg() const
Line
Count
Source
65
2.05k
  std::size_t max_narg() const noexcept { return 1; }
66
67
  const T &value() const noexcept { return Store; }
68
4.10k
  T &value() noexcept { return Store; }
WasmEdge::PO::Option<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
68
2.05k
  T &value() noexcept { return Store; }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::value()
Line
Count
Source
68
2.05k
  T &value() noexcept { return Store; }
69
70
446
  void default_argument() noexcept {
71
446
    Store = std::move(*Default);
72
446
    Default.reset();
73
446
  }
Unexecuted instantiation: WasmEdge::PO::Option<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()
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::default_argument()
Line
Count
Source
70
446
  void default_argument() noexcept {
71
446
    Store = std::move(*Default);
72
446
    Default.reset();
73
446
  }
74
75
68.1k
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
76
68.1k
    if (auto Res = Parser<T>::parse(std::move(Argument)); !Res) {
77
845
      return cxx20::unexpected(Res.error());
78
67.3k
    } else {
79
67.3k
      Store = std::move(*Res);
80
67.3k
    }
81
67.3k
    return {};
82
68.1k
  }
WasmEdge::PO::Option<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
75
778
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
76
778
    if (auto Res = Parser<T>::parse(std::move(Argument)); !Res) {
77
0
      return cxx20::unexpected(Res.error());
78
778
    } else {
79
778
      Store = std::move(*Res);
80
778
    }
81
778
    return {};
82
778
  }
WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Line
Count
Source
75
67.4k
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
76
67.4k
    if (auto Res = Parser<T>::parse(std::move(Argument)); !Res) {
77
845
      return cxx20::unexpected(Res.error());
78
66.5k
    } else {
79
66.5k
      Store = std::move(*Res);
80
66.5k
    }
81
66.5k
    return {};
82
67.4k
  }
83
84
private:
85
  T Store{};
86
  std::optional<T> Default{};
87
  std::string_view Desc{};
88
  std::string_view Meta{};
89
  bool Hidden = false;
90
};
91
92
/// External storage
93
template <typename T> class Option<T *, Parser<T>> {
94
public:
95
  Option(T *Storage, const T *DefaultValue) noexcept
96
0
      : Store(Storage), Default(DefaultValue) {}
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::Option(signed char*, signed char const*)
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::Option(short*, short const*)
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::Option(int*, int const*)
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::Option(long*, long const*)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::Option(unsigned char*, unsigned char const*)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::Option(unsigned short*, unsigned short const*)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::Option(unsigned int*, unsigned int const*)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::Option(unsigned long*, unsigned long const*)
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::Option(float*, float const*)
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::Option(double*, double const*)
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::Option(WasmEdge_String*, WasmEdge_String const*)
97
98
  template <typename... ArgsT>
99
  Option(Description &&D, ArgsT &&...Args) noexcept
100
0
      : Option(std::forward<ArgsT>(Args)...) {
101
0
    Desc = std::move(D.Value);
102
0
  }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::Option<signed char*, signed char const*>(WasmEdge::PO::Description&&, signed char*&&, signed char const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::Option<short*, short const*>(WasmEdge::PO::Description&&, short*&&, short const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::Option<int*, int const*>(WasmEdge::PO::Description&&, int*&&, int const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::Option<long*, long const*>(WasmEdge::PO::Description&&, long*&&, long const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::Option<unsigned char*, unsigned char const*>(WasmEdge::PO::Description&&, unsigned char*&&, unsigned char const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::Option<unsigned short*, unsigned short const*>(WasmEdge::PO::Description&&, unsigned short*&&, unsigned short const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::Option<unsigned int*, unsigned int const*>(WasmEdge::PO::Description&&, unsigned int*&&, unsigned int const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::Option<unsigned long*, unsigned long const*>(WasmEdge::PO::Description&&, unsigned long*&&, unsigned long const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::Option<float*, float const*>(WasmEdge::PO::Description&&, float*&&, float const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::Option<double*, double const*>(WasmEdge::PO::Description&&, double*&&, double const*&&)
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::Option<WasmEdge_String*, WasmEdge_String const*>(WasmEdge::PO::Description&&, WasmEdge_String*&&, WasmEdge_String const*&&)
103
104
  template <typename... ArgsT>
105
  Option(MetaVar &&M, ArgsT &&...Args) noexcept
106
      : Option(std::forward<ArgsT>(Args)...) {
107
    Meta = std::move(M.Value);
108
  }
109
110
  template <typename... ArgsT>
111
  Option(Hidden &&, ArgsT &&...Args) noexcept
112
      : Option(std::forward<ArgsT>(Args)...) {
113
    Hidden = true;
114
  }
115
116
0
  std::string_view description() const noexcept { return Desc; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::description() const
117
118
0
  std::string_view meta() const noexcept { return Meta; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::meta() const
119
120
0
  bool hidden() const noexcept { return Hidden; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::hidden() const
121
122
0
  std::size_t min_narg() const noexcept { return Default != nullptr ? 0 : 1; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::min_narg() const
123
124
0
  std::size_t max_narg() const noexcept { return 1; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::max_narg() const
125
126
  const T &value() const noexcept { return *Store; }
127
0
  T &value() noexcept { return *Store; }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::value()
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::value()
128
129
0
  void default_argument() noexcept {
130
0
    *Store = *Default;
131
0
    Default = nullptr;
132
0
  }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::default_argument()
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::default_argument()
133
134
0
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
135
0
    if (auto Res = Parser<T>::parse(std::move(Argument)); !Res) {
136
0
      return cxx20::unexpected(Res.error());
137
0
    } else {
138
0
      *Store = std::move(*Res);
139
0
    }
140
0
    return {};
141
0
  }
Unexecuted instantiation: WasmEdge::PO::Option<signed char*, WasmEdge::PO::Parser<signed char> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<short*, WasmEdge::PO::Parser<short> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<int*, WasmEdge::PO::Parser<int> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<long*, WasmEdge::PO::Parser<long> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned char*, WasmEdge::PO::Parser<unsigned char> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned short*, WasmEdge::PO::Parser<unsigned short> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned int*, WasmEdge::PO::Parser<unsigned int> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long*, WasmEdge::PO::Parser<unsigned long> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<float*, WasmEdge::PO::Parser<float> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<double*, WasmEdge::PO::Parser<double> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
Unexecuted instantiation: WasmEdge::PO::Option<WasmEdge_String*, WasmEdge::PO::Parser<WasmEdge_String> >::argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
142
143
private:
144
  T *Store;
145
  const T *Default;
146
  std::string_view Desc{};
147
  std::string_view Meta{};
148
  bool Hidden = false;
149
};
150
151
template <> class Option<Toggle, Parser<bool>> {
152
public:
153
38.9k
  Option() {}
154
155
  template <typename... ArgsT>
156
  Option(Description &&D, ArgsT &&...Args) noexcept
157
38.9k
      : Option(std::forward<ArgsT>(Args)...) {
158
38.9k
    Desc = std::move(D.Value);
159
38.9k
  }
160
161
  template <typename... ArgsT>
162
  Option(Hidden &&, ArgsT &&...Args) noexcept
163
      : Option(std::forward<ArgsT>(Args)...) {
164
    Hidden = true;
165
  }
166
167
38.9k
  std::string_view description() const noexcept { return Desc; }
168
169
38.9k
  std::string_view meta() const noexcept { return {}; }
170
171
38.9k
  bool hidden() const noexcept { return Hidden; }
172
173
38.9k
  std::size_t min_narg() const noexcept { return 0; }
174
175
38.9k
  std::size_t max_narg() const noexcept { return 0; }
176
177
1.13k
  const bool &value() const noexcept { return Store; }
178
42.9k
  bool &value() noexcept { return Store; }
179
180
106k
  void default_argument() noexcept { Store = true; }
181
182
0
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
183
0
    if (auto Res = Parser<bool>::parse(std::move(Argument)); !Res) {
184
0
      return cxx20::unexpected(Res.error());
185
0
    } else {
186
0
      Store = std::move(*Res);
187
0
    }
188
0
    return {};
189
0
  }
190
191
private:
192
  bool Store = false;
193
  std::string_view Desc{};
194
  bool Hidden = false;
195
};
196
197
template <> class Option<Toggle *, Parser<bool>> {
198
public:
199
0
  Option(bool *Storage, const bool *) noexcept : Store(Storage) {}
200
201
  template <typename... ArgsT>
202
  Option(Description &&D, ArgsT &&...Args) noexcept
203
0
      : Option(std::forward<ArgsT>(Args)...) {
204
0
    Desc = std::move(D.Value);
205
0
  }
206
207
  template <typename... ArgsT>
208
  Option(Hidden &&, ArgsT &&...Args) noexcept
209
      : Option(std::forward<ArgsT>(Args)...) {
210
    Hidden = true;
211
  }
212
213
0
  std::string_view description() const noexcept { return Desc; }
214
215
0
  std::string_view meta() const noexcept { return {}; }
216
217
0
  bool hidden() const noexcept { return Hidden; }
218
219
0
  std::size_t min_narg() const noexcept { return 0; }
220
221
0
  std::size_t max_narg() const noexcept { return 0; }
222
223
0
  const bool &value() const noexcept { return *Store; }
224
0
  bool &value() noexcept { return *Store; }
225
226
0
  void default_argument() noexcept { *Store = true; }
227
228
0
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
229
0
    if (auto Res = Parser<bool>::parse(std::move(Argument)); !Res) {
230
0
      return cxx20::unexpected(Res.error());
231
0
    } else {
232
0
      *Store = std::move(*Res);
233
0
    }
234
0
    return {};
235
0
  }
236
237
private:
238
  bool *Store;
239
  std::string_view Desc{};
240
  bool Hidden = false;
241
};
242
243
} // namespace PO
244
} // namespace WasmEdge