https://mooseframework.inl.gov
CapabilityRegistry.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 "Capability.h"
13 
14 #include <map>
15 #include <set>
16 #include <string>
17 #include <utility>
18 
19 #ifdef MOOSE_UNIT_TEST
20 class CapabilitiesTest;
21 #endif
22 
23 namespace Moose::internal
24 {
25 
26 class Capabilities;
27 
35 {
36 public:
38  static const std::set<std::string, std::less<>> augmented_capability_names;
39 
40  ~CapabilityRegistry() = default;
41 
43  using RegistryType = std::map<std::string, Capability, std::less<>>;
44 
62  {
65  UNKNOWN = 2,
68  IGNORE = 5
69  };
70 
74  struct CheckResult
75  {
79  std::set<std::string> capability_names;
80  };
81 
85  struct CheckOptions
86  {
88 
90  bool certain;
92  std::set<std::string> ignore_capabilities;
93  };
94 
104  Capability & add(const std::string_view name,
105  const Moose::Capability::Value & value,
106  const std::string_view doc);
107 
113  const Capability * query(std::string capability) const;
115 #if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
116  inline Capability * query(std::string capability);
117 #endif
118 
125  const Capability & get(const std::string & capability) const;
127 #ifdef MOOSE_UNIT_TEST
128  inline Capability & get(const std::string & capability);
129 #endif
130 
135  std::size_t size() const { return _registry.size(); }
136 
161  CheckResult check(
162  std::string requirements,
164 
165 protected:
166 #ifdef MOOSE_UNIT_TEST
167  friend class ::CapabilitiesTest;
168 #endif
169 
172 };
173 
174 #if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
175 Capability *
176 CapabilityRegistry::query(std::string capability)
177 {
178  return const_cast<Capability *>(std::as_const(*this).query(capability));
179 }
180 #endif
181 
182 #ifdef MOOSE_UNIT_TEST
183 Capability &
184 CapabilityRegistry::get(const std::string & capability)
185 {
186  return const_cast<Capability &>(std::as_const(*this).get(capability));
187 }
188 #endif
189 } // namespace Moose::internal
const Capability & get(const std::string &capability) const
Get a capability.
std::map< std::string, Capability, std::less<> > RegistryType
Type for the registry.
std::variant< bool, int, std::string > Value
A capability can have a bool, int, or string value.
Definition: Capability.h:33
std::set< std::string > ignore_capabilities
Capabilities to ignore; checks using them will always pass.
RegistryType _registry
Registry storage.
Capability & add(const std::string_view name, const Moose::Capability::Value &value, const std::string_view doc)
Add a capability.
An entry for a single capability.
Definition: Capability.h:29
Storage for the result from check().
CheckResult check(std::string requirements, const CapabilityRegistry::CheckOptions &options=CapabilityRegistry::CheckOptions()) const
Checks if a set of requirements is satisified by the capabilities.
Registry of capabilities that checks capability requirements.
bool certain
Whether or not all capabilities must be known.
static const std::set< std::string, std::less<> > augmented_capability_names
Capabilities that are reserved and can only be augmented.
const Capability * query(std::string capability) const
Query a capability, if it exists, otherwise nullptr.
std::set< std::string > capability_names
The capability names that existed in the check string.