Coverage Report

Created: 2025-07-01 06:18

/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
0
  Option() noexcept {}
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()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option()
32
33
  template <typename... ArgsT>
34
  Option(Description &&D, ArgsT &&...Args) noexcept
35
0
      : Option(std::forward<ArgsT>(Args)...) {
36
0
    Desc = std::move(D.Value);
37
0
  }
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::MetaVar>(WasmEdge::PO::Description&&, WasmEdge::PO::MetaVar&&)
Unexecuted instantiation: 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>&&)
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
0
      : Option(std::forward<ArgsT>(Args)...) {
42
0
    Meta = std::move(M.Value);
43
0
  }
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::MetaVar&&)
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option<WasmEdge::PO::DefaultValue<unsigned long> >(WasmEdge::PO::MetaVar&&, WasmEdge::PO::DefaultValue<unsigned long>&&)
44
45
  template <typename... ArgsT>
46
  Option(DefaultValue<T> &&V, ArgsT &&...Args) noexcept
47
0
      : Option(std::forward<ArgsT>(Args)...) {
48
0
    Default.emplace(std::move(V.Value));
49
0
  }
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::Option<>(WasmEdge::PO::DefaultValue<unsigned long>&&)
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
0
  std::string_view description() const noexcept { return Desc; }
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> > > >::description() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::description() const
58
59
0
  std::string_view meta() const noexcept { return Meta; }
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> > > >::meta() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::meta() const
60
61
0
  bool hidden() const noexcept { return Hidden; }
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> > > >::hidden() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::hidden() const
62
63
0
  std::size_t min_narg() const noexcept { return Default.has_value() ? 0 : 1; }
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> > > >::min_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::min_narg() const
64
65
0
  std::size_t max_narg() const noexcept { return 1; }
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> > > >::max_narg() const
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::max_narg() const
66
67
  const T &value() const noexcept { return Store; }
68
0
  T &value() noexcept { return Store; }
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> > > >::value()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::value()
69
70
0
  void default_argument() noexcept {
71
0
    Store = std::move(*Default);
72
0
    Default.reset();
73
0
  }
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()
Unexecuted instantiation: WasmEdge::PO::Option<unsigned long, WasmEdge::PO::Parser<unsigned long> >::default_argument()
74
75
0
  cxx20::expected<void, Error> argument(std::string Argument) noexcept {
76
0
    if (auto Res = Parser<T>::parse(std::move(Argument)); !Res) {
77
0
      return cxx20::unexpected(Res.error());
78
0
    } else {
79
0
      Store = std::move(*Res);
80
0
    }
81
0
    return {};
82
0
  }
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> > > >::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> >)
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
0
  Option() {}
154
155
  template <typename... ArgsT>
156
  Option(Description &&D, ArgsT &&...Args) noexcept
157
0
      : Option(std::forward<ArgsT>(Args)...) {
158
0
    Desc = std::move(D.Value);
159
0
  }
160
161
  template <typename... ArgsT>
162
  Option(Hidden &&, ArgsT &&...Args) noexcept
163
      : Option(std::forward<ArgsT>(Args)...) {
164
    Hidden = true;
165
  }
166
167
0
  std::string_view description() const noexcept { return Desc; }
168
169
0
  std::string_view meta() const noexcept { return {}; }
170
171
0
  bool hidden() const noexcept { return Hidden; }
172
173
0
  std::size_t min_narg() const noexcept { return 0; }
174
175
0
  std::size_t max_narg() const noexcept { return 0; }
176
177
0
  const bool &value() const noexcept { return Store; }
178
0
  bool &value() noexcept { return Store; }
179
180
0
  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