1 module onsdata.cell; 2 3 import std.conv; 4 import onsdata; 5 6 /+ +/ 7 T checkFor(T, S)(S value, T minValue = T.min, T maxValue = T.max) if (isIntegral!S) { 8 import std.conv; 9 if (value < minValue) return minValue; 10 if (value > maxValue) return maxValue; 11 return to!T(value); 12 } 13 T checkFor(T, S)(S value, T minValue = T.min, T maxValue = T.max) if (isFloatingPoint!S) { 14 import std.conv; 15 if (value== S.nan) return 0; 16 if (value < minValue) return minValue; 17 if (value > maxValue) return maxValue; 18 return to!T(value); 19 } 20 /+ +/ 21 T toggle(T, S)(S value) if (isBoolean!S) { return !S; } 22 T toggle(T, S)(S value, T defValue = 1, T zeroValue = 0) if (isNumeric!S) { 23 if (value != zeroValue) return zeroValue; 24 return defValue; 25 } 26 /+ +/ 27 T min(T)(T[] values...) if (isNumeric(T)) { 28 if (values) { 29 T result = values[0]; 30 foreach(value; values) if (result > value) result = value; 31 return result; 32 } 33 return 0; 34 } 35 /+ avg - returns the average value of values +/ 36 T avg(T)(T[] values...) { 37 if (values) return to!T(sum!T(values)/values.length); 38 return 0; 39 } 40 /+ +/ 41 T max(T)(T[] values...) { 42 if (values) { 43 T result = values[0]; 44 foreach(value; values) if (result < value) result = value; 45 return result; 46 } 47 return 0; 48 } 49 /+ +/ 50 T sum(T)(T[] values...) { 51 T result = 0; 52 foreach(value; values) result += value; 53 return result; 54 } 55 /+ +/ 56 T delta(T)(T left, T right) { return right-left; } 57 /+ +/ 58 T div(T)(T left, T right, T distance) { 59 if (distance) to!T(delta(left, right)/distance); 60 return 0; 61 }