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