Vuo  2.0.0
Public Member Functions | List of all members
VuoCompilerNode Class Reference

Description

The compiler detail class for VuoNode.

Definition at line 25 of file VuoCompilerNode.hh.

Public Member Functions

 VuoCompilerNode (VuoNode *baseNode)
 Creates a compiler detail for the specified baseNode. More...
 
void setIndexInOrderedNodes (size_t indexInOrderedNodes)
 Tells the node its index in VuoCompilerBitcodeGenerator::orderedNodes. More...
 
size_t getIndexInOrderedNodes (void)
 Returns the node's index in VuoCompilerBitcodeGenerator::orderedNodes. More...
 
void setConstantStringCache (VuoCompilerConstantStringCache *constantStrings)
 Sets the cache used to generate constant string values. More...
 
Value * generateIdentifierValue (Module *module)
 Generates a constant char * value consisting of the node's identifier. More...
 
Value * generateSubcompositionIdentifierValue (Module *module, BasicBlock *block, Value *compositionIdentifierValue)
 Generates a char * value prefixed with compositionIdentifierValue and suffixed with this node's identifier. More...
 
Value * generateGetContext (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates code to look up the NodeContext * indexed under this node's full identifier (prefixed with the composition's identifier). More...
 
void generateAddMetadata (Module *module, BasicBlock *block, Value *compositionStateValue, const vector< VuoCompilerType * > &orderedTypes, Function *compositionCreateContextForNode, Function *compositionSetPortValueFunction, Function *compositionGetPortValueFunction, Function *compositionFireTriggerPortEventFunction, Function *compositionReleasePortDataFunction)
 Generates code to register metadata for this node and each of its ports with the runtime. More...
 
Value * generateCreateContext (Module *module, BasicBlock *block)
 Generates code to create the node context for this node and the port context for each of its ports. More...
 
void generateEventFunctionCall (Module *module, Function *function, BasicBlock *&currentBlock, Value *compositionStateValue)
 Generates a call to nodeEvent or nodeInstanceEvent. More...
 
void generateInitFunctionCall (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates a call to nodeInstanceInit, stores the return value into the node's instance data, and retains the node's instance data. More...
 
void generateFiniFunctionCall (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates a call to nodeInstanceFini and releases the node's instance data. More...
 
void generateCallbackStartFunctionCall (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates a call to nodeInstanceTriggerStart, if the function exists. More...
 
void generateCallbackUpdateFunctionCall (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates a call to nodeInstanceTriggerUpdate, if the function exists. More...
 
void generateCallbackStopFunctionCall (Module *module, BasicBlock *block, Value *compositionStateValue)
 Generates a call to nodeInstanceTriggerStop, if the function exists. More...
 
Value * generateReceivedEventCondition (Module *module, BasicBlock *block, Value *nodeContextValue)
 Generates a condition that is true if any of this node's input event ports have received an event. More...
 
Value * generateReceivedEventCondition (Module *module, BasicBlock *block, Value *nodeContextValue, vector< VuoPort * > selectedInputPorts, const map< VuoCompilerEventPort *, Value * > &portContextForEventPort=(map< VuoCompilerEventPort *, Value * >()))
 Generates a condition that is true if any of the given input event ports of this node have received an event. More...
 
VuoCompilerInstanceDatagetInstanceData (void)
 If this node is stateful, returns the instance data. More...
 
string getIdentifier (void)
 Returns the identifier prefix in the generated LLVM bitcode for this node instance. More...
 
string getGraphvizIdentifierPrefix (void)
 Returns a suggested UpperCamelCase prefix for the node's Graphviz identifier, based on its title. More...
 
void setGraphvizIdentifier (string graphvizIdentifier)
 Sets the identifier that will appear in .vuo (Graphviz dot format) files. More...
 
string getGraphvizIdentifier (void)
 Gets the identifier that will appear in .vuo (Graphviz dot format) files. More...
 
string getGraphvizDeclaration (bool shouldPrintPosition=false, double xPositionOffset=0, double yPositionOffset=0, VuoPort *manuallyFirableInputPort=nullptr)
 Returns a string containing the declaration for this node as it would appear in a .vuo (Graphviz dot format) file. More...
 
- Public Member Functions inherited from VuoBaseDetail< VuoNode >
 VuoBaseDetail (string description, VuoNode *base)
 Creates a detail class. More...
 
VuoNodegetBase (void) const
 Returns the detail class instance's base class instance. More...
 
void setBase (VuoNode *base)
 Sets the detail class instance's base class instance. More...
 

Constructor & Destructor Documentation

◆ VuoCompilerNode()

VuoCompilerNode::VuoCompilerNode ( VuoNode baseNode)

Creates a compiler detail for the specified baseNode.

Definition at line 32 of file VuoCompilerNode.cc.

Member Function Documentation

◆ generateAddMetadata()

void VuoCompilerNode::generateAddMetadata ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue,
const vector< VuoCompilerType * > &  orderedTypes,
Function *  compositionCreateContextForNode,
Function *  compositionSetPortValueFunction,
Function *  compositionGetPortValueFunction,
Function *  compositionFireTriggerPortEventFunction,
Function *  compositionReleasePortDataFunction 
)

Generates code to register metadata for this node and each of its ports with the runtime.

If this node is a subcomposition, the generated code calls compositionAddNodeMetadata() for the subcomposition.

Definition at line 117 of file VuoCompilerNode.cc.

◆ generateCallbackStartFunctionCall()

void VuoCompilerNode::generateCallbackStartFunctionCall ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates a call to nodeInstanceTriggerStart, if the function exists.

Parameters
moduleThe destination LLVM module (i.e., generated code).
blockThe LLVM block to which to append the function call.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 365 of file VuoCompilerNode.cc.

◆ generateCallbackStopFunctionCall()

void VuoCompilerNode::generateCallbackStopFunctionCall ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates a call to nodeInstanceTriggerStop, if the function exists.

Parameters
moduleThe destination LLVM module (i.e., generated code).
blockThe LLVM block to which to append the function call.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 399 of file VuoCompilerNode.cc.

◆ generateCallbackUpdateFunctionCall()

void VuoCompilerNode::generateCallbackUpdateFunctionCall ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates a call to nodeInstanceTriggerUpdate, if the function exists.

Parameters
moduleThe destination LLVM module (i.e., generated code).
blockThe LLVM block to which to append the function call.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 382 of file VuoCompilerNode.cc.

◆ generateCreateContext()

Value * VuoCompilerNode::generateCreateContext ( Module *  module,
BasicBlock *  block 
)

Generates code to create the node context for this node and the port context for each of its ports.

Definition at line 185 of file VuoCompilerNode.cc.

◆ generateEventFunctionCall()

void VuoCompilerNode::generateEventFunctionCall ( Module *  module,
Function *  function,
BasicBlock *&  currentBlock,
Value *  compositionStateValue 
)

Generates a call to nodeEvent or nodeInstanceEvent.

The generated code sets up the arguments for the call, does the call, transmits events from input ports to output ports, and handles memory management for the node's runtime representation.

Parameters
moduleThe destination LLVM module (i.e., generated code).
functionThe function in which to generate code.
currentBlockThe block in which to generate code.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 227 of file VuoCompilerNode.cc.

◆ generateFiniFunctionCall()

void VuoCompilerNode::generateFiniFunctionCall ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates a call to nodeInstanceFini and releases the node's instance data.

Assumes the node is stateful.

Parameters
moduleThe destination LLVM module (i.e., generated code).
blockThe LLVM block to which to append the function call.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 345 of file VuoCompilerNode.cc.

◆ generateGetContext()

Value * VuoCompilerNode::generateGetContext ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates code to look up the NodeContext * indexed under this node's full identifier (prefixed with the composition's identifier).

Definition at line 108 of file VuoCompilerNode.cc.

◆ generateIdentifierValue()

Value * VuoCompilerNode::generateIdentifierValue ( Module *  module)

Generates a constant char * value consisting of the node's identifier.

Definition at line 86 of file VuoCompilerNode.cc.

◆ generateInitFunctionCall()

void VuoCompilerNode::generateInitFunctionCall ( Module *  module,
BasicBlock *  block,
Value *  compositionStateValue 
)

Generates a call to nodeInstanceInit, stores the return value into the node's instance data, and retains the node's instance data.

Assumes the node is stateful. Assumes any trigger ports' function declarations have been generated.

Parameters
moduleThe destination LLVM module (i.e., generated code).
blockThe LLVM block to which to append the function call.
compositionStateValueThe VuoCompositionState * of the composition containing this node.

Definition at line 320 of file VuoCompilerNode.cc.

◆ generateReceivedEventCondition() [1/2]

Value * VuoCompilerNode::generateReceivedEventCondition ( Module *  module,
BasicBlock *  block,
Value *  nodeContextValue 
)

Generates a condition that is true if any of this node's input event ports have received an event.

Definition at line 702 of file VuoCompilerNode.cc.

◆ generateReceivedEventCondition() [2/2]

Value * VuoCompilerNode::generateReceivedEventCondition ( Module *  module,
BasicBlock *  block,
Value *  nodeContextValue,
vector< VuoPort * >  selectedInputPorts,
const map< VuoCompilerEventPort *, Value * > &  portContextForEventPort = (map<VuoCompilerEventPort *, Value *>()) 
)

Generates a condition that is true if any of the given input event ports of this node have received an event.

Definition at line 710 of file VuoCompilerNode.cc.

◆ generateSubcompositionIdentifierValue()

Value * VuoCompilerNode::generateSubcompositionIdentifierValue ( Module *  module,
BasicBlock *  block,
Value *  compositionIdentifierValue 
)

Generates a char * value prefixed with compositionIdentifierValue and suffixed with this node's identifier.

The caller is responsible for generating code to free the value.

This needs to be kept in sync with VuoStringUtilities::buildCompositionIdentifier().

Definition at line 97 of file VuoCompilerNode.cc.

◆ getGraphvizDeclaration()

string VuoCompilerNode::getGraphvizDeclaration ( bool  shouldPrintPosition = false,
double  xPositionOffset = 0,
double  yPositionOffset = 0,
VuoPort manuallyFirableInputPort = nullptr 
)

Returns a string containing the declaration for this node as it would appear in a .vuo (Graphviz dot format) file.

Definition at line 789 of file VuoCompilerNode.cc.

◆ getGraphvizIdentifier()

string VuoCompilerNode::getGraphvizIdentifier ( void  )

Gets the identifier that will appear in .vuo (Graphviz dot format) files.

Definition at line 780 of file VuoCompilerNode.cc.

◆ getGraphvizIdentifierPrefix()

string VuoCompilerNode::getGraphvizIdentifierPrefix ( void  )

Returns a suggested UpperCamelCase prefix for the node's Graphviz identifier, based on its title.

Removes non-alphanumeric characters, and uppercases the character after each former space. Removes non-alpha leading characters.

Example:
Node title "42 Fire on Start 42!" becomes `FireOnStart42`.

Definition at line 759 of file VuoCompilerNode.cc.

◆ getIdentifier()

string VuoCompilerNode::getIdentifier ( void  )

Returns the identifier prefix in the generated LLVM bitcode for this node instance.

This identifier is derived from the Graphviz identifier.

Example:
Add2

Definition at line 746 of file VuoCompilerNode.cc.

◆ getIndexInOrderedNodes()

size_t VuoCompilerNode::getIndexInOrderedNodes ( void  )

Returns the node's index in VuoCompilerBitcodeGenerator::orderedNodes.

Definition at line 59 of file VuoCompilerNode.cc.

◆ getInstanceData()

VuoCompilerInstanceData * VuoCompilerNode::getInstanceData ( void  )

If this node is stateful, returns the instance data.

Otherwise null.

Definition at line 735 of file VuoCompilerNode.cc.

◆ setConstantStringCache()

void VuoCompilerNode::setConstantStringCache ( VuoCompilerConstantStringCache constantStrings)

Sets the cache used to generate constant string values.

This must be called before generating bitcode.

Definition at line 67 of file VuoCompilerNode.cc.

◆ setGraphvizIdentifier()

void VuoCompilerNode::setGraphvizIdentifier ( string  graphvizIdentifier)

Sets the identifier that will appear in .vuo (Graphviz dot format) files.

Definition at line 772 of file VuoCompilerNode.cc.

◆ setIndexInOrderedNodes()

void VuoCompilerNode::setIndexInOrderedNodes ( size_t  indexInOrderedNodes)

Tells the node its index in VuoCompilerBitcodeGenerator::orderedNodes.

This must be called before generating bitcode.

Definition at line 51 of file VuoCompilerNode.cc.


The documentation for this class was generated from the following files: