https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
20class CapabilitiesTest;
21#endif
22
23namespace Moose::internal
24{
25
26class Capabilities;
27
35{
36public:
38 static const std::set<std::string, std::less<>> augmented_capability_names;
39
41
43 using RegistryType = std::map<std::string, Capability, std::less<>>;
44
70
75 {
79 std::set<std::string> capability_names;
80 };
81
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
114 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
119
126 const Capability & get(const std::string & capability) const;
127#ifdef MOOSE_UNIT_TEST
128 inline Capability & get(const std::string & capability);
129#endif
131
135 std::size_t size() const { return _registry.size(); }
136
161 CheckResult check(
162 std::string requirements,
164
165protected:
166#ifdef MOOSE_UNIT_TEST
167 friend class ::CapabilitiesTest;
168#endif
169
172};
173
174#if defined(MOOSE_UNIT_TEST) || defined(FOR_PYCAPABILITIES)
176CapabilityRegistry::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
184CapabilityRegistry::get(const std::string & capability)
185{
186 return const_cast<Capability &>(std::as_const(*this).get(capability));
187}
188#endif
189} // namespace Moose::internal
An entry for a single capability.
Definition Capability.h:30
std::variant< bool, int, std::string > Value
A capability can have a bool, int, or string value.
Definition Capability.h:33
Registry of capabilities that checks capability requirements.
CheckResult check(std::string requirements, const CapabilityRegistry::CheckOptions &options=CapabilityRegistry::CheckOptions()) const
Checks if a set of requirements is satisified by the capabilities.
const Capability * query(std::string capability) const
Query a capability, if it exists, otherwise nullptr.
static const std::set< std::string, std::less<> > augmented_capability_names
Capabilities that are reserved and can only be augmented.
std::map< std::string, Capability, std::less<> > RegistryType
Type for the registry.
RegistryType _registry
Registry storage.
Capability & add(const std::string_view name, const Moose::Capability::Value &value, const std::string_view doc)
Add a capability.
const Capability & get(const std::string &capability) const
Get a capability.
std::set< std::string > ignore_capabilities
Capabilities to ignore; checks using them will always pass.
bool certain
Whether or not all capabilities must be known.
std::set< std::string > capability_names
The capability names that existed in the check string.