https://mooseframework.inl.gov
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"
20 class GTEST_TEST_CLASS_NAME_(CapabilityTest, negateValue);
21 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, isInstallationType);
22 #endif
23 
24 namespace Moose
25 {
30 {
31 public:
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)
104 
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 
178 private:
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;
192  bool _explicit;
194  std::optional<std::set<std::string>> _enumeration;
195 };
196 
197 #if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
198 void
200 {
201  _explicit = false;
202  _enumeration.reset();
203  _value = false;
204 }
205 #endif
206 }
bool getBoolValue() const
Definition: Capability.C:105
bool hasStringValue() const
Definition: Capability.h:140
int getIntValue() const
Definition: Capability.C:114
std::string _doc
Description for the capability.
Definition: Capability.h:187
const std::set< std::string > & getEnumeration() const
Definition: Capability.C:50
Capability::Value _value
The value the capability is set to.
Definition: Capability.h:189
const std::string * queryStringValue() const
Definition: Capability.h:125
const std::string & getStringValue() const
Definition: Capability.C:123
std::string toString() const
Definition: Capability.C:144
class GTEST_TEST_CLASS_NAME_(CapabilityTest, negateValue)
const int * queryIntValue() const
Definition: Capability.h:121
bool _explicit
Whether or not this capability must be compared explicitly (not as a boolean check) ...
Definition: Capability.h:192
std::variant< bool, int, std::string > Value
A capability can have a bool, int, or string value.
Definition: Capability.h:33
const std::string & getDoc() const
Definition: Capability.h:48
void negateValue()
Negate a Capability value.
Definition: Capability.h:199
An entry for a single capability.
Definition: Capability.h:29
std::string enumerationToString() const
Definition: Capability.C:150
bool hasBoolValue() const
Definition: Capability.h:130
bool hasEnumeration(const std::string &value) const
Definition: Capability.C:44
bool getExplicit() const
Definition: Capability.h:60
FRIEND_TEST(::CapabilityTest, negateValue)
bool hasIntValue() const
Definition: Capability.h:135
const std::optional< std::set< std::string > > & queryEnumeration() const
Definition: Capability.h:67
const std::string & getName() const
Definition: Capability.h:43
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
std::optional< std::set< std::string > > _enumeration
Possible enumeration for the capability, if any (string capabilities only)
Definition: Capability.h:194
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
std::string _name
The name of capability.
Definition: Capability.h:185
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