26 virtual std::unique_ptr<FunctorWrapperHostBase>
build(
const void *
object)
const = 0;
29template <
typename Object>
33 std::unique_ptr<FunctorWrapperHostBase>
build(
const void *
object)
const override final
35 return std::make_unique<FunctorWrapperHost<Object>>(object);
47 virtual std::unique_ptr<FunctionWrapperHostBase>
build(
const void *
object)
const = 0;
50template <
typename Object>
54 std::unique_ptr<FunctionWrapperHostBase>
build(
const void *
object)
const override final
56 return std::make_unique<FunctionWrapperHost<Object>>(object);
76 template <
typename Object>
89 template <
typename Object>
103 static std::unique_ptr<FunctorWrapperHostBase>
buildFunctor(
const void *
object,
104 const std::string & name)
108 mooseError(
"Kokkos functor not registered for type '",
110 "'. Double check that you used Kokkos-specific registration macro.");
112 return it->second->build(
object);
121 static std::unique_ptr<FunctionWrapperHostBase>
buildFunction(
const void *
object,
122 const std::string & name)
126 mooseError(
"Kokkos function not registered for type '",
128 "'. Double check that you used Kokkos-specific registration macro.");
130 return it->second->build(
object);
144 std::map<std::string, std::unique_ptr<FunctorRegistryEntryBase>>
_functors;
149 std::map<std::string, std::unique_ptr<FunctionRegistryEntryBase>>
_functions;
154#define registerKokkosFunction(app, classname) \
155 registerMooseObject(app, classname); \
156 static char combineNames(kokkos_functor_##classname, __COUNTER__) = \
157 Moose::Kokkos::FunctorRegistry::addFunctor<classname>(#classname); \
158 static char combineNames(kokkos_function_##classname, __COUNTER__) = \
159 Moose::Kokkos::FunctorRegistry::addFunction<classname>(#classname)
161#define registerKokkosFunctionAliased(app, classname, alias) \
162 registerMooseObjectAliased(app, classname, alias); \
163 static char combineNames(kokkos_functor_##classname, __COUNTER__) = \
164 Moose::Kokkos::FunctorRegistry::addFunctor<classname>(alias); \
165 static char combineNames(kokkos_function_##classname, __COUNTER__) = \
166 Moose::Kokkos::FunctorRegistry::addFunction<classname>(alias)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
virtual ~FunctionRegistryEntryBase()
virtual std::unique_ptr< FunctionWrapperHostBase > build(const void *object) const =0
Build a host wrapper for this function.
std::unique_ptr< FunctionWrapperHostBase > build(const void *object) const override final
Build a host wrapper for this function.
virtual std::unique_ptr< FunctorWrapperHostBase > build(const void *object) const =0
Build a host wrapper for this functor.
virtual ~FunctorRegistryEntryBase()
std::unique_ptr< FunctorWrapperHostBase > build(const void *object) const override final
Build a host wrapper for this functor.
static std::unique_ptr< FunctorWrapperHostBase > buildFunctor(const void *object, const std::string &name)
Build and get a host wrapper of a functor.
FunctorRegistry & operator=(FunctorRegistry &&)=delete
static char addFunction(const std::string &name)
Register a function.
static FunctorRegistry & getRegistry()
Get the registry singleton.
static char addFunctor(const std::string &name)
Register a functor.
FunctorRegistry(FunctorRegistry &&)=delete
FunctorRegistry(FunctorRegistry const &)=delete
FunctorRegistry & operator=(FunctorRegistry const &)=delete
std::map< std::string, std::unique_ptr< FunctorRegistryEntryBase > > _functors
Map containing the host wrapper shells of functors with the key being the registered object type name...
FunctorRegistry()=default
static std::unique_ptr< FunctionWrapperHostBase > buildFunction(const void *object, const std::string &name)
Build and get a host wrapper of a function.
std::map< std::string, std::unique_ptr< FunctionRegistryEntryBase > > _functions
Map containing the host wrapper shells of functions with the key being the registered object type nam...