Vuo 2.4.2
Loading...
Searching...
No Matches
VuoCompilerComposition.hh
Go to the documentation of this file.
1
10#pragma once
11
12#include "VuoBaseDetail.hh"
13
14class VuoCompiler;
21class VuoCompilerPort;
22class VuoComposition;
23class VuoCable;
24class VuoComment;
25class VuoNode;
26class VuoPort;
27class VuoPortClass;
28class VuoProtocol;
30
34class VuoCompilerComposition : public VuoBaseDetail<VuoComposition>
35{
36public:
39 static VuoCompilerComposition * newCompositionFromGraphvizDeclaration(const string &compositionGraphvizDeclaration, VuoCompiler *compiler);
40 void getChangesToReplaceNode(VuoNode *oldNode, VuoNode *newNode, map<VuoCable *, VuoPort *> &cablesToTransferFromPort, map<VuoCable *, VuoPort *> &cablesToTransferToPort, set<VuoCable *> &cablesToRemove) const;
41 void replaceNode(VuoNode *oldNode, VuoNode *newNode);
42 VuoCompilerGraph * getCachedGraph(VuoCompiler *compiler = nullptr);
43 void invalidateCachedGraph(void);
44 void check(VuoCompilerIssues *issues);
47 void checkForEventFlowIssues(set<VuoCompilerCable *> potentialCables, VuoCompilerIssues *issues);
48 void updateGenericPortTypes(void);
49 set<VuoPort *> getCorrelatedGenericPorts(VuoNode *entryNode, VuoPort *entryPort, bool useOriginalType);
51 void setModule(Module *module);
52 Module * takeModule(void);
53 void setUniqueGraphvizIdentifierForNode(VuoNode *node, const string &preferredIdentifier = "", const string &identifierPrefix = "");
57 void setManuallyFirableInputPort(VuoNode *nodeContainingPort, VuoPort *portFiredInto);
60 string getGraphvizDeclaration(VuoProtocol *activeProtocol = NULL, string header = "", string footer = "");
61 string getGraphvizDeclarationForComponents(set<VuoNode *> nodeSet, set<VuoCable *> cableSet, set<VuoComment *> commentSet,
62 vector<VuoPublishedPort *> publishedInputPorts, vector<VuoPublishedPort *> publishedOutputPorts,
63 string header="", string footer="", double xPositionOffset=0, double yPositionOffset=0);
65
66 static bool portsMatch(VuoPort *oldPort, VuoPort *newPort);
67 static bool portClassesMatch(VuoPortClass *oldPortClass, VuoPortClass *newPortClass);
68
69 static const string defaultGraphDeclaration;
70 static const string topLevelCompositionIdentifier;
71
72 friend class TestCompilingAndLinking;
73
74private:
75 VuoCompilerGraph *graph;
76 long graphHash;
77 map<unsigned int, bool> genericTypeSuffixUsed;
78 map<string, VuoNode *> nodeGraphvizIdentifierUsed;
79 map<string, VuoComment *> commentGraphvizIdentifierUsed;
80 VuoNode *manuallyFirableInputNode;
81 VuoPort *manuallyFirableInputPort;
82 Module *module;
83
84 void checkForMissingTypes(VuoCompilerIssues *issues);
85 set< set<VuoCompilerPort *> > groupGenericPortsByType(void);
86 string createFreshGenericTypeName(void);
87 static bool compareGraphvizIdentifiersOfNodes(VuoNode *lhs, VuoNode *rhs);
88 static bool compareGraphvizIdentifiersOfCables(VuoCable *lhs, VuoCable *rhs);
89 static bool compareGraphvizIdentifiersOfComments(VuoComment *lhs, VuoComment *rhs);
90};