Vuo 2.4.4
Loading...
Searching...
No Matches
VuoNodeRegistry.hh
Go to the documentation of this file.
1
10#pragma once
11
13#include "VuoCompositionState.h"
14#include "VuoCompositionDiff.hh"
15#include "VuoRuntimeContext.hh"
16
21{
22private:
26 struct PortMetadata
27 {
28 string identifier;
29 string name;
30 unsigned long typeIndex;
31 string initialValue;
32 };
33
37 struct NodeMetadata
38 {
39 string identifier;
40 vector<PortMetadata> portMetadatas;
41
42 NodeContext *(*compositionCreateContextForNode)(unsigned long);
43 void (*compositionSetPortValue)(VuoCompositionState *, const char *, const char *, bool, bool, bool, bool, bool);
44 char * (*compositionGetPortValue)(VuoCompositionState *, const char *, int, bool);
45 void (*compositionFireTriggerPortEvent)(VuoCompositionState *, const char *);
46 void (*compositionReleasePortData)(void *, unsigned long);
47 };
48
49 map<string, vector<NodeMetadata> > nodeMetadatas;
50
51 map<unsigned long, map<unsigned long, NodeContext *> > nodeContextForIndex;
52 map<unsigned long, string> compositionIdentifierForHash;
53 map<string, map<string, void *> > dataForPort;
54 map<string, map<string, unsigned long> > nodeIndexForPort;
55 map<string, map<string, unsigned long> > typeIndexForPort;
56
57 map<string, map<string, NodeContext *> > carriedOverNodeContextForIdentifier;
58 map<string, map<string, void *> > carriedOverDataForPort;
59 map<string, map<string, dispatch_semaphore_t> > carriedOverNodeSemaphoreForPort;
60 map<string, map<string, unsigned long> > carriedOverNodeIndexForPort;
61 map<string, map<string, unsigned long> > carriedOverTypeIndexForPort;
62
63 static const unsigned long topLevelCompositionIndex;
64 static const unsigned long invalidCompositionIndex;
65
66 VuoRuntimePersistentState *persistentState;
67
68 static void splitCompositionIdentifier(const string &compositionIdentifier, string &parentCompositionIdentifier, string &nodeIdentifier);
69 static string buildCompositionIdentifier(const string &parentCompositionIdentifier, const string &nodeIdentifier);
70 static void splitPortIdentifier(const string &portIdentifier, string &nodeIdentifier, string &portName);
71
72 string getNodeIdentifierForIndex(const char *compositionIdentifier, unsigned long nodeIndex);
73 unsigned long getNodeIndexForIdentifier(const string &compositionIdentifier, const string &nodeIdentifier);
74 const NodeMetadata * getNodeMetadataForPort(const string &compositionIdentifier, const string &portIdentifier);
75 string getCompositionIdentifierForHash(unsigned long compositionIdentifierHash);
76 void addNodeContext(const char *compositionIdentifier, unsigned long nodeIndex, struct NodeContext *nodeContext);
77 void removeNodeContext(const char *compositionIdentifier, unsigned long nodeIndex);
78 void relocateNodeContext(const char *compositionIdentifier, unsigned long nodeIndex);
79 NodeContext * carryOverNodeContext(const char *oldCompositionIdentifier, const char *newCompositionIdentifier, unsigned long nodeIndex);
80
81 template<typename T>
82 static bool findCachedInfoForPort(const map<string, map<string, T> > &cachedInfoForPort, const string &compositionIdentifier, const string &portIdentifier, typename map<string, T>::const_iterator &foundIter);
83 void addPortIdentifier(const char *compositionIdentifier, const string &portIdentifier, void *data, unsigned long nodeIndex, unsigned long typeIndex);
84 void removePortIdentifier(const char *compositionIdentifier, const string &portIdentifier);
85 void relocatePortIdentifier(const char *compositionIdentifier, const string &portIdentifier);
86 void carryOverPortIdentifier(const char *oldCompositionIdentifier, const char *newCompositionIdentifier, const string &portIdentifier, unsigned long nodeIndex, unsigned long typeIndex);
87 void carryOverPortIdentifiersForNode(const char *oldCompositionIdentifier, const char *newCompositionIdentifier, const string &nodeIdentifier, unsigned long nodeIndex, const vector<string> &portIdentifiers, const vector<unsigned long> typeIndexes);
88 void removeCarriedOverPortIdentifier(const char *compositionIdentifier, const string &oldPortIdentifier);
89 void carryOverPortData(const char *oldCompositionIdentifier, const char *newCompositionIdentifier, const string &oldPortIdentifier, const string &newPortIdentifier, PortContext *newPortContext);
90
91 void initContextsForCompositionContents(VuoCompositionState *compositionState);
92 void finiContextsForCompositionContents(VuoCompositionState *compositionState);
93
94 void print(void);
95
97
100 typedef const char *vuoTopLevelCompositionIdentifierType;
101 vuoTopLevelCompositionIdentifierType vuoTopLevelCompositionIdentifier;
103
104public:
106 void updateCompositionSymbols(void *compositionBinaryHandle);
107
108 const char * defaultToTopLevelCompositionIdentifier(const char *compositionIdentifier);
109
110 void addNodeMetadata(const char *compositionIdentifier, const char *nodeIdentifier,
111 NodeContext *(*compositionCreateContextForNode)(unsigned long),
112 void (*compositionSetPortValue)(VuoCompositionState *, const char *, const char *, bool, bool, bool, bool, bool),
113 char * (*compositionGetPortValue)(VuoCompositionState *, const char *, int, bool),
114 void (*compositionFireTriggerPortEvent)(VuoCompositionState *, const char *),
115 void (*compositionReleasePortData)(void *, unsigned long));
116 void addPortMetadata(const char *compositionIdentifier, const char *portIdentifier, const char *portName,
117 unsigned long typeIndex, const char *initialValue);
118 NodeContext * getNodeContext(const char *compositionIdentifier, unsigned long nodeIndex);
119 NodeContext * getCompositionContext(const char *compositionIdentifier);
120 void * getDataForPort(const char *compositionIdentifier, const char *portIdentifier);
121 unsigned long getNodeIndexForPort(const char *compositionIdentifier, const char *portIdentifier);
122 unsigned long getTypeIndexForPort(const char *compositionIdentifier, const char *portIdentifier);
123
124 void initContextForTopLevelComposition(VuoCompositionState *compositionState, bool hasInstanceData, unsigned long publishedOutputPortCount);
126
127 void setPortValue(VuoCompositionState *compositionState, const char *portIdentifier, const char *valueAsString);
128 char * getPortValue(VuoCompositionState *compositionState, const char *portIdentifier, bool shouldUseInterprocessSerialization);
129 char * getPortSummary(VuoCompositionState *compositionState, const char *portIdentifier);
130 void fireTriggerPortEvent(VuoCompositionState *compositionState, const char *portIdentifier);
131};
132
133extern "C"
134{
135void vuoAddNodeMetadata(VuoCompositionState *compositionState, const char *nodeIdentifier,
136 NodeContext *(*compositionCreateContextForNode)(unsigned long),
137 void (*compositionSetPortValue)(VuoCompositionState *, const char *, const char *, bool, bool, bool, bool, bool),
138 char * (*compositionGetPortValue)(VuoCompositionState *, const char *, int, bool),
139 void (*compositionFireTriggerPortEvent)(VuoCompositionState *, const char *),
140 void (*compositionReleasePortData)(void *, unsigned long));
141void vuoAddPortMetadata(VuoCompositionState *compositionState, const char *portIdentifier, const char *portName,
142 unsigned long typeIndex, const char *initialValue);
143NodeContext * vuoGetNodeContext(VuoCompositionState *compositionState, unsigned long nodeIndex);
145void * vuoGetDataForPort(VuoCompositionState *compositionState, const char *portIdentifier);
146unsigned long vuoGetNodeIndexForPort(VuoCompositionState *compositionState, const char *portIdentifier);
147unsigned long vuoGetTypeIndexForPort(VuoCompositionState *compositionState, const char *portIdentifier);
148void vuoInitContextForTopLevelComposition(VuoCompositionState *compositionState, bool hasInstanceData, unsigned long publishedOutputPortCount);
150}