corenodes.h File Reference

Classes

struct  PortInfo
 
class  CoreNodeBaseInterface
 
class  CoreNodeInterface
 
class  MicroNodeGroupInterface
 
struct  MicroNodeGroupInterface::PrivateAutoCreatePortInfo
 
class  CoreNodeGroupInterface
 
struct  CoreNodeFactoryFunctionHelper< SINGLE_PARAM >
 
struct  CoreNodeFactoryFunctionHelper< true >
 
struct  SetParameters< CORENODE, typename >
 
struct  SetParameters< CORENODE, typename SFINAEHelper< void, typename CORENODE::Parameters >::type >
 

Namespaces

 maxon
 
 maxon::corenodes
 
 maxon::corenodes::details
 

Macros

#define PRIVATE_MAXON_REGISTER_CORE_NODE_A(name, cls, initMetadata, line, ...)
 
#define PRIVATE_MAXON_REGISTER_CORE_NODE(name, cls, meta, line, ...)
 
#define MAXON_CORENODE_REGISTER(CLS, id, ...)
 
#define MAXON_CORENODE_REGISTER_WITH_METADATA(CLS, id, META, ...)
 
#define MAXON_CORENODE_REGISTER_PURE(CLS, id, ...)
 
#define MAXON_CORENODE_REGISTER_PURE_WITH_METADATA(CLS, id, META, ...)
 

Typedefs

using CoreNodeFactory = Factory< CoreNode(const DataDictionary &)>
 
using Optimizer = Delegate< Result< Opt< OptimizationInfo > >(const CoreNode &node, const Block< const Tuple< TrivialDataPtr, CORENODE_PORT_FLAGS > > &args)>
 

Functions

 MAXON_INTERNED_ID ("Root", RootNodeId)
 
template<typename N , typename... ARGS>
Result< typename std::decay< typename GetSignature< decltype(&N::Init)>::Parameters::template At< 0 >::type >::typeCreateNode (OverloadRank0, const Id &nodeId, ARGS &&... args)
 
template<typename N , typename = decltype(&N::GetPortType), typename... ARGS>
Result< typename std::decay< typename GetSignature< decltype(&N::Init)>::Parameters::template At< 0 >::type >::typeCreateNode (OverloadRank1, const Id &nodeId, ARGS &&... args)
 
template<typename N , typename... ARGS>
Result< CoreNode > CreateNode (const Id &nodeId, ARGS &&... args)
 
template<typename N >
Result< CoreNode > CreateNode ()
 
 MAXON_MEMBERFUNCTION_DETECTOR (Optimize)
 
template<typename NODE , typename = typename std::enable_if<maxon::corenodes::details::HasOptimize<NODE>::value>::type>
Result< void > AddOptimizer (DataDictionary &meta, Bool dummy=false)
 
template<typename NODE , typename = typename std::enable_if<!maxon::corenodes::details::HasOptimize<NODE>::value>::type>
ResultOk< void > AddOptimizer (DataDictionary &meta)
 
 MAXON_REGISTRY (CoreNodeFactory, CoreNodes, "net.maxon.corenode.registry.corenodes")
 
template<typename CORENODE >
Result< CoreNodeFactory > CreateCoreNodeFactory (DataDictionary &&meta=DataDictionary())
 

Variables

 NONE
 
 DEEP
 
 PORTS
 
 NANO_EMBEDDED
 
 NANO
 
 BLOCK
 
 HIDDEN_PORTS
 
 VERBOSE
 

Macro Definition Documentation

◆ PRIVATE_MAXON_REGISTER_CORE_NODE_A

#define PRIVATE_MAXON_REGISTER_CORE_NODE_A (   name,
  cls,
  initMetadata,
  line,
  ... 
)

◆ PRIVATE_MAXON_REGISTER_CORE_NODE

#define PRIVATE_MAXON_REGISTER_CORE_NODE (   name,
  cls,
  meta,
  line,
  ... 
)

◆ MAXON_CORENODE_REGISTER

#define MAXON_CORENODE_REGISTER (   CLS,
  id,
  ... 
)

