54 { if ( curidx < 0 ) curidx = 0; \ 55 else if ( curidx > maxidx_ ) curidx = maxidx_; } 62 if ( !extrapol_ && (pos < -snapdist_ || pos > maxidx_ + snapdist_) )
64 else if ( maxidx_ < 1 )
65 return vda.
value( 0 );
68 if ( !smooth_ ||
mIsEqual(pos,curidx,snapdist_) )
69 return vda.
value( curidx );
71 T v[4];
const int lopos = (int)pos;
84 rv = pos < 0.5 ? v[1] : v[2];
86 rv = pos*v[2] + (1-pos)*v[1];
97 if (
mIsUdf(v[0]) ) v[0] = v[1];
98 if (
mIsUdf(v[3]) ) v[3] = v[2];
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
virtual T value(int64_t) const =0
T period_
Definition: valseriesinterpol.h:46
bool linear_
Definition: valseriesinterpol.h:47
#define mChkVSIRg
Definition: valseriesinterpol.h:53
T polyReg1D(T vm1, T v0, T v1, T v2, float x)
Definition: interpol1d.h:128
T value(const ValueSeries< T > &, T pos) const
Definition: valseriesinterpol.h:59
#define mIsEqual(x, y, eps)
Definition: commondefs.h:56
bool isperiodic_
Definition: valseriesinterpol.h:44
#define mNINT32(x)
Definition: commondefs.h:48
Threads::Atomic< int > maxidx_
Definition: valseriesinterpol.h:48
T polyReg1DWithUdf(T vm1, T v0, T v1, T v2, float x)
Definition: interpol1d.h:187
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
Interface to a series of values.
Definition: odmemory.h:15
Definition: valseriesinterpol.h:24
void interpolateYPeriodicReg(const T &idxabl, int sz, float pos, RT &ret, RT period, bool extrapolate=false)
Definition: periodicvalue.h:125
bool extrapol_
Definition: valseriesinterpol.h:43
T snapdist_
Definition: valseriesinterpol.h:40
ValueSeriesInterpolator(int mxidx=mUdf(int))
Definition: valseriesinterpol.h:27
#define mClass(module)
Definition: commondefs.h:161
bool smooth_
Definition: valseriesinterpol.h:42
bool hasudfs_
Definition: valseriesinterpol.h:45
T udfval_
Definition: valseriesinterpol.h:41