11 #ifndef __APEX_GENERIC_H__
12 #define __APEX_GENERIC_H__
29 #include <initializer_list>
31 #include <type_traits>
49 void initializeFromCompileArguments(
50 const APEX_Graph *in_graph,
52 APEX_Program *bind_to);
55 template <
typename... Args>
58 addError(fmt, {args...});
62 template <
typename... Args>
65 addWarning(fmt, {args...});
69 template <
typename... Args>
72 addMessage(fmt, {args...});
84 myErrorManager->stealErrors(err_mgr);
88 void addError(
const char *fmt, std::initializer_list<UT::Format::ArgValue>
args)
const;
89 void addWarning(
const char *fmt, std::initializer_list<UT::Format::ArgValue>
args)
const;
90 void addMessage(
const char *fmt, std::initializer_list<UT::Format::ArgValue>
args)
const;
101 template <
typename C,
typename... Ts>
111 myDefaults->mergeUtOptions(&defaults,
false,
true,
true, &mySignature);
125 return findTypeDef<typename C::RunData>();
129 const APEX_Graph *in_graph,
131 APEX_Program *bind_to)
const override
133 if constexpr (std::is_base_of_v<APEX_RunDataErrorBase, typename C::RunData>)
136 castArg<typename C::RunData>(rundata_instance));
157 auto cast_args = castArgs<RunDataT, std::remove_const_t<Ts>...>(arg_ptrs);
158 auto ref_args =
makerefs(cast_args);
160 const auto &derived =
static_cast<const C &
>(*this);
162 std::apply(derived, ref_args);
182 template <
typename C,
typename... Ts>
202 return findTypeDef<typename C::RunData>();
206 const APEX_Graph *in_graph,
208 APEX_Program *bind_to)
const override
212 static_cast<APEX_Context *
>(castArg<typename C::RunData>(rundata_instance))
218 myFullSignature = mySignature;
226 myFullSignature.
myInputs.
append({theSparePortName.asRef(),
nullptr});
230 return myFullSignature;
236 auto cast_args = castArgs<RunDataT, std::remove_const_t<Ts>...>(arg_ptrs);
237 auto ref_args =
makerefs(cast_args);
239 const auto &derived =
static_cast<const C &
>(*this);
241 std::apply(derived, ref_args);
259 #endif // header guard
static const UT_StringArray argnames
#define SYS_STATIC_ASSERT(expr)
void addError(const char *fmt, const Args &...args) const
Add a string error using format()-style arguments.
const UT_ErrorManager & errorManager() const
bool opensScope() const
Does this node open a scope?
auto makerefs(UT_Tuple< T...> &t)
bool closesScope() const
Does this node close a scope?
void runDataCompileHook(APEX_Argument *rundata_instance, const APEX_Graph *in_graph, APEX_NodeID for_node, APEX_Program *bind_to) const override
Called for any type with rundata with a reference to the rundata so it can be initialized.
~APEX_GenericFunctionContext() override
void execute(APEX_ArgPtrs &arg_ptrs) const override
const UT_StringHolder & getName() const override
#define utZoneScopedN(name)
bool setFromPyDictionary(const char *dict)
static constexpr const char * parm_defaults
void initializeFromCompileArguments(const APEX_Graph *in_graph, APEX_NodeID for_node, APEX_Program *bind_to)
~APEX_GenericFunctionRunData() override
exint insertAt(const T &t, exint index)
void runDataCompileHook(APEX_Argument *rundata_instance, const APEX_Graph *in_graph, APEX_NodeID for_node, APEX_Program *bind_to) const override
Called for any type with rundata with a reference to the rundata so it can be initialized.
APEX_CallbackType callbackType() const override=0
What kind of function is this? Informs things like scopes & conditions.
const APEX_Signature & signature() const override
SYS_FORCE_INLINE const char * c_str() const
const APEX_TypeDefinitionBase * runDataTypeDef() const override
GLuint const GLchar * name
APEX_GenericFunctionRunData()
const APEX_Signature & signature() const override
void addSparePort(const UT_StringRef &name="", exint index=-1)
APEX_CallbackType callbackType() const override
What kind of function is this? Informs things like scopes & conditions.
const Dict & parmDefaults() const override
A map of string to various well defined value types.
const APEX_TypeDefinitionBase * runDataTypeDef() const override
static const UT_StringLit funcname
virtual UT_StringHolder scopeConnection() const
Name of the fake wire which is used to denote scope relationships.
void addWarning(const char *fmt, const Args &...args) const
Add a string warning using format()-style arguments.
APEX_GenericFunctionContext()
auto makeSignature(const char *const argnames[sizeof...(Ts)], std::index_sequence< Index...>)
A global error manager scope.
**If you just want to fire and args
const UT_StringHolder & getName() const override
void addSparePort(const UT_StringRef &name="", exint index=-1)
Represents a location for a single object inside of an APEX_Buffer.
const UT_StringHolder & nodePath() const
void execute(APEX_ArgPtrs &arg_ptrs) const override
void addMessage(const char *fmt, const Args &...args) const
Add a string message using format()-style arguments.
void stealErrors(UT_ErrorManager &err_mgr)
Steal errors from another error manager.
Do nothing; ignored after compilation.