Registers the given core node implementation class #CLS at the CoreNodes registry. The class has to contain an Init function with one or two parameters where the first parameter is either a MicroNodeGroupRef or a CoreNodeGroupRef and the optional second one is a DataDictionary which receives the parameters given to the factory's Create method. For an example of such a class have a look at MicroNodeGroupInterface.

Parameters
[in]CLSThe class which implements the node. It has to contain an Init function with either a MicroNodeGroupRef or a CoreNodeGroupRef as first parameter. If CLS is a class template, you have to specify the template arguments in ...
[in]idThe identifier to use for the registry entry.
[in]...Optional template arguments if CLS is a class template. The identifier will be extended by the arguments, see IdBuilder.

◆ MAXON_CORENODE_REGISTER_WITH_METADATA

#define MAXON_CORENODE_REGISTER_WITH_METADATA (   CLS,
  id,
  META,
  ... 
)

Registers the given core node implementation class #CLS at the CoreNodes registry. The class has to contain an Init function with one or two parameters where the first parameter is either a MicroNodeGroupRef or a CoreNodeGroupRef and the optional second one is a DataDictionary which receives the parameters given to the factory's Create method. For an example of such a class have a look at MicroNodeGroupInterface.

Parameters
[in]CLSThe class which implements the node. It has to contain an Init function with either a MicroNodeGroupRef or a CoreNodeGroupRef as first parameter. If CLS is a class template, you have to specify the template arguments in ...
[in]idThe identifier to use for the registry entry.
[in]METAAdditional code to set up meta data for the core node. Within the code you have access to the variable #meta of type DataDictionary which is used to setup the factory's meta data. The meta data can be accessed later through the factory's base interface DataDictionaryObjectInterface.
[in]...Optional template arguments if CLS is a class template. The identifier will be extended by the arguments, see IdBuilder.

◆ MAXON_CORENODE_REGISTER_PURE

#define MAXON_CORENODE_REGISTER_PURE (   CLS,
  id,
  ... 
)

Registers the given core node implementation class #CLS at the CoreNodes registry, see MAXON_CORENODE_REGISTER. This macro should be used for core nodes which implement a pure function, it sets the CoreNodeInterface::Pure attribute of the factory to true.

Parameters
[in]CLSThe class which implements the node. It has to contain an Init function with either a MicroNodeGroupRef or a CoreNodeGroupRef as first parameter. If CLS is a class template, you have to specify the template arguments in ...
[in]idThe identifier to use for the registry entry.
[in]...Optional template arguments if CLS is a class template. The identifier will be extended by the arguments, see IdBuilder.

◆ MAXON_CORENODE_REGISTER_PURE_WITH_METADATA

#define MAXON_CORENODE_REGISTER_PURE_WITH_METADATA (   CLS,
  id,
  META,
  ... 
)

Registers the given core node implementation class #CLS at the CoreNodes registry, see MAXON_CORENODE_REGISTER_WITH_METADATA. This macro should be used for core nodes which implement a pure function, it sets the CoreNodeInterface::Pure attribute of the factory to true.

Parameters
[in]CLSThe class which implements the node. It has to contain an Init function with either a MicroNodeGroupRef or a CoreNodeGroupRef as first parameter. If CLS is a class template, you have to specify the template arguments in ...
[in]idThe identifier to use for the registry entry.
[in]METAAdditional code to set up meta data for the core node. Within the code you have access to the variable #meta of type DataDictionary which is used to setup the factory's meta data. The meta data can be accessed later through the factory's base interface DataDictionaryObjectInterface.
[in]...Optional template arguments if CLS is a class template. The identifier will be extended by the arguments, see IdBuilder.

Variable Documentation

◆ NONE

NONE

No flags.

◆ DEEP

DEEP

Write groups deeply, so the complete graph is written up to the micro node level.

◆ PORTS

PORTS

Include ports.

◆ NANO_EMBEDDED

NANO_EMBEDDED

Write nano nodes embedded in their micro nodes.

◆ NANO

NANO

Write the nano graph instead of the core node graph.

◆ BLOCK

BLOCK

Write the compiled block graph instead of the core node graph.

◆ HIDDEN_PORTS

HIDDEN_PORTS

Include hidden ports.

◆ VERBOSE

VERBOSE

Verbose output with a lot of information.