Vuo  2.3.2
VuoCompilerNodeClass.hh
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "VuoBaseDetail.hh"
13 #include "VuoCompilerModule.hh"
14 
15 class VuoCompiler;
24 class VuoNode;
25 class VuoNodeClass;
26 class VuoPortClass;
27 class VuoType;
28 
32 class VuoCompilerNodeClass : public VuoBaseDetail<VuoNodeClass>, public VuoCompilerModule // Order matters: VuoCompilerModule after VuoBaseDetail - https://stackoverflow.com/a/2254306/238387
33 {
34 private:
35  Function *eventFunction;
36  Function *initFunction;
37  Function *finiFunction;
38  Function *callbackStartFunction;
39  Function *callbackUpdateFunction;
40  Function *callbackStopFunction;
41  VuoCompilerInstanceDataClass *instanceDataClass;
42  vector<VuoCompilerTriggerDescription *> triggerDescriptions;
43  map<string, vector<string> > compatibleSpecializedForGenericTypeName;
44  set<VuoCompilerInputEventPortClass *> portsWithExplicitEventBlockingNone;
45  string sourcePath;
46  string sourceCode;
47  set< pair<string, string> > containedNodes;
48 
49  static bool isNodeClass(Module *module, string moduleKey);
50  void parse(void);
51  set<string> globalsToRename(void);
52  void parseMetadata(void);
53  void parseEventFunction(void);
54  void parseInitFunction(void);
55  void parseFiniFunction(void);
56  void parseCallbackStartFunction(void);
57  void parseCallbackUpdateFunction(void);
58  void parseCallbackStopFunction(void);
59  void parseParameters(Function *function, unsigned long acceptanceFlags);
60  void instantiateCompilerNode(VuoNode *node);
61 
62  VuoCompilerInputDataClass * parseInputDataParameter(string annotation, Argument *a);
63  VuoCompilerOutputDataClass * parseOutputDataParameter(string annotation, Argument *a);
64  VuoCompilerInputEventPortClass * parseInputEventParameter(string annotation, Argument *a);
65  VuoCompilerOutputEventPortClass * parseOutputEventParameter(string annotation, Argument *a);
66  VuoCompilerTriggerPortClass * parseTriggerParameter(string annotation, Argument *a);
67  VuoCompilerInstanceDataClass * parseInstanceDataParameter(string annotation, Argument *a);
68  VuoType * parseTypeParameter(string annotation);
69  struct json_object * parseDetailsParameter(string annotation);
70  VuoPortClass * getExistingPortClass(VuoCompilerNodeArgumentClass *argumentClass, bool isInput);
71 
72  bool _isSubcomposition;
73  void updateSubcompositionStatus();
74 
75  friend class TestVuoCompilerType;
76  friend class TestVuoCompilerNodeClass;
77 
78 protected:
79  VuoCompilerNodeClass(string className, Module * module);
80  VuoCompilerNodeClass(VuoCompilerNodeClass *compilerNodeClass);
81  VuoCompilerNodeClass(VuoNodeClass *baseNodeClass);
82  VuoPortClass * getInputPortClassWithName(string portName);
83  VuoPortClass * getOutputPortClassWithName(string portName);
84 
86 
87  static void parseGenericTypes(json_object *moduleDetails, map<string, string> &defaultSpecializedForGenericTypeName, map<std::string, vector<std::string> > &compatibleSpecializedForGenericTypeName);
88 
89 public:
90  VuoNode * newNode(string title = "", double x = 0, double y = 0);
91  VuoNode * newNode(VuoNode *nodeToCopyMetadataFrom);
92  static VuoNodeClass * newNodeClass(string nodeClassName, Module * module);
94  virtual ~VuoCompilerNodeClass(void);
95 
96  virtual string getClassIdentifier(void);
97  virtual Function * getEventFunction(void);
98  virtual Function * getInitFunction(void);
99  virtual Function * getFiniFunction(void);
100  virtual Function * getCallbackStartFunction(void);
101  virtual Function * getCallbackUpdateFunction(void);
102  virtual Function * getCallbackStopFunction(void);
103  virtual Function * getCompositionAddNodeMetadataFunction(void);
105  virtual Function * getCompositionSetPublishedInputPortValueFunction(void);
106  virtual Function * getTriggerWorkerFunction(string portIdentifier);
107  virtual vector<VuoCompilerTriggerDescription *> getTriggerDescriptions(void);
109  virtual string getDoxygenDocumentation(void);
110  virtual string getDefaultSpecializedTypeName(string genericTypeName);
111  virtual vector<string> getAutomaticKeywords(void);
112  bool isLikelyImageFilter(void);
113  bool isLikelyImageGenerator(void);
114  bool isLikelyImageTransition(void);
115  int getImagePortCount(bool isInput);
116  virtual bool isStateful(void);
117  bool isSubcomposition(void);
118  bool isIsf(void);
119  void setSourcePath(const string &sourcePath);
120  string getSourcePath(void);
121  void setSourceCode(const string &sourceCode);
122  string getSourceCode(void);
123  set< pair<string, string> > getContainedNodes(void);
124 };