11 #ifndef __APEX_GENERIC_H__
12 #define __APEX_GENERIC_H__
29 #include <initializer_list>
30 #include <type_traits>
40 class APEX_ProgramCounter;
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>
107 if constexpr (!std::is_null_pointer_v<decltype(C::argnames)>)
111 "Callback argnames size does not match template argument size");
118 myDefaults->mergeUtOptions(&defaults,
false,
true,
true, &mySignature);
132 return findTypeDef<typename C::RunData>();
136 const APEX_Graph *in_graph,
138 APEX_Program *bind_to)
const override
140 if constexpr (std::is_base_of_v<APEX_RunDataErrorBase, typename C::RunData>)
143 castArg<typename C::RunData>(rundata_instance));
165 const auto &derived =
static_cast<const C &
>(*this);
183 template <
typename C,
typename... Ts>
189 if constexpr (!std::is_null_pointer_v<decltype(C::argnames)>)
193 "Callback argnames size does not match template argument size");
224 return findTypeDef<typename C::RunData>();
229 const APEX_Graph *in_graph,
231 APEX_Program *bind_to)
const override
242 const auto &derived =
static_cast<const C &
>(*this);
260 #endif // header guard
static const UT_StringArray argnames
APEX_ProgramCounter * myProgramCounter
#define SYS_STATIC_ASSERT(expr)
constexpr size_t size(const OIIO::span< T, E > &c)
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?
bool closesScope() const
Does this node close a scope?
void addSparePort(const UT_StringRef &name="", exint index=-1)
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 applyArgs(const C &callback, APEX_ArgPtrs &arg_ptrs, std::index_sequence< Index...>)
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()
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.
APEX_Signature makeSignature(UT_Span< const char *const, sizeof...(Ts)> argnames, std::index_sequence< Index...>)
void stealErrors(UT_ErrorManager &err_mgr)
Steal errors from another error manager.
Do nothing; ignored after compilation.