Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / de / congrace / exp4j / Variable.java
diff --git a/core/src/de/congrace/exp4j/Variable.java b/core/src/de/congrace/exp4j/Variable.java
new file mode 100644 (file)
index 0000000..0030e70
--- /dev/null
@@ -0,0 +1,107 @@
+package de.congrace.exp4j;
+
+/*
+ * Represents a generic variable which can have double or array values.
+ * Optionally the start and step values corresponding to each array index can be specified for array values
+ * Tries to do something sensible if you try and apply a regular function / operator to an array
+ * and vice-versa.
+ */
+public class Variable {
+       
+       // The primary or preferred representation 
+       public enum Primary {DOUBLE, ARRAY, PLACEHOLDER};
+       private final Primary primary;
+       
+       private final String name;
+       
+       private final double doubleValue;  
+       private final double[] arrayValue; 
+       
+       private final double start, step;
+       
+       /*
+        * Initialize a new variable with a name only. This can be used as a place holder
+        */
+       public Variable(String name){
+               this.name = name;
+               this.primary = Primary.PLACEHOLDER;
+               this.doubleValue = Double.NaN;
+               this.arrayValue = new double[] {Double.NaN};
+               this.start = Double.NaN;
+               this.step = Double.NaN;
+       }
+       
+       /*
+        * Initialize a new double variable
+        */
+       public Variable(String name, double d){
+               this.doubleValue = d;
+               this.arrayValue = new double[] {d};
+               this.name = name;
+               this.primary = Primary.DOUBLE;
+               this.start = Double.NaN;
+               this.step = Double.NaN;
+       }
+       
+       /*
+        * Initialize a new array variable
+        */
+       public Variable(String name, double[] d){
+               this.arrayValue = d;
+               this.doubleValue = d[0];
+               this.name = name;
+               this.primary = Primary.ARRAY;
+               this.start = Double.NaN;
+               this.step = Double.NaN;
+       }
+       
+       /*
+        * Initialize a new array variable, specifying the start and step values
+        */
+       public Variable(String name, double[] d, double start, double step){
+               this.arrayValue = d;
+               this.doubleValue = d[0];
+               this.name = name;
+               this.primary = Primary.ARRAY;
+               this.start = start;
+               this.step = step;
+       }
+       
+       public String getName(){
+               return name;
+       }
+       
+       public Primary getPrimary(){
+               return this.primary;
+       }
+       
+       public double getDoubleValue(){
+               return doubleValue;
+       }
+       
+       public double[] getArrayValue(){
+               return arrayValue;
+       }
+       
+       public double getStep(){
+               return step;
+       }
+       
+       public double getStart(){
+               return start;
+       }
+       
+       public String toString(){
+               if ( arrayValue.length > 1 ){
+                       String out = name + " is Array (length " + new Integer(arrayValue.length).toString() + ") : {";
+                       for (double x : arrayValue){
+                               out = out + x + ",";
+                       }
+                       out = out.substring(0, out.length()-1);
+                       return out + "}";
+               }
+               else{
+                       return name + " is double : {" + new Double(doubleValue).toString() + "}";
+               }
+       }
+}
\ No newline at end of file