https://mooseframework.inl.gov
Capabilities.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 "CapabilityUtils.h"
13 
14 #ifdef MOOSE_UNIT_TEST
15 // forward declare unit tests
16 #include "gtest/gtest.h"
17 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, boolTest);
18 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, intTest);
19 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, stringTest);
20 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, versionTest);
21 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, multipleTest);
22 class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, parseFail);
23 #endif
24 
25 namespace Moose
26 {
27 
36 {
37 public:
38  virtual ~Capabilities() {}
39 
41 
43  void add(const std::string & capability, CapabilityUtils::Type value, const std::string & doc);
44  void add(const std::string & capability, const char * value, const char * doc);
45 
47  std::string dump() const;
48 
50  CapabilityUtils::Result check(const std::string & requested_capabilities) const;
51 
53  Capabilities(Capabilities const &) = delete;
54  Capabilities & operator=(Capabilities const &) = delete;
55 
56  Capabilities(Capabilities &&) = delete;
57  Capabilities & operator=(Capabilities &&) = delete;
59 
60 protected:
66  std::map<std::string, std::pair<CapabilityUtils::Type, std::string>> _capability_registry;
67 
68 private:
69  // Private constructor for singleton pattern
71 
72 #ifdef MOOSE_UNIT_TEST
73  FRIEND_TEST(::CapabilitiesTest, boolTest);
74  FRIEND_TEST(::CapabilitiesTest, intTest);
75  FRIEND_TEST(::CapabilitiesTest, stringTest);
76  FRIEND_TEST(::CapabilitiesTest, versionTest);
77  FRIEND_TEST(::CapabilitiesTest, multipleTest);
78  FRIEND_TEST(::CapabilitiesTest, parseFail);
79 #endif
80 };
81 
82 } // namespace Moose
This singleton class holds a registry for capabilities supported by the current app.
Definition: Capabilities.h:35
virtual ~Capabilities()
Definition: Capabilities.h:38
class GTEST_TEST_CLASS_NAME_(CapabilitiesTest, boolTest)
CapabilityUtils::Result check(const std::string &requested_capabilities) const
check if the given required capabilities are fulfilled, returns a bool, a reason, and a verbose docum...
Definition: Capabilities.C:82
std::tuple< CheckState, std::string, std::string > Result
Result from a capability check: the state, the reason, and the documentation.
std::string dump() const
create a JSON dump of the capabilities registry
Definition: Capabilities.C:62
Capabilities & operator=(Capabilities const &)=delete
static Capabilities & getCapabilityRegistry()
Definition: Capabilities.C:22
FRIEND_TEST(::CapabilitiesTest, boolTest)
std::variant< bool, int, std::string > Type
A capability can have a bool, int, or string value.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
void add(const std::string &capability, CapabilityUtils::Type value, const std::string &doc)
register a new capability
Definition: Capabilities.C:33
std::map< std::string, std::pair< CapabilityUtils::Type, std::string > > _capability_registry
Capability registry.
Definition: Capabilities.h:66