34 this->compiler = compiler;
36 this->compositionString = driverAsCompositionString;
51 for (vector<VuoPublishedPort *>::iterator i = driverBridgeInputs.begin(); i != driverBridgeInputs.end(); ++i)
54 string driverBridgeInputName = driverBridgeInput->
getClass()->
getName();
55 VuoType *driverBridgeInputType = static_cast<VuoCompilerPublishedPort *>(driverBridgeInput->
getCompiler())->getDataVuoType();
67 for (vector<VuoPublishedPort *>::iterator i = driverBridgeOutputs.begin(); i != driverBridgeOutputs.end(); ++i)
70 string driverBridgeOutputName = driverBridgeOutput->
getClass()->
getName();
71 VuoType *driverBridgeOutputType = static_cast<VuoCompilerPublishedPort *>(driverBridgeOutput->
getCompiler())->getDataVuoType();
96 vector<VuoNode *> nodes = parserCopy->
getNodes();
97 for (vector<VuoNode *>::iterator node = nodes.begin(); node != nodes.end(); ++node)
101 if ((*node)->hasCompiler())
103 string nodeIdentifierPrefix = (*node)->getCompiler()->getGraphvizIdentifierPrefix() +
"_Driver";
111 vector<VuoCable *> cables = parserCopy->
getCables();
112 for (vector<VuoCable *>::iterator cable = cables.begin(); cable != cables.end(); ++cable)
113 if (! (*cable)->isPublished())
118 for (vector<VuoPublishedPort *>::iterator i = driverBridgeInputs.begin(); i != driverBridgeInputs.end(); ++i)
121 string driverBridgeInputName = driverBridgeInput->
getClass()->
getName();
122 VuoType *driverBridgeInputType = static_cast<VuoCompilerPublishedPort *>(driverBridgeInput->
getCompiler())->getDataVuoType();
125 if (compositionPublishedInput)
127 VuoType *compositionPublishedInputType = static_cast<VuoCompilerPublishedPort *>(compositionPublishedInput->
getCompiler())->getDataVuoType();
128 if (compositionPublishedInputType == driverBridgeInputType)
130 vector<VuoCable *> publishedInputOutgoingCables = compositionPublishedInput->
getConnectedCables();
131 set<pair<VuoPort *, VuoNode *> > compositionConnectedPorts;
132 map<pair<VuoPort *, VuoNode *>,
bool> eventOnlyConnection;
136 for (vector<VuoCable *>::iterator i = publishedInputOutgoingCables.begin(); i != publishedInputOutgoingCables.end(); ++i)
141 compositionConnectedPorts.insert(make_pair(toPort, toNode));
153 vector<VuoCable *> driverBridgeInputIncomingCables = driverBridgeInput->
getConnectedCables();
154 for (vector<VuoCable *>::iterator i = driverBridgeInputIncomingCables.begin(); i != driverBridgeInputIncomingCables.end(); ++i)
163 for (set<pair<VuoPort *, VuoNode *> >::iterator i = compositionConnectedPorts.begin(); i != compositionConnectedPorts.end(); ++i)
183 for (vector<VuoPublishedPort *>::iterator i = driverBridgeOutputs.begin(); i != driverBridgeOutputs.end(); ++i)
186 string driverBridgeOutputName = driverBridgeOutput->
getClass()->
getName();
187 VuoType *driverBridgeOutputType = static_cast<VuoCompilerPublishedPort *>(driverBridgeOutput->
getCompiler())->getDataVuoType();
190 if (compositionPublishedOutput)
192 VuoType *compositionPublishedOutputType = static_cast<VuoCompilerPublishedPort *>(compositionPublishedOutput->
getCompiler())->getDataVuoType();
193 if (compositionPublishedOutputType == driverBridgeOutputType)
195 vector<VuoCable *> publishedOutputIncomingCables = compositionPublishedOutput->
getConnectedCables();
196 set<pair<VuoPort *, VuoNode *> > compositionConnectedPorts;
197 map<pair<VuoPort *, VuoNode *>,
bool> eventOnlyConnection;
201 for (vector<VuoCable *>::iterator i = publishedOutputIncomingCables.begin(); i != publishedOutputIncomingCables.end(); ++i)
206 compositionConnectedPorts.insert(make_pair(fromPort, fromNode));
218 vector<VuoCable *> driverBridgeOutputOutgoingCables = driverBridgeOutput->
getConnectedCables();
219 for (vector<VuoCable *>::iterator i = driverBridgeOutputOutgoingCables.begin(); i != driverBridgeOutputOutgoingCables.end(); ++i)
228 for (set<pair<VuoPort *, VuoNode *> >::iterator i = compositionConnectedPorts.begin(); i != compositionConnectedPorts.end(); ++i)
250 auto driverBridgeInput = std::find_if(driverBridgeInputs.begin(), driverBridgeInputs.end(),
252 if (driverBridgeInput != driverBridgeInputs.end())
254 vector<VuoCable *> driverBridgeInputIncomingCables = (*driverBridgeInput)->getConnectedCables();
257 for (
VuoPublishedPort *compositionPublishedInput : compositionPublishedInputs)
259 string name = compositionPublishedInput->getClass()->getName();
260 auto matchingDriverBridgeInput = std::find_if(driverBridgeInputs.begin(), driverBridgeInputs.end(),
261 [&name] (
VuoPublishedPort *p) {
return p->getClass()->getName() == name; });
262 if (matchingDriverBridgeInput != driverBridgeInputs.end())
265 VuoType *type = static_cast<VuoCompilerPublishedPort *>(compositionPublishedInput->getCompiler())->getDataVuoType();
269 vector<VuoCable *> publishedInputOutgoingCables = compositionPublishedInput->getConnectedCables();
275 for (
VuoCable *driverCable : driverBridgeInputIncomingCables)
277 for (
VuoCable *compositionCable : publishedInputOutgoingCables)
280 VuoCompilerNode *fromCompilerNode = driverCable->getFromNode()->getCompiler();
281 VuoCompilerPort *fromCompilerPort = static_cast<VuoCompilerPort *>(driverCable->getFromPort()->getCompiler());
282 VuoCompilerNode *toCompilerNode = compositionCable->getToNode()->getCompiler();
283 VuoCompilerPort *toCompilerPort = static_cast<VuoCompilerPort *>(compositionCable->getToPort()->getCompiler());
285 cable->setAlwaysEventOnly(
true);
293 string allowNodeClassName = (canPublishedInputsBeEdited ?
"vuo.event.allowChanges2" :
"vuo.event.allowFirstValue");
305 VuoCompilerPort *fromCompilerPort = static_cast<VuoCompilerPublishedPort *>(compositionPublishedInput->getCompiler());
310 for (
VuoCable *driverCable : driverBridgeInputIncomingCables)
313 VuoCompilerNode *fromCompilerNode = driverCable->getFromNode()->getCompiler();
314 VuoCompilerPort *fromCompilerPort = static_cast<VuoCompilerPort *>(driverCable->getFromPort()->getCompiler());
320 for (
VuoCable *compositionCable : publishedInputOutgoingCables)
323 VuoCompilerNode *toCompilerNode = compositionCable->getToNode()->getCompiler();
324 VuoCompilerPort *toCompilerPort = static_cast<VuoCompilerPort *>(compositionCable->getToPort()->getCompiler());