Vuo  2.3.2
VuoCompilerCompositionDiff.hh
Go to the documentation of this file.
1 
10 #pragma once
11 
12 class VuoCompiler;
14 class VuoCompilerNode;
16 
21 {
22 public:
23  string diff(const string &oldCompositionGraphvizDeclaration, VuoCompilerComposition *newComposition, VuoCompiler *compiler);
24 
25  void addNodeReplacement(const string &compositionIdentifier, const string &oldNodeIdentifier, const string &newNodeIdentifier);
26  void addNodeReplacement(const string &compositionIdentifier, const string &oldNodeIdentifier, const string &newNodeIdentifier, const map<string, string> &oldAndNewPortNames);
27  void addNodeClassReplacement(VuoCompilerNodeClass *oldNodeClass, VuoCompilerNodeClass *newNodeClass);
28  void addModuleReplacement(const string &moduleKey);
29  void addRefactoring(const string &compositionIdentifier, const set<VuoCompilerNode *> &nodesMoved, VuoCompilerNode *subcompositionMovedTo);
30  set<string> getModuleKeysReplaced(void) const;
31 
32 private:
33  void diff(VuoCompilerComposition *oldComposition, VuoCompilerComposition *newComposition, const string &parentCompositionIdentifier, const string &parentCompositionPath, const string &unqualifiedCompositionIdentifier, VuoCompiler *compiler, json_object *diffJson);
34 
35  void addNodeReplacementInTopLevelComposition(const string &oldNodeIdentifier, const string &newNodeIdentifier);
36  void addNodeReplacementInTopLevelComposition(const string &oldNodeIdentifier, const string &newNodeIdentifier, const map<string, string> &oldAndNewPortNames);
37  bool isNodeBeingReplaced(const string &compositionIdentifier, const string &oldNodeIdentifier) const;
38  bool isNodeReplacingAnother(const string &compositionIdentifier, const string &newNodeIdentifier) const;
39  bool isNodeBeingRefactored(const string &parentCompositionIdentifier, const string &compositionIdentifier, const string &nodeIdentifier) const;
40 
44  class NodeReplacement
45  {
46  public:
47  string compositionIdentifier;
48  string oldNodeIdentifier;
49  string newNodeIdentifier;
50  map<string, string> oldAndNewPortNames;
51  bool shouldMapIdenticalPortNames;
52  };
53  friend bool operator<(const NodeReplacement &lhs, const NodeReplacement &rhs);
54 
58  class NodeClassReplacement
59  {
60  public:
61  string nodeClassName;
62  map<string, string> oldAndNewPortNames;
63  string oldSubcompositionSourceCode;
64  };
65  friend bool operator<(const NodeClassReplacement &lhs, const NodeClassReplacement &rhs);
66 
70  class Refactoring
71  {
72  public:
73  string compositionIdentifier;
74  string unqualifiedSubcompositionIdentifier;
75  set<string> nodeIdentifiers;
76  };
77  friend bool operator<(const Refactoring &lhs, const Refactoring &rhs);
78 
79  set<NodeReplacement> nodeReplacements;
80  set<NodeClassReplacement> nodeClassReplacements;
81  set<string> moduleReplacements;
82  set<Refactoring> refactorings;
83 
84  friend class TestVuoCompilerComposition;
85 };