package org.yamcs.xtce; import java.nio.ByteOrder; public class FloatDataEncoding extends DataEncoding { private static final long serialVersionUID = 200805131551L; public enum Encoding {IEEE754_1985, STRING}; //DIFFERS_FROM_XTCE Calibrator defaultCalibrator=null; private Encoding encoding; StringDataEncoding stringEncoding=null; /** * FloadDataEncoding of type {@link FloatDataEncoding.Encoding#IEEE754_1985} * * @param sizeInBits */ public FloatDataEncoding(int sizeInBits) { this(sizeInBits, ByteOrder.BIG_ENDIAN); } public FloatDataEncoding(int sizeInBits, ByteOrder byteOrder) { super(sizeInBits, byteOrder); encoding = Encoding.IEEE754_1985; } /** * Float data encoded as a string. * @param sde describes how the string is encoded */ public FloatDataEncoding(StringDataEncoding sde) { super(sde.getSizeInBits()); encoding = Encoding.STRING; stringEncoding = sde; } public Encoding getEncoding() { return encoding; } public StringDataEncoding getStringDataEncoding() { return stringEncoding; } public Calibrator getDefaultCalibrator() { return defaultCalibrator; } public void setDefaultCalibrator(Calibrator calibrator) { this.defaultCalibrator = calibrator; } @Override public String toString() { switch(encoding) { case IEEE754_1985: return "FloatDataEncoding(sizeInBits="+sizeInBits+"" +(defaultCalibrator==null?"":(", defaultCalibrator:"+defaultCalibrator)) +")"; case STRING: return "FloatDataEncoding(StringEncoding: "+stringEncoding +(defaultCalibrator==null?"":(", defaultCalibrator:"+defaultCalibrator)) +")"; default: return "UnknownFloatEncoding("+encoding+")"; } } @Override public Object parseString(String stringValue) { switch(encoding) { case IEEE754_1985: if(sizeInBits==32) { return Float.parseFloat(stringValue); } else { return Double.parseDouble(stringValue); } case STRING: return stringValue; default: throw new IllegalStateException("Unknown encoding "+encoding); } } }