https://mooseframework.inl.gov
ParameterRegistry.C
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 #include "Moose.h"
11 
12 #include "ParameterRegistry.h"
13 
14 namespace Moose
15 {
16 ParameterRegistry &
18 {
19  static ParameterRegistry * registry = nullptr;
20  if (!registry)
22  return *registry;
23 }
24 
25 void
26 ParameterRegistry::set(libMesh::Parameters::Value & value, const hit::Field & field) const
27 {
28  const auto key = value.type();
29  const auto it = _registry.find(key);
30  if (it == _registry.end())
31  mooseError("ParameterRegistry::set(): Parameter type '", key, "' is not registered");
32 
33  // Catch all mooseErrors so that they can be accumulated during
34  // parsing and building instead of ending the run
35  Moose::ScopedThrowOnError scoped_throw_on_error;
36 
37  it->second(value, field);
38 }
39 }
void set(libMesh::Parameters::Value &value, const hit::Field &field) const
Sets a parameter value given a hit field.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:323
static Moose::ParameterRegistry & registry
Registry that allows for the typeless setting of a parameter value from a hit field.
ParameterRegistry()
Constructor; private so that it can only be created with the singleton.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
std::map< std::string, std::function< void(libMesh::Parameters::Value &value, const hit::Field &)> > _registry
Registration map of type -> function to fill each type.
Scoped helper for setting Moose::_throw_on_error during this scope.
Definition: Moose.h:294
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
static ParameterRegistry & get()
Get the singleton registry.