Vuo  2.3.2
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;
17 class VuoCompilerGraph;
19 class VuoCompilerIssues;
21 class VuoCompilerPort;
22 class VuoComposition;
23 class VuoCable;
24 class VuoComment;
25 class VuoNode;
26 class VuoPort;
27 class VuoPortClass;
28 class VuoProtocol;
29 class VuoPublishedPort;
30 
34 class VuoCompilerComposition : public VuoBaseDetail<VuoComposition>
35 {
36 public:
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 
74 private:
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 };