-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCommonT4.tt
58 lines (45 loc) · 3.39 KB
/
CommonT4.tt
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
<#+
private static int maxArg {get => 7; }
private static int maxRes {get => 4; }
private static string VecResultTuple(int k) =>
k>1
? "("+string.Join(", ", Enumerable.Repeat("VectorizationResult", k))+")"
: "VectorizationResult";
private static string Plural(string word, int c) => word + (c > 1 ? "s" : "");
private static string ToArrays(int c) => Plural("ToArray", c);
private static string ArrayQueryRecurrentA(int inputs, int outputs)
=> "ArrayQueryRecurrent"+(outputs>1?outputs.ToString():"")+TemplateArgsSkipBase(inputs, outputs, "A");
private static string TypeName(string prefix, int inputs, int outputs)
=> prefix
+ (outputs > 1 ? outputs.ToString() : "")
+ TemplateArgs(inputs, outputs);
private static string FuncSignature(int inputs, int outputs)
=> "Func" + TemplateArgsTuple(inputs, outputs);
private static string FuncArraySignature(int inputs, int outputs)
=> "Func" + TemplateArgsTuple(inputs, outputs, "[,]");
private static string TemplateArgs(int inputs, int outputs, string inputName="T", string outputName="R")
=> "<" + string.Join(", ", RepeatArgs(inputName, inputs).Concat(RepeatArgs(outputName, outputs))) + ">";
private static string TemplateArgsOne(int inputs, int outputs, string inputName="T", string outputName="R")
=> "<" + string.Join(", ", RepeatArgsZero(inputName, inputs).Concat(RepeatArgs(outputName, outputs))) + ">";
private static string TemplateArrArgs(int inputs, int outputs)
=> "<" + string.Join(", ", RepeatArgs("T", inputs, "[,]").Concat(RepeatArgs("R", outputs, "[,]"))) + ">";
private static string TemplateArgsTuple(int inputs, int outputs, string suffix = "")
=> "<" + string.Join(", ", RepeatArgs("T", inputs, suffix).Append(ReturnTuple(outputs, suffix))) + ">";
private static string Tuple(string prefix, int n, string suffix="")
=> n == 1 ? prefix+suffix : "(" + string.Join(", ", RepeatArgs(prefix, n, suffix)) + ")";
private static string ReturnTuple(int n, string suffix = "")
=> Tuple("R", n, suffix);
private static string TemplateArgsSkip(int inputs, int outputs) => TemplateArgsSkipBase(inputs, outputs, "_");
private static string TemplateArgsSkipBase(int inputs, int outputs, string skip)
=> "<" + string.Join(", ", RepeatArgs("T", inputs).Append(skip).Concat(RepeatArgs("R", outputs))) + ">";
private static string TemplateArgsSkipOne(int inputs, int outputs)
=> "<" + string.Join(", ", RepeatArgsZero("T", inputs).Append("_").Concat(RepeatArgs("R", outputs))) + ">";
private static string TemplateArgsSkipTwo(int inputs, int outputs)
=> "<" + string.Join(", ", RepeatArgs("T", inputs).Append("_").Concat(RepeatArgsZero("R", outputs))) + ">";
private static string TemplateArgsSkipThree(int inputs, int outputs1, int outputs2)
=> "<" + string.Join(", ", RepeatArgs("T", inputs).Append("_").Concat(outputs2>1?RepeatArgsZero("R", outputs1):RepeatArgs("R", outputs1))) + ">";
private static IEnumerable<string> RepeatArgs(string name, int count, string suffix = "")
=> count == 1 ? new string[] { name + suffix } : RepeatArgsZero(name, count, suffix);
private static IEnumerable<string> RepeatArgsZero(string name, int count, string suffix = "")
=> Enumerable.Range(1, count).Select(i => name + i.ToString() + suffix);
#>