@FunctionalInterface public interface DoubleSignalSource extends AbstractSignalSource, DoubleSupplier
double.
 This basic interface is neutral with respect to whether values may change at arbitrary times or synchronously with respect to a clock, and to whether values are computed on the fly when demanded, or stored when available and then just retrieved.
DoubleClockedSignalSource| Modifier and Type | Method and Description | 
|---|---|
default DoubleSignalSource | 
abs()
Returns a new signal source whose value is the absolute of the value of
 this signal source. 
 | 
default DoubleSignalSource | 
add(DoubleSignalSource other)
Returns a new signal source whose value is the sum of the simultaneous
 values of this and another signal source. 
 | 
static DoubleSignalSource | 
choose(BooleanSignalSource condition,
      DoubleSignalSource inTrue,
      DoubleSignalSource inFalse)
Returns a new signal source whose value is that of either of two
 given type-compatible signal sources, depending on the current
 value of a condition signal source. 
 | 
static <E extends Enum<E>> | 
choose(EnumSignalSource<E> selector,
      DoubleSignalSource... cases)
Returns a new signal source whose value is selected dynamically from a
 range of cases indexed by  
enum values. | 
static <E extends Enum<E>> | 
choose(EnumSignalSource<E> selector,
      EnumMap<E,? extends DoubleSignalSource> cases)
Returns a new signal source whose value is selected dynamically from a
 range of cases indexed by  
enum values. | 
static <E extends Enum<E>> | 
choose(SignalSource<E> selector,
      EnumMap<E,? extends DoubleSignalSource> cases)
Returns a new signal source whose value is selected dynamically from a
 range of cases indexed by  
enum values. | 
static DoubleClockedSignalSource | 
clock(DoubleSignalSource output,
     Process... processes)  | 
default Consumer<CompilationContext> | 
compileDataFlow()
Returns a code generator for outputting the value of this entity. 
 | 
default void | 
compileMainSignalSource(CompilationContext context)  | 
static DoubleSignalSource | 
constant(double value)
Returns a signal source whose value is constant (never changes). 
 | 
default BooleanSignalSource | 
defined()
Returns a new signal source whose value is  
true iff the value of
 this signal source is a valid number. | 
default DoubleClockedSignalSource | 
delayed(double... initialValues)
Returns a new signal source that mirror the values of this signal source
 delayed by a given number of clock ticks. 
 | 
default DoubleClockedSignalSource | 
delayed(double initialValue)
Returns a new signal source that mirrors the values of this
 signal source delayed by one clock tick. 
 | 
static DoubleClockedSignalSource | 
delayedFeedback(Function<? super DoubleClockedSignalSource,? extends DoubleSignalSource> loop,
               double... initialValues)  | 
static DoubleClockedSignalSource | 
delayedFeedback(Function<? super DoubleClockedSignalSource,? extends DoubleSignalSource> loop,
               double initialValue)
Returns a new signal source that receives its own delayed output as input. 
 | 
default DoubleSignalSource | 
divide(DoubleSignalSource other)
Returns a new signal source whose value is the quotient of the
 simultaneous values of this and another signal source. 
 | 
default BooleanSignalSource | 
equal(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is equal to the simultaneous value of another signal
 source. | 
double | 
getAsDouble()
Returns the current value of this signal source. 
 | 
default Optional<Double> | 
getConstantAsDouble()
Returns the constant value of this signal source, if applicable. 
 | 
default Class<?> | 
getValueClass()
Returns the type of values produced by this entity. 
 | 
default DoubleClockedSignalSource | 
glidingAverage(int width)
Returns a signal source whose value at each clock index is the
 average of values of this signal source at a fixed number of
 preceding clock indices, including to the current one. 
 | 
default DoubleClockedSignalSource | 
glidingStandardDeviation(int width)
Returns a signal source whose value at each clock index is the standard
 deviation of values of this signal source at a fixed number of preceding
 clock indices, including to the current one. 
 | 
default DoubleClockedSignalSource | 
glidingSum(int width)
Returns a signal source whose value at each clock index is the
 sum of values of this signal source at a fixed number of
 preceding clock indices, including to the current one. 
 | 
default DoubleClockedSignalSource | 
glidingVariance(int width)
Returns a signal source whose value at each clock index is the
 variance of values of this signal source at a fixed number of
 preceding clock indices, including to the current one. 
 | 
default BooleanSignalSource | 
greaterOrEqual(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is greater than or equal to the simultaneous value of
 another signal source. | 
default BooleanSignalSource | 
greaterThan(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is greater than the simultaneous value of another signal
 source. | 
default BooleanSignalSource | 
guard(DoublePredicate pred)
Returns a boolean signal source whose values are derived from the values
 of this signal source by applying a unary predicate. 
 | 
default boolean | 
hasConstantAsDouble()
Checks whether this signal source has a constant value. 
 | 
default DoubleClockedSignalSource | 
invariant()  | 
default BooleanSignalSource | 
lessOrEqual(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is less than or equal to the simultaneous value of
 another signal source. | 
default BooleanSignalSource | 
lessThan(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is less than the simultaneous value of another signal
 source. | 
default DoubleSignalSource | 
map(DoubleUnaryOperator op)
Returns a signal source whose values are derived from the values of this
 signal source by applying a unary function. 
 | 
default DoubleSignalSource | 
max(DoubleSignalSource other)
Returns a new signal source whose value is the maximum of the simultaneous
 values of this and another signal source. 
 | 
default DoubleSignalSource | 
min(DoubleSignalSource other)
Returns a new signal source whose value is the minimum of the simultaneous
 values of this and another signal source. 
 | 
default DoubleSignalSource | 
modulo(DoubleSignalSource other)
Returns a new signal source whose value is the division remainder of the
 simultaneous values of this and another signal source. 
 | 
default DoubleSignalSource | 
multiply(DoubleSignalSource other)
Returns a new signal source whose value is the product of the simultaneous
 values of this and another signal source. 
 | 
default DoubleSignalSource | 
negate()
Returns a new signal source whose value is the negative of the value of
 this signal source. 
 | 
default BooleanSignalSource | 
negative()
Returns a new signal source whose value is  
true iff the value of
 this signal source is a negative number. | 
default BooleanSignalSource | 
nonEqual(DoubleSignalSource other)
Returns a new signal source whose value is  
true iff the value of
 this signal source is not equal to the simultaneous value of another
 signal source. | 
default BooleanSignalSource | 
nonnegative()
Returns a new signal source whose value is  
true iff the value of
 this signal source is a nonnegative number. | 
default BooleanSignalSource | 
nonpositive()
Returns a new signal source whose value is  
true iff the value of
 this signal source is a nonpositive number. | 
default BooleanSignalSource | 
nonzero()
Returns a new signal source whose value is  
true iff the value of
 this signal source is not the number zero. | 
default BooleanSignalSource | 
notANumber()
Returns a new signal source whose value is  
true iff the value of
 this signal source is not a valid number. | 
default BooleanSignalSource | 
positive()
Returns a new signal source whose value is  
true iff the value of
 this signal source is a positive number. | 
default DoubleClockedSignalSource | 
power(BinaryOperator<DoubleSignalSource> op,
     long n)  | 
default Process | 
probe(Object key)
Returns a realtime event that, when fired, notifies the concerned observer
 of the current value of this signal source. 
 | 
default void | 
publishStoredValueVariable(CompilationContext context)  | 
default BooleanSignalSource | 
relateWith(DoubleBiPredicate pred,
          DoubleSignalSource other)
Returns a boolean signal source whose values are derived from the
 simultaneous values of this and another signal source by applying a binary
 predicate. 
 | 
default DoubleClockedSignalSource | 
sampleAndHold(BooleanSignalSource hold,
             double initialValue)
Returns a new clocked signal source whose value at each clock tick is
 either the current value of this signal source (sample mode), or
 its own value at the previous clock tick (hold mode), depending on
 the current value of a given boolean signal source. 
 | 
default DoubleSignalSource | 
selectAffine(DoubleSignalSource onOne,
            DoubleSignalSource onZero)
Deprecated. 
 
FIXME 
 | 
default DoubleClockedSignalSource | 
series()
Returns a signal source whose value at each clock index is the
 sum of all values of this signal source at all clock indices up
 to the current one. 
 | 
default DoubleSignalSource | 
sqrt()
Returns a new signal source whose value is the square root of the value of
 this signal source. 
 | 
default DoubleClockedSignalSource | 
stored()
Returns a new signal source that stores snapshot values of this signal
 source driven by a clock. 
 | 
default DoubleSignalSource | 
subtract(DoubleSignalSource other)
Returns a new signal source whose value is the difference of the
 simultaneous values of this and another signal source. 
 | 
default BooleanSignalSource | 
zero()
Returns a new signal source whose value is  
true iff the value of
 this signal source is the number zero. | 
default BooleanClockedSignalSource | 
zeroCrossing()
Returns a signal source whose value at each clock index is  
true if
 the current value of this signal source has changed sign compared to its
 value at the preceding clock index. | 
default DoubleSignalSource | 
zipWith(DoubleBinaryOperator op,
       DoubleSignalSource other)
Returns a signal source whose values are derived from the simultaneous
 values of this and another signal source by applying a binary function. 
 | 
compileDataFlowTo, hasDataFlowIOdouble getAsDouble()
The value may be either computed on demand, or retrieved from storage.
Implementations of this method should have no side effect.
getAsDouble in interface DoubleSupplierdefault Class<?> getValueClass()
For signals of primitive value type, the result will be the corresponding pseudoclass.
This implementation returns the primitive pseudoclass double.class.
getValueClass in interface CompilableDataFlowClass.isPrimitive()default Optional<Double> getConstantAsDouble()
Optional containing the value of this signal
 source if it is constant, or Optional.empty() otherwise.default boolean hasConstantAsDouble()
true iff the value of this signal source does not change
 over timedefault Consumer<CompilationContext> compileDataFlow()
This implementation generates code to invoke this.getAsDouble().
compileDataFlow in interface CompilableDataFlowstatic DoubleSignalSource constant(double value)
value - the value of the new signal sourcedefault DoubleSignalSource map(DoubleUnaryOperator op)
The implementation yields a signal source that computes the derived
 value by applying the given function every time its getAsDouble() method is invoked.  If the computation is costly and the
 value reused often, it may be convenient to compute and store the value
 proactively driven by a clock.
op - the function to apply to each valuestored()default DoubleSignalSource zipWith(DoubleBinaryOperator op, DoubleSignalSource other)
The implementation yields a signal source that computes the derived
 value by applying the given function every time its getAsDouble() method is invoked.  If the computation is costly and the
 value reused often, it may be convenient to compute the value proactively
 driven by a clock.
op - the function to apply to each pair of valuesother - the other signal source to considerstored()default BooleanSignalSource guard(DoublePredicate pred)
The implementation yields a signal source that computes the derived
 value by applying the given predicate every time its getAsDouble() method is invoked.  If the computation is costly and the
 value reused often, it may be convenient to compute the value proactively
 driven by a clock.
pred - the predicate to apply to each valuestored()default BooleanSignalSource relateWith(DoubleBiPredicate pred, DoubleSignalSource other)
The implementation yields a signal source that computes the derived
 value by applying the given predicate every time its getAsDouble() method is invoked.  If the computation is costly and the
 value reused often, it may be convenient to compute the value proactively
 driven by a clock.
pred - the predicate to apply to each valueother - the other signal source to considerstored()@Undocumented static DoubleClockedSignalSource clock(DoubleSignalSource output, Process... processes)
@Undocumented default DoubleClockedSignalSource invariant()
default DoubleClockedSignalSource stored()
The getAsDouble() method of the returned signal
 source is guaranteed to be extremely fast, both in interpreted
 and compiled mode.  The computational effort of the underlying
 signal source is instead spent on the Process.step(RealtimeContext) method of the
 returned signal source, to be invoked at each clock tick.
 
If the underlying signal source is constant, the value is
 forwarded when the Process.init()
 method of the returned signal source is invoked, where as its
 implementation of Process.step(RealtimeContext) does nothing.
default DoubleClockedSignalSource delayed(double initialValue)
initialValue - the initial value to output for the first clock tickdefault DoubleClockedSignalSource delayed(double... initialValues)
The length of the delay in clock ticks is specified implicitly by the number of initial values.
initialValues - the initial values to output for the first clock ticksstatic DoubleClockedSignalSource delayedFeedback(Function<? super DoubleClockedSignalSource,? extends DoubleSignalSource> loop, double initialValue)
The circular data flow is constructed by specifying a function that receives as its argument a delayed signal source that will be fed back from the source that it returns. The passed function is applied exactly once.
The output signal source is used both internally for the delayed feedback, and possibly externally by a consumer. Hence its value is stored implicitly in an intermediate variable in order to avoid duplicate computations.
loop - the function that creates the output signal source, given its delayed feedbackinitialValue - the initial value of the delayed feedback@SafeVarargs static DoubleClockedSignalSource delayedFeedback(Function<? super DoubleClockedSignalSource,? extends DoubleSignalSource> loop, double... initialValues)
default Process probe(Object key)
key - the key to associate the value of this signal source withRealtimeContext.getSignalProbe()static DoubleSignalSource choose(BooleanSignalSource condition, DoubleSignalSource inTrue, DoubleSignalSource inFalse)
At any point in time, choose(condition, x, y).getAsInt() ==
 (this.getAsDouble() ? x : y).getAsInt() holds.
condition - the condition signal sourceinTrue - the signal source to consider when the value of
 the condition signal source is trueinFalse - the signal source to consider when the value of
 the condition signal source is falsedefault DoubleSignalSource negate()
For a signal source that = this.negate(), at any point
 in time, that.getAsDouble() == -this.getAsDouble()
 holds.
default DoubleSignalSource add(DoubleSignalSource other)
At any point in time, this.add(other).getAsDouble() ==
 this.getAsDouble() + other.getAsDouble() holds.
other - the other signal source to considerdefault DoubleSignalSource multiply(DoubleSignalSource other)
At any point in time, this.multiply(other).getAsDouble() ==
 this.getAsDouble() * other.getAsDouble() holds.
other - the other signal source to considerdefault DoubleSignalSource subtract(DoubleSignalSource other)
At any point in time, this.subtract(other).getAsDouble() ==
 this.getAsDouble() - other.getAsDouble() holds.
other - the other signal source to considerdefault DoubleSignalSource divide(DoubleSignalSource other)
At any point in time, this.divide(other).getAsDouble() ==
 this.getAsDouble() / other.getAsDouble() holds.
other - the other signal source to considerdefault DoubleSignalSource modulo(DoubleSignalSource other)
At any point in time, this.modulo(other).getAsDouble() ==
 this.getAsDouble() % other.getAsDouble() holds.
other - the other signal source to considerdefault DoubleSignalSource abs()
At any point in time, this.abs().getAsDouble() ==
 Math.abs(this.getAsDouble()) holds.
default DoubleSignalSource min(DoubleSignalSource other)
At any point in time, this.min(other).getAsDouble() ==
 Math.min(this.getAsDouble(), other.getAsDouble()) holds.
other - the other signal source to considerdefault DoubleSignalSource max(DoubleSignalSource other)
At any point in time, this.max(other).getAsDouble() ==
 Math.max(this.getAsDouble(), other.getAsDouble()) holds.
other - the other signal source to considerdefault BooleanSignalSource positive()
true iff the value of
 this signal source is a positive number.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() > 0 holds.
default BooleanSignalSource negative()
true iff the value of
 this signal source is a negative number.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() < 0 holds.
default BooleanSignalSource nonpositive()
true iff the value of
 this signal source is a nonpositive number.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() <= 0 holds.
default BooleanSignalSource nonnegative()
true iff the value of
 this signal source is a nonnegative number.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() >= 0 holds.
default BooleanSignalSource zero()
true iff the value of
 this signal source is the number zero.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() == 0 holds.
default BooleanSignalSource nonzero()
true iff the value of
 this signal source is not the number zero.
 At any point in time, this.positive().getAsBoolean() ==
 this.getAsDouble() != 0 holds.
default BooleanSignalSource lessThan(DoubleSignalSource other)
true iff the value of
 this signal source is less than the simultaneous value of another signal
 source.
 At any point in time, this.lessThan(other).getAsBoolean() ==
 this.getAsDouble() < other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource greaterThan(DoubleSignalSource other)
true iff the value of
 this signal source is greater than the simultaneous value of another signal
 source.
 At any point in time, this.lessThan(other).getAsBoolean() ==
 this.getAsDouble() > other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource lessOrEqual(DoubleSignalSource other)
true iff the value of
 this signal source is less than or equal to the simultaneous value of
 another signal source.
 At any point in time, this.lessOrEqua;(other).getAsBoolean() ==
 this.getAsDouble() <= other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource greaterOrEqual(DoubleSignalSource other)
true iff the value of
 this signal source is greater than or equal to the simultaneous value of
 another signal source.
 At any point in time, this.greaterOrEqual(other).getAsBoolean() ==
 this.getAsDouble() >= other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource equal(DoubleSignalSource other)
true iff the value of
 this signal source is equal to the simultaneous value of another signal
 source.
 At any point in time, this.equal(other).getAsBoolean() ==
 this.getAsDouble() == other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource nonEqual(DoubleSignalSource other)
true iff the value of
 this signal source is not equal to the simultaneous value of another
 signal source.
 At any point in time, this.nonEqual(other).getAsBoolean() ==
 this.getAsDouble() != other.getAsDouble() holds.
other - the other signal source to considerdefault BooleanSignalSource defined()
true iff the value of
 this signal source is a valid number.
 At any point in time, this.defined().getAsBoolean() ==
 !Double.isNan(this.getAsDouble()) holds.
default BooleanSignalSource notANumber()
true iff the value of
 this signal source is not a valid number.
 At any point in time, this.notANumber().getAsBoolean() ==
 Double.isNan(this.getAsDouble()) holds.
default DoubleSignalSource sqrt()
At any point in time, this.sqrt().getAsDouble() ==
 (double)Math.sqrt(this.getAsDouble()) holds.
other - the other signal source to considerdefault DoubleClockedSignalSource series()
The sum is computed using Kahan's stable algorithm, which requires four additions per iteration.
default DoubleClockedSignalSource glidingSum(int width)
The sum is computed using Kahan's stable algorithm, which requires five additions per iteration.
width - the number of clock cycles to sum overNegativeArraySizeException - if width <= 0default DoubleClockedSignalSource glidingAverage(int width)
The average is computed using Kahan's stable algorithm, which requires five additions and one division per iteration.
width - the number of clock cycles to average overNegativeArraySizeException - if width <= 0default DoubleClockedSignalSource glidingVariance(int width)
width - the number of clock cycles to compute overNegativeArraySizeException - if width <= 0default DoubleClockedSignalSource glidingStandardDeviation(int width)
width - the number of clock cycles to compute overNegativeArraySizeException - if width <= 0default BooleanClockedSignalSource zeroCrossing()
true if
 the current value of this signal source has changed sign compared to its
 value at the preceding clock index.
 Corner cases, namly initial values, positive and negative zero, and NaNs, are handled robustly; they are not counted as sign changes.
@Deprecated default DoubleSignalSource selectAffine(DoubleSignalSource onOne, DoubleSignalSource onZero)
At any point in time, selectAffine(s, a, b).getAsDouble() ==
 s.getAsDouble() * a.getAsDouble() + (1 - s.getAsDouble()) *
 b.getAsDouble() holds.
static <E extends Enum<E>> DoubleSignalSource choose(SignalSource<E> selector, EnumMap<E,? extends DoubleSignalSource> cases)
enum values.
 At any point in time, choose(s, m).getAsDouble() ==
 m.get(s.get()).getAsDouble() holds.
 
The given map cases is assumed to be immutable and to contain an
 entry for every possible value of the enum type E.
E - the type of enum valuesselector - the signal source that provides the enum valuecases - a map of enum values to signal sources to select fromstatic <E extends Enum<E>> DoubleSignalSource choose(EnumSignalSource<E> selector, EnumMap<E,? extends DoubleSignalSource> cases)
enum values.
 At any point in time, choose(s, m).getAsDouble() ==
 m.get(E.values()[s.getAsInt()]).getAsDouble() holds.
 
The given map cases is assumed to be immutable and to contain an
 entry for every possible value of the enum type E.
E - the type of enum valuesselector - the signal source that provides the ordinal number of the
 enum valuecases - a map of enum values to signal sources to select from@SafeVarargs static <E extends Enum<E>> DoubleSignalSource choose(EnumSignalSource<E> selector, DoubleSignalSource... cases)
enum values.
 At any point in time, choose(s, a).getAsDouble() ==
 m[s.getAsInt()].getAsDouble() holds.
 
The given array cases is assumed to be immutable and to contain
 an element for every possible value of the enum type E.
E - the type of enum valuesselector - the signal source that provides the enum valuecases - an array signal sources to select from, in the definition
 order of enum elementsdefault DoubleClockedSignalSource sampleAndHold(BooleanSignalSource hold, double initialValue)
hold - a boolean signal source that, at each clock tick, selects hold
 mode if its value ist true, or sample mode if its value is falseinitialValue - the initial value to use if in hold mode at the first
 clock tick@Undocumented default DoubleClockedSignalSource power(BinaryOperator<DoubleSignalSource> op, long n)
@Undocumented default void compileMainSignalSource(CompilationContext context)
@Undocumented default void publishStoredValueVariable(CompilationContext context)