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