1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include "stdafx.h"
#include "Template.h"
#include "Type.h"
#include "Core/Str.h"
namespace storm {
Template::Template(Str *name) : name(name) {}
Named *Template::generate(SimplePart *part) {
return null;
}
Bool Template::placeholder() {
return false;
}
TemplateCppFn::TemplateCppFn(Str *name, GenerateFn fn) : Template(name), fn(fn) {}
Named *TemplateCppFn::generate(SimplePart *part) {
ValueArray *va = new (this) ValueArray();
va->reserve(part->params->count());
for (nat i = 0; i < part->params->count(); i++) {
va->push(part->params->at(i));
}
return generate(va);
}
Type *TemplateCppFn::generate(ValueArray *part) {
return (*fn)(name, part);
}
static Type *nullTemplate(Str *name, ValueArray *params) {
return null;
}
TemplatePlaceholder::TemplatePlaceholder(Str *name) : TemplateCppFn(name, &nullTemplate) {}
Bool TemplatePlaceholder::placeholder() {
return true;
}
Named *TemplatePlaceholder::generate(SimplePart *part) {
return null;
}
Type *TemplatePlaceholder::generate(ValueArray *part) {
return null;
}
TemplateFn::TemplateFn(Str *name, Fn<MAYBE(Named *), Str *, SimplePart *> *fn) : Template(name), fn(fn) {}
Named *TemplateFn::generate(SimplePart *part) {
return fn->call(name, part);
}
}
|