44VuoCompilerPublishedInputNodeClass::VuoCompilerPublishedInputNodeClass(
string nodeClassName, Module *module) :
60VuoCompilerPublishedInputNodeClass::VuoCompilerPublishedInputNodeClass(
VuoNodeClass *baseNodeClass) :
105VuoNodeClass * VuoCompilerPublishedInputNodeClass::newNodeClassWithImplementation(
const string &nodeClassName,
106 const vector<string> &portNames,
const vector<VuoType *> &types)
108 Module *
module = new Module(nodeClassName, *VuoCompiler::globalLLVMContext);
111 json_object *metadata = json_object_new_object();
113 json_object_object_add(metadata,
"version", json_object_new_string(
"1.0.0"));
115 json_object_object_add(metadata,
"specializedModule", specializedModuleDetails);
116 string metadataStr = json_object_to_json_string(metadata);
117 json_object_put(metadata);
144 vector<VuoPort *> modelInputPorts;
145 for (
size_t i = 0; i < portNames.size(); ++i)
148 modelInputPorts.push_back(modelPort->
getBase());
151 vector<VuoPort *> modelOutputPorts;
152 for (
size_t i = 0; i < portNames.size(); ++i)
155 modelOutputPorts.push_back(modelPort->
getBase());
158 map<VuoPort *, VuoPortClass::EventBlocking> eventBlockingForInputPorts;
159 for (
VuoPort *modelInputPort : modelInputPorts)
160 eventBlockingForInputPorts[modelInputPort] =
VuoPortClass::EventBlocking_Door;
162 map<VuoPort *, size_t> indexOfParameter;
163 map<VuoPort *, size_t> indexOfEventParameter;
167 nullptr, modelInputPorts, modelOutputPorts,
168 map<VuoPort *, json_object *>(), map<VuoPort *, string>(),
169 map<VuoPort *, string>(), eventBlockingForInputPorts,
170 indexOfParameter, indexOfEventParameter, &constantsCache);
172 BasicBlock *initialBlock = &(eventFunction->getEntryBlock());
173 BasicBlock *currBlock = initialBlock;
175 for (
size_t i = 0; i < portNames.size(); ++i)
177 BasicBlock *eventBlock = BasicBlock::Create(module->getContext(),
"event", eventFunction);
178 BasicBlock *noEventBlock = BasicBlock::Create(module->getContext(),
"noEvent", eventFunction);
180 VuoType *dataType = types.at(i);
184 size_t inputEventArgIndex = (dataType ? indexOfEventParameter[ modelInputPorts[i] ] : indexOfParameter[ modelInputPorts[i] ]);
187 Constant *falseValue = ConstantInt::get(inputEventArg->getType(), 0);
188 ICmpInst *inputEventIsTrue =
new ICmpInst(*currBlock, ICmpInst::ICMP_NE, inputEventArg, falseValue);
189 BranchInst::Create(eventBlock, noEventBlock, inputEventIsTrue, currBlock);
193 size_t outputEventArgIndex = (dataType ? indexOfEventParameter[ modelOutputPorts[i] ] : indexOfParameter[ modelOutputPorts[i] ]);
196 Constant *trueValue = ConstantInt::get(inputEventArg->getType(), 1);
197 new StoreInst(trueValue, outputEventArg, eventBlock);
203 size_t inputDataArgIndex = indexOfParameter[ modelInputPorts[i] ];
206 size_t outputDataArgIndex = indexOfParameter[ modelOutputPorts[i] ];
212 BranchInst::Create(noEventBlock, eventBlock);
213 currBlock = noEventBlock;
216 ReturnInst::Create(module->getContext(), currBlock);
221 delete dummyNodeClass;
230VuoNodeClass * VuoCompilerPublishedInputNodeClass::newNodeClassWithoutImplementation(
const string &nodeClassName,
231 const vector<string> &portNames,
const vector<VuoType *> &types)
233 vector<VuoPortClass *> inputPortClasses;
234 vector<VuoPortClass *> outputPortClasses;
237 inputPortClasses.push_back(refreshPortClass);
239 for (
size_t i = 0; i < portNames.size(); ++i)
251 inputPortClasses.push_back(inputPortClass->
getBase());
254 set<string> takenPortNames;
256 takenPortNames.insert(inputPortClass->getName());
258 for (
size_t i = 0; i < portNames.size(); ++i)
260 string preferredName = portNames.at(i) +
"Out";
271 outputPortClasses.push_back(outputPortClass->
getBase());
274 VuoNodeClass *baseNodeClass =
new VuoNodeClass(nodeClassName, refreshPortClass, inputPortClasses, outputPortClasses);
309string VuoCompilerPublishedInputNodeClass::getNodeClassNamePrefix(
void)
317set<string> VuoCompilerPublishedInputNodeClass::getReservedPortNames(
void)
320 names.insert(
"refresh");