1 module puppeteer.configuration.iconfiguration; 2 3 import std.stdio; 4 import std.exception; 5 6 public shared interface IConfiguration(VarMonitorTypes...) 7 { 8 void setAIValueAdapterExpression(ubyte pin, string adapterExpression); 9 string getAIValueAdapterExpression(ubyte pin); 10 float adaptAIValue(ubyte pin, float value); 11 12 void setPWMOutAvgAdapterExpression(ubyte pin, string adapterExpression); 13 string getPWMOutAvgAdapterExpression(ubyte pin); 14 float adaptPWMOutAvgValue(ubyte pin, float value); 15 16 void setAISensorName(ubyte pin, string name); 17 string getAISensorName(ubyte pin) const; 18 19 string save() const 20 out(s){assert(s !is null);} 21 void save(File sinkFile, bool flush = true) const; 22 void load(string configString) 23 in{assert(configString !is null);} 24 void load(File configFile); 25 26 27 //pragma(msg, unrollHelperMethodDeclarations!VarMonitorTypes); 28 mixin(unrollHelperMethodDeclarations!VarMonitorTypes); 29 30 31 final void setVarMonitorValueAdapterExpression(VarType)(ubyte varIndex, string adapterExpression) 32 { 33 mixin(generateHelperMethodName!VarType("setVarMonitorValueAdapterExpression"))(varIndex, adapterExpression); 34 } 35 36 final string getVarMonitorValueAdapterExpression(VarType)(ubyte varIndex) const 37 { 38 return mixin(generateHelperMethodName!VarType("getVarMonitorValueAdapterExpression"))(varIndex); 39 } 40 41 final VarType adaptVarMonitorValue(VarType)(ubyte varIndex, VarType value) const 42 { 43 return mixin(generateHelperMethodName!VarType("adaptVarMonitorValue"))(varIndex, value); 44 } 45 46 final void setVarMonitorSensorName(VarType)(ubyte varIndex, string name) 47 { 48 mixin(generateHelperMethodName!VarType("setVarMonitorSensorName"))(varIndex, name); 49 } 50 51 final string getVarMonitorSensorName(VarType)(ubyte varIndex) const 52 { 53 return mixin(generateHelperMethodName!VarType("getVarMonitorSensorName"))(varIndex); 54 } 55 } 56 57 private pure string generateHelperMethodName(VarType)(string methodName) 58 { 59 return methodName ~ "_" ~ VarType.stringof; 60 } 61 62 private pure string generateHelperMethodSignature(VarType)(string returnType, string methodName, string arguments, string attributes = "") 63 { 64 return returnType ~ " " ~ generateHelperMethodName!VarType(methodName) ~ arguments ~ " " ~ attributes; 65 } 66 67 private pure string unrollHelperMethodDeclarations(VarMonitorTypes...)() 68 { 69 string unroll = ""; 70 71 foreach(T; VarMonitorTypes) 72 { 73 unroll ~= generateHelperMethodSignature!T("void", 74 "setVarMonitorValueAdapterExpression", 75 "(ubyte varIndex, string adapterExpression)") ~ ";\n"; 76 unroll ~= generateHelperMethodSignature!T("string", 77 "getVarMonitorValueAdapterExpression", 78 "(ubyte varIndex)", "const") ~ ";\n"; 79 unroll ~= generateHelperMethodSignature!T(T.stringof, 80 "adaptVarMonitorValue", 81 "(ubyte varIndex, " ~ T.stringof ~ " value)", 82 "const") ~ ";\n"; 83 unroll ~= generateHelperMethodSignature!T("void", 84 "setVarMonitorSensorName", 85 "(ubyte varIndex, string name)") ~ ";\n"; 86 unroll ~= generateHelperMethodSignature!T("string", 87 "getVarMonitorSensorName", 88 "(ubyte varIndex)", 89 "const") ~ ";\n"; 90 } 91 92 return unroll; 93 } 94 95 public pure string unrollHelperMethods(VarMonitorTypes...)() 96 { 97 string unroll = ""; 98 99 foreach(T; VarMonitorTypes) 100 { 101 unroll ~= generateHelperMethodSignature!T("void", 102 "setVarMonitorValueAdapterExpression", 103 "(ubyte varIndex, string adapterExpression)") ~ 104 "{setVarMonitorValueAdapterExpression!" ~ T.stringof ~ 105 "(varIndex, adapterExpression);}\n"; 106 unroll ~= generateHelperMethodSignature!T("string", 107 "getVarMonitorValueAdapterExpression", 108 "(ubyte varIndex)", "const") ~ 109 "{return getVarMonitorValueAdapterExpression!" ~ T.stringof ~ 110 "(varIndex);}\n"; 111 unroll ~= generateHelperMethodSignature!T(T.stringof, 112 "adaptVarMonitorValue", 113 "(ubyte varIndex, " ~ T.stringof ~ " value)", "const") ~ 114 "{return adaptVarMonitorValue!" ~ T.stringof ~ 115 "(varIndex, value);}\n"; 116 unroll ~= generateHelperMethodSignature!T("void", 117 "setVarMonitorSensorName", 118 "(ubyte varIndex, string name)") ~ 119 "{setVarMonitorSensorName!" ~ T.stringof ~ 120 "(varIndex, name);}\n"; 121 unroll ~= generateHelperMethodSignature!T("string", 122 "getVarMonitorSensorName", 123 "(ubyte varIndex)", "const") ~ 124 "{return getVarMonitorSensorName!" ~ T.stringof ~ 125 "(varIndex);}\n"; 126 } 127 128 return unroll; 129 }