Vuo  2.3.2
VuoCompilerSpecializedNodeClass.hh
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "VuoCompilerNodeClass.hh"
13 
14 class VuoCompiler;
16 class VuoCompilerNode;
17 class VuoNode;
18 class VuoNodeSet;
19 
43 {
44 private:
45  VuoCompilerNodeClass *genericNodeClass;
46  VuoCompilerNodeClass *backingNodeClass;
47 
48  string createDefaultSpecializedNodeClassName(void);
49  string createFullySpecializedNodeClassName(VuoNode *nodeToBack);
50  static void replaceGenericTypesWithSpecialized(string &nodeClassSource, map<string, string> specializedForGenericTypeName);
51  static vector<string> getGenericTypeNamesFromPorts(VuoCompilerNodeClass *nodeClass);
52  static map<string, string> getBackingTypeNamesFromPorts(VuoNode *node);
53  static string extractGenericNodeClassName(string specializedNodeClassName, size_t genericTypeCount);
54  static string createSpecializedNodeClassName(string genericNodeClassName, vector<string> specializedTypeNames);
55 
56  void initialize(void);
57  string getClassIdentifier(void);
58  Function * getEventFunction(void);
59  Function * getInitFunction(void);
60  Function * getFiniFunction(void);
61  Function * getCallbackStartFunction(void);
62  Function * getCallbackUpdateFunction(void);
63  Function * getCallbackStopFunction(void);
64  Function * getCompositionAddNodeMetadataFunction(void);
65  Function * getCompositionPerformDataOnlyTransmissionsFunction(void);
66  Function * getCompositionSetPublishedInputPortValueFunction(void);
67  Function * getTriggerWorkerFunction(string portIdentifier);
68  vector<VuoCompilerTriggerDescription *> getTriggerDescriptions(void);
69  VuoCompilerInstanceDataClass * getInstanceDataClass(void);
70  string getDoxygenDocumentation(void);
71  string getDefaultSpecializedTypeName(string genericTypeName);
72  vector<string> getAutomaticKeywords(void);
73  bool isStateful(void);
74 
75 protected:
76  map<string, string> specializedForGenericTypeName;
77 
78  VuoCompilerSpecializedNodeClass(string nodeClassName, Module *module);
81  static VuoPortClass * copyPortClassFromModel(VuoPortClass *modelPortClass, bool isInput);
82 
83  friend class TestNodes;
84  friend class TestVuoCompilerNodeClass;
85 
86 public:
87  void updateBackingNodeClass(VuoNode *nodeToBack, VuoCompiler *compiler);
88  virtual VuoCompilerNode * createReplacementBackingNode(VuoNode *nodeToBack, string backingNodeClassName, VuoCompiler *compiler);
89  bool isFullySpecialized(void);
90  static bool hasGenericPortTypes(VuoCompilerNodeClass *nodeClass);
91  virtual VuoType * getOriginalPortType(VuoPortClass *portClass);
92  virtual string getOriginalGenericNodeClassName(void);
93  virtual string getOriginalGenericNodeClassDescription(void);
94  virtual VuoNodeSet * getOriginalGenericNodeSet(void);
95  virtual string createUnspecializedNodeClassName(set<VuoPortClass *> portClassesToUnspecialize);
96  virtual string createSpecializedNodeClassNameWithReplacement(string genericTypeName, string specializedTypeName);
97  set<string> getDependencies(void);
98  string getDependencyName(void);
99 
100  static VuoNodeClass * newNodeClass(const string &nodeClassName, VuoCompiler *compiler, dispatch_queue_t llvmQueue);
101  static VuoCompilerNodeClass * getNodeClassForNode(VuoCompilerNodeClass *origNodeClass, VuoCompiler *compiler);
102  static bool isSpecializationOfNodeClass(const string &potentialSpecializedNodeClassName, VuoCompilerNodeClass *potentialGenericNodeClass);
103  static void replaceGenericTypesWithBacking(string &nodeClassSource);
104 };