package de.gaalop.testbench; import java.util.HashMap; import java.util.Map; public class CoeffReader { private static final class BladeInfo { public final int sign; public final int index; public BladeInfo(int sign, int index) { this.sign = sign; this.index = index; } } private static final String MINUS = "-"; private static final Map<String, BladeInfo> clucalcBlades; static { clucalcBlades = new HashMap<String, BladeInfo>(); clucalcBlades.put(null, new BladeInfo(1, 0)); clucalcBlades.put("e1", new BladeInfo(1, 1)); clucalcBlades.put("e2", new BladeInfo(1, 2)); clucalcBlades.put("e3", new BladeInfo(1, 3)); clucalcBlades.put("e", new BladeInfo(1, 4)); clucalcBlades.put("e0", new BladeInfo(1, 5)); clucalcBlades.put("e12", new BladeInfo(1, 6)); clucalcBlades.put("e31", new BladeInfo(-1, 7)); // e31 == -e1^e3 clucalcBlades.put("(e1^e)", new BladeInfo(1, 8)); clucalcBlades.put("(e1^e0)", new BladeInfo(1, 9)); clucalcBlades.put("e23", new BladeInfo(1, 10)); clucalcBlades.put("(e2^e)", new BladeInfo(1, 11)); clucalcBlades.put("(e2^e0)", new BladeInfo(1, 12)); clucalcBlades.put("(e3^e)", new BladeInfo(1, 13)); clucalcBlades.put("(e3^e0)", new BladeInfo(1, 14)); clucalcBlades.put("E", new BladeInfo(1, 15)); clucalcBlades.put("e123", new BladeInfo(1, 16)); clucalcBlades.put("(e12^e)", new BladeInfo(1, 17)); clucalcBlades.put("(e12^e0)", new BladeInfo(1, 18)); clucalcBlades.put("(e31^e)", new BladeInfo(-1, 19)); // e31^einf == -e1^e3^einf clucalcBlades.put("(e31^e0)", new BladeInfo(-1, 20)); // e31^e0 == -e1^e3^e0 clucalcBlades.put("(e1^E)", new BladeInfo(1, 21)); clucalcBlades.put("(e23^e)", new BladeInfo(1, 22)); clucalcBlades.put("(e23^e0)", new BladeInfo(1, 23)); clucalcBlades.put("(e2^E)", new BladeInfo(1, 24)); clucalcBlades.put("(e3^E)", new BladeInfo(1, 25)); clucalcBlades.put("(e123^e)", new BladeInfo(1, 26)); clucalcBlades.put("(e123^e0)", new BladeInfo(1, 27)); clucalcBlades.put("(e12^E)", new BladeInfo(1, 28)); clucalcBlades.put("(e31^E)", new BladeInfo(-1, 29)); // e31^E == -e1^e3^einf^e0 clucalcBlades.put("(e23^E)", new BladeInfo(1, 30)); clucalcBlades.put("I", new BladeInfo(1, 31)); } private double[] coeffs = new double[32]; public void addCoeff(String sign, String coeff, String blade) { double value = Double.parseDouble(coeff); if (MINUS.equals(sign)) { value = -value; } BladeInfo info = clucalcBlades.get(blade); if (info.sign < 0) { value = -value; } coeffs[info.index] = value; } public double[] getCoeffs() { return coeffs; } }