Home

J006 Adding float samples

Content outdated

We are in the process of migrating all content to impulse version 2.0.

Float samples may be written in form of float, double or BigDecimal values. Like with integers you may use arrays of float values.

Impulse supports 32bit (float), 64bit (double) floating point data and arrays of float/double:

    public final int FLOAT_WIDTH_32 = 0x01; // 4 bytes
    public final int FLOAT_WIDTH_64 = 0x02; // 8 bytes

Float data without limited precision (BigDecimal) is under discussion to be added.



Interface

The interface contains write functions for all supported data types. Additionally you find renamed wrapper functions for scripting purpose.

units
Domain position as a multiple of its domain base (e.g. domain base=1ms; units = 100; -> domain value = 100ms). Consecutive calls need to pass a value greater or equal.
conflict
If set to true, impulse will use conflict color (usually red) to paint the sample. Meaning of "conflict is use-case depended.
value
The given valuein different formats (float/double/BigDecimal)
public interface IFloatSamplesWriter extends ISamplesWriter {
	 
	boolean write(long units, double value);
	boolean write(long units, boolean conflict, float value);
	boolean write(long units, boolean conflict, double value);
	boolean write(long units, boolean conflict, BigDecimal value);
	boolean write(long units, boolean conflict, Number value);
	boolean write(long units, boolean conflict, float[] value);
	boolean write(long units, boolean conflict, double[] value);
	
	// scripting
	boolean writeFloat(long units, boolean conflict, float value);
	boolean writeDouble(long units, boolean conflict, double value);
	boolean writeBig(long units, boolean conflict, BigDecimal value);
	boolean writeFloatArray(long units, boolean conflict, float[] value);
	boolean writeFloatArgs(long units, boolean conflict, float... value);    
	boolean writeDoubleArray(long units, boolean conflict, double[] value);
	boolean writeDoubleArgs(long units, boolean conflict, double... value);
}
Open JavaDoc Reference


Signal definition

Below you find an example of how to create an integer and an integer array signal. The integer array definition requires a signal descriptor with the required array size (2).
// Java (reader derived from IRecordGenerator, ISingleDomainRecordGenerator)
Signal signal1 = addSignal(signals, "Float1", "A float", 
	ProcessType.Discrete, SignalType.Float, SignalDescriptor.DEFAULT);
Signal signal2 = addSignal(signals, "Float2", "XY", 
	ProcessType.Discrete, SignalType.FloatArray, 
    new SignalDescriptor(SignalDescriptor.CONTENT_DEFAULT,2,
    ISample.FLOAT_WIDTH_64,ISample.FORMAT_DEFAULT));
// JavaScript (recJs, scripted reader,..)
var signal1 = generator.addSignal(signals, "Float1", "A float",
	ProcessType.Discrete, SignalType.Float, SignalDescriptor.DEFAULT);
    
var signal2 = generator.addSignal(signals, "Float2", "A float array", 
	ProcessType.Discrete, SignalType.FloatArray, 
    new SignalDescriptor(SignalDescriptor.CONTENT_DEFAULT,2,ISample.
    	FLOAT_WIDTH_64,ISample.FORMAT_DEFAULT));


Writing samples

Below some examples of using the writer methods for Java and JavaScript. The JavaDoc reference contains additional examples.
// Java (reader derived from IRecordGenerator, ISingleDomainRecordGenerator)
float value = 3.0f; 
writer1.write(1000L, false, value);  
Number value = new BigDecimal(3.0f); 
writer1.write(1000L, false, value);  
float[] value = new float[]{10.0,20.0}; 
writer2.write(1000L, false, value);   
     
// JavaScript (recJs, scripted reader,..)
var value = 3.0; 
writer1.writeDouble(1000, false, value);
writer2.writeFloatArgs(1000,false,3,5.0);     
writer2.writeDoubleArgs(1000,false,3,5.0);