https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Capability.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include <optional>
13#include <set>
14#include <string>
15#include <variant>
16
17#ifdef MOOSE_UNIT_TEST
18// forward declare unit tests
19#include "gtest/gtest.h"
20class GTEST_TEST_CLASS_NAME_(CapabilityTest, negateValue);
21class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, isInstallationType);
22#endif
23
24namespace Moose
25{
30{
31public:
33 using Value = std::variant<bool, int, std::string>;
34
35 Capability() = delete;
36 Capability(const std::string_view name,
37 const Capability::Value & value,
38 const std::string_view doc);
39
43 const std::string & getName() const { return _name; }
44
48 const std::string & getDoc() const { return _doc; }
49
53 const Capability::Value & getValue() const { return _value; }
54
60 bool getExplicit() const { return _explicit; }
61
67 const std::optional<std::set<std::string>> & queryEnumeration() const { return _enumeration; }
68
76 const std::set<std::string> & getEnumeration() const;
77
85 bool hasEnumeration(const std::string & value) const;
86
95
101 Capability & setEnumeration(const std::set<std::string> & enumeration);
102
103#if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
111 inline void negateValue();
112#endif
113
117 const bool * queryBoolValue() const { return std::get_if<bool>(&_value); }
121 const int * queryIntValue() const { return std::get_if<int>(&_value); }
125 const std::string * queryStringValue() const { return std::get_if<std::string>(&_value); }
126
130 bool hasBoolValue() const { return std::holds_alternative<bool>(_value); }
131
135 bool hasIntValue() const { return std::holds_alternative<int>(_value); }
136
140 bool hasStringValue() const { return std::holds_alternative<std::string>(_value); }
141
147 bool getBoolValue() const;
153 int getIntValue() const;
159 const std::string & getStringValue() const;
160
164 std::string valueToString() const;
165
169 std::string toString() const;
170
176 std::string enumerationToString() const;
177
178private:
179#ifdef MOOSE_UNIT_TEST
180 FRIEND_TEST(::CapabilityTest, negateValue);
181 FRIEND_TEST(::CapabilitiesTest, isInstallationType);
182#endif
183
185 std::string _name;
187 std::string _doc;
194 std::optional<std::set<std::string>> _enumeration;
195};
196
197#if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
198void
200{
201 _explicit = false;
202 _enumeration.reset();
203 _value = false;
204}
205#endif
206}
class GTEST_TEST_CLASS_NAME_(CapabilityTest, negateValue)
An entry for a single capability.
Definition Capability.h:30
const std::string & getName() const
Definition Capability.h:43
std::string _name
The name of capability.
Definition Capability.h:185
std::string enumerationToString() const
Definition Capability.C:150
std::string _doc
Description for the capability.
Definition Capability.h:187
const std::string & getDoc() const
Definition Capability.h:48
std::string toString() const
Definition Capability.C:144
bool hasStringValue() const
Definition Capability.h:140
std::optional< std::set< std::string > > _enumeration
Possible enumeration for the capability, if any (string capabilities only)
Definition Capability.h:194
FRIEND_TEST(::CapabilitiesTest, isInstallationType)
const std::set< std::string > & getEnumeration() const
Definition Capability.C:50
bool hasIntValue() const
Definition Capability.h:135
const std::optional< std::set< std::string > > & queryEnumeration() const
Definition Capability.h:67
std::variant< bool, int, std::string > Value
A capability can have a bool, int, or string value.
Definition Capability.h:33
void negateValue()
Negate a Capability value.
Definition Capability.h:199
int getIntValue() const
Definition Capability.C:114
bool _explicit
Whether or not this capability must be compared explicitly (not as a boolean check)
Definition Capability.h:192
Capability::Value _value
The value the capability is set to.
Definition Capability.h:189
const int * queryIntValue() const
Definition Capability.h:121
const std::string & getStringValue() const
Definition Capability.C:123
Capability & setExplicit()
Set the capability to be explicit.
Definition Capability.C:59
const Capability::Value & getValue() const
Definition Capability.h:53
std::string valueToString() const
Definition Capability.C:132
FRIEND_TEST(::CapabilityTest, negateValue)
bool hasBoolValue() const
Definition Capability.h:130
const bool * queryBoolValue() const
Definition Capability.h:117
Capability & setEnumeration(const std::set< std::string > &enumeration)
Set the enumeration (allowed values) for the capability.
Definition Capability.C:69
bool getExplicit() const
Definition Capability.h:60
bool hasEnumeration(const std::string &value) const
Definition Capability.C:44
const std::string * queryStringValue() const
Definition Capability.h:125
bool getBoolValue() const
Definition Capability.C:105
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...