32 inline BasicInterval();
33 inline BasicInterval(
const T& start,
const T& stop);
36 inline void set(
const T& start,
const T& stop);
46 inline T width(
bool allowrev=
true)
const;
47 inline T center()
const;
48 inline float getfCenter()
const;
49 inline void shift(
const T& len);
50 inline void widen(
const T& len,
bool allowrev=
true);
52 inline T atIndex(
int,
const T& step)
const;
54 inline int getIndex(
const X&,
const T& step)
const;
56 inline float getfIndex(
const X&,
const T& step)
const;
58 inline int nearestIndex(
const X& x,
const T& step)
const;
60 inline int indexOnOrAfter(X x,
const T& step,
61 float eps=1e-5)
const;
67 inline X limitValue(
const X&)
const;
71 bool allrev=
true)
const;
73 inline bool includes(
const X&,
bool allowrev )
const;
76 bool allowrev=
true)
const;
79 bool allowrev=
true)
const;
82 inline float pos(X val,
bool limit=
true,
83 bool allowrev=
true)
const;
86 inline void include(
const T&,
bool allowrev=
true);
95 inline bool isRev()
const {
return start > stop; }
112 inline Interval(
const T& start,
const T& stop);
117 virtual bool inline isUdf()
const;
120 inline virtual void scale(
const T&);
122 virtual void sort(
bool asc=
true );
124 virtual bool hasStep()
const {
return false; }
150 virtual bool inline isUdf()
const;
159 inline void set(
const T& start,
const T& stop,
const T& step);
167 inline T atIndex(
int)
const;
169 inline int getIndex(
const X&)
const;
170 template <
class X>
inline 171 int indexOnOrAfter( X x,
float eps )
const;
174 inline float getfIndex(
const X&)
const;
176 inline int nearestIndex(
const X&)
const;
178 inline T snap(
const X&,
int dir=0)
const;
181 inline int nrSteps()
const;
182 inline float nrfSteps()
const;
183 virtual inline void sort(
bool asc=
true);
184 inline void scale(
const T&);
185 inline T snappedCenter()
const;
192 inline T snapStep(
const T& inpstep)
const;
218 int nDim()
const {
return ndim; }
219 bool isSet()
const {
return isset; }
222 template <
class X>
inline 223 void setRange(
const X& val);
224 template <
class X>
inline 225 void setRange(
const X& start,
const X& stop);
226 template <
class X>
inline 227 void include(
const X& val);
229 template <
class X>
inline 230 bool includes(
const X& val,
bool allowrev)
const;
232 bool allowrev)
const;
246 template <
class T>
template <
class X>
inline 249 for (
int dim=0; dim<ndim; dim++ )
250 ranges[dim].start = ranges[dim].stop = (T) val[dim];
257 template <
class T>
template <
class X>
inline 260 for (
int dim=0; dim<ndim; dim++ )
262 ranges[dim].start = start[dim];
263 ranges[dim].stop = stop[dim];
270 template <
class T>
template <
class X>
inline 275 pErrMsg(
"Doing include on undefined IntervalND");
278 for (
int dim=0; dim<ndim; dim++ )
279 ranges[dim].include((T) val[dim]);
285 template <
class T>
template <
class X>
inline 291 pErrMsg(
"Doing includes on undefined IntervalND");
296 for (
int dim=0; dim<ndim; dim++ )
298 if ( !ranges[dim].includes(val[dim], allowrev ) )
306 template <
class T>
inline 311 pErrMsg(
"Invalid intersection");
317 for (
int dim=0; dim<ndim; dim++ )
319 vector[dim] = ranges[dim].start;
325 if ( b.
includes((T*)vector, allowrev ) )
333 isstart[dim] =
false;
334 vector[dim] = ranges[dim].stop;
340 vector[dim] = ranges[dim].start;
355 template <
class T1,
class T2>
363 si1->step = (T1)si2->step;
367 template <
class T1,
class T2>
378 { start = intv.
start; stop = intv.
stop;
return *
this; }
381 template <
class T>
template <
class X>
inline 389 template <
class X>
inline 397 : start(0), stop(0) {}
400 template <
class T>
inline 405 template <
class T>
inline 410 template <
class T>
inline 415 template <
class T>
inline 420 template <
class T>
inline 425 template <
class T>
inline 427 {
return ! (i == *
this); }
430 template <
class T>
inline 435 template <
class T>
inline 440 template <
class T>
template <
class X>
inline 449 template <
class T>
inline 454 #define mCenterImpl(func,typ) \ 455 template <class T> inline \ 456 typ BasicInterval<T>::func() const \ 457 { return ((typ)(start+stop))/2; } 465 template <
class T>
inline 470 template <
class T>
inline 473 if ( allowrev &&
isRev() )
480 template <
class T>
template <
class X>
inline 483 return allowrev &&
isRev()
485 : t>=start &&
stop>=t;
489 template <
class T>
template <
class X>
inline 496 template <
class T>
template <
class X>
inline 503 template <
class T>
template <
class X>
inline 506 float res = allowrev &&
isRev()
512 if ( res<0 ) res = 0;
513 else if ( res>1 ) res = 1;
520 template <
class T>
template <
class X>
inline 522 bool allowrev )
const 529 template <
class T>
inline 532 if ( allowrev &&
isRev() )
539 template <
class T>
inline 544 template <
class T>
inline 546 {
return start + step * idx; }
549 template <
class T>
template <
class X>
inline 551 {
return (
int)(( t -
start ) / step); }
554 template <
class T>
template <
class X>
inline 559 template <
class T>
template <
class X>
inline 562 const bool isrev =
isRev();
571 template <
class T>
inline 577 template <
class T>
inline 583 template <
class T>
inline 592 template <
class T>
inline 597 template <
class T>
inline 604 template <
class T>
inline 629 {
assign( *
this, intv );
return *
this; }
632 template <
class T>
inline 637 template <
class T>
inline 642 template <
class T>
inline 647 template <
class T>
inline 652 template <
class T>
inline 657 template <
class T>
inline 662 template <
class T>
inline 664 {
return ! (i == *
this); }
667 template <
class T>
template <
class X>
inline 678 template <
class T>
inline 683 template <
class T>
template <
class X>
inline 688 template <
class T>
template <
class X>
inline 693 template <
class T>
template <
class X>
inline 700 template <
class T>
template <
class X>
inline 705 template <
class T>
template <
class X>
inline 717 template <
class T>
inline 721 if ( (asc &&
step < 0) || (!asc &&
step > 0) )
726 template <
class T>
inline 734 template <
class T>
inline 739 template <
class T>
inline 742 const float relstep = (float) inputstep/
step;
743 int nrsteps =
mNINT32(relstep);
744 if ( nrsteps<1 ) nrsteps = 1;
749 template <
class T>
inline 760 if ( !
step )
return 0;
761 int ret = (((int)this->
start) - ((int) this->
stop)) / ((
int)
step);
762 return ret < 0 ? -ret : ret;
766 #define mDefFNrSteps(typ) \ 768 inline int StepInterval<typ>::nrSteps() const \ 770 if ( !step ) return 0; \ 771 typ ns = ( (start > stop ? start : stop) \ 772 - (start > stop ? stop : start) ) \ 773 / (step > 0 ? step : -step); \ 774 return mNINT32(ns); \ 788 const T diff = this->
start - b.start;
793 #define mDefFltisCompat(typ,releps) \ 795 inline bool StepInterval<typ>::isCompatible( const StepInterval<typ>& b, \ 798 const typ castedeps = (typ) eps; \ 799 if ( !mIsEqual(step,b.step, castedeps) ) return false; \ 801 typ nrsteps = (start - b.start) / step; \ 802 const int nrstepsi = mNINT32( nrsteps ); \ 804 return mIsEqual( start, b.start, \ 805 mIsZero(start,releps) ? releps : start * releps ); \ 807 typ reldiff = (nrsteps - nrstepsi) / nrsteps; \ 808 return ( (reldiff) < (releps) && (reldiff) > (-releps) ); \ #define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
virtual StepInterval< T > * clone() const
Definition: ranges.h:643
bool intersects(const IntervalND< T > &, bool allowrev) const
Definition: ranges.h:307
virtual bool isUdf() const
Definition: ranges.h:598
T snappedCenter() const
Definition: ranges.h:735
void set(const T &start, const T &stop, const T &step)
Definition: ranges.h:648
const BasicInterval< T > & setFrom(const BasicInterval< X > &)
Definition: ranges.h:441
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
bool isRev() const
Definition: ranges.h:95
BasicInterval< T > operator+(const BasicInterval< T > &) const
Definition: ranges.h:431
T atIndex(int, const T &step) const
Definition: ranges.h:545
bool operator!=(const StepInterval< T > &) const
Definition: ranges.h:663
int getIndex(const X &, const T &step) const
Definition: ranges.h:550
virtual ~Interval()
Definition: ranges.h:111
virtual bool isUdf() const
Definition: ranges.h:633
Interval< float > ZGate
Definition: ranges.h:130
T center() const
Definition: ranges.h:459
int nrSteps() const
Definition: ranges.h:758
BasicInterval< T > & operator+=(const BasicInterval< T > &)
Definition: ranges.h:436
int nDim() const
Definition: ranges.h:218
X limitValue(const X &) const
Definition: ranges.h:560
void limitTo(const BasicInterval< X > &i)
Definition: ranges.h:63
T atIndex(int) const
Definition: ranges.h:679
void widen(const T &len, bool allowrev=true)
Definition: ranges.h:471
Interval< T > * ranges
Definition: ranges.h:237
bool operator==(const StepInterval< T > &) const
Definition: ranges.h:658
int getIndex(const X &) const
Definition: ranges.h:684
virtual void sort(bool asc=true)
Definition: ranges.h:718
static Interval< T > udf()
Definition: ranges.h:125
virtual bool hasStep() const
Definition: ranges.h:155
Interval of values.
Definition: commontypes.h:27
BasicInterval()
Definition: ranges.h:396
#define mIsEqual(x, y, eps)
Definition: commondefs.h:56
void scale(const T &)
Definition: ranges.h:727
Base class for Interval. Has no virtual functions and can hence be used in places where no virtual fu...
Definition: ranges.h:29
int indexOnOrAfter(X x, const T &step, float eps=1e-5) const
Definition: ranges.h:390
#define mNINT32(x)
Definition: commondefs.h:48
T step
Definition: ranges.h:195
float getfIndex(const X &, const T &step) const
Definition: ranges.h:555
static StepInterval< T > udf()
Definition: ranges.h:152
StepInterval< float > ZSampling
Definition: ranges.h:200
Interval< int > SampleGate
Definition: ranges.h:129
bool operator!=(const BasicInterval< T > &) const
Definition: ranges.h:426
static BasicInterval< T > udf()
Definition: ranges.h:93
float getfCenter() const
Definition: ranges.h:460
Interval()
Definition: ranges.h:110
T width(bool allowrev=true) const
Definition: ranges.h:450
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
bool isSet() const
Definition: ranges.h:219
const Interval< T > & getRange(int dim) const
Definition: ranges.h:221
#define mDefFNrSteps(typ)
Definition: ranges.h:766
Interval with step.
Definition: commontypes.h:29
void Swap(T &a, T &b)
Definition: commondefs.h:34
void assign(Interval< T1 > &i1, const Interval< T2 > &i2)
Definition: ranges.h:356
bool overlaps(const BasicInterval< X > &, bool allrev=true) const
Definition: ranges.h:521
void include(const X &val)
Definition: ranges.h:271
Class to store ranges in N dimensions.
Definition: ranges.h:208
StepInterval< T > & operator=(const Interval< T > &)
Definition: ranges.h:628
virtual void scale(const T &)
Definition: ranges.h:593
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:60
float pos(X val, bool limit=true, bool allowrev=true) const
Definition: ranges.h:504
float getfIndex(const X &) const
Definition: ranges.h:689
#define mDynamicCastGet(typ, out, in)
Definition: commondefs.h:123
#define mDefEps
Definition: commondefs.h:60
void setRange(const X &val)
Definition: ranges.h:247
void shift(const T &len)
Definition: ranges.h:466
T stop
Definition: ranges.h:91
void include(const T &, bool allowrev=true)
Definition: ranges.h:530
bool isEqual(const StepInterval< T > &i, const T &eps) const
Definition: ranges.h:653
void sort(ObjectSet< T > &os)
Sort ObjectSet. Must have operator > defined for elements.
Definition: objectset.h:224
#define mDefFltisCompat(typ, releps)
Definition: ranges.h:793
virtual bool hasStep() const
Definition: ranges.h:124
bool operator==(const BasicInterval< T > &) const
Definition: ranges.h:421
int indexOnOrAfter(X x, float eps) const
Definition: ranges.h:694
bool includes(const X &, bool allowrev) const
Definition: ranges.h:481
#define mAllocLargeVarLenArr(type, varnm, __size)
Definition: varlenarray.h:29
StepInterval(const StepInterval< T > &si)
Definition: ranges.h:146
T snapStep(const T &inpstep) const
Definition: ranges.h:740
virtual ~IntervalND()
Definition: ranges.h:216
T snap(const X &, int dir=0) const
dir=0: nearest; -1: downward, 1: upward
Definition: ranges.h:706
void set(const T &start, const T &stop)
Definition: ranges.h:411
int ndim
Definition: ranges.h:236
T & setUdf(T &u)
Definition: undefval.h:260
int nearestIndex(const X &x, const T &step) const
Definition: ranges.h:382
T start
Definition: ranges.h:90
virtual void setUdf()
Definition: ranges.h:638
Holds the fundamental sampling info: start and interval.
Definition: samplingdata.h:20
virtual void sort(bool asc=true)
Definition: ranges.h:584
float nrfSteps() const
Definition: ranges.h:750
StepInterval()
Definition: ranges.h:612
#define mCenterImpl(func, typ)
Definition: ranges.h:454
#define mClass(module)
Definition: commondefs.h:161
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:34
bool isUdf(const T &t)
Definition: undefval.h:241
const StepInterval< T > & setFrom(const Interval< X > &)
Definition: ranges.h:668
IntervalND(int ndim_)
Definition: ranges.h:211
bool isEqual(const BasicInterval< T > &i, const T &eps) const
Definition: ranges.h:416
BasicInterval< T > & operator=(const BasicInterval< T > &)
Definition: ranges.h:377
int nearestIndex(const X &) const
Definition: ranges.h:701
virtual void setUdf()
Definition: ranges.h:605
bool isset
Definition: ranges.h:238
bool isCompatible(const StepInterval< T > &, float eps=(1e-10)) const
Definition: ranges.h:781
bool includes(const X &val, bool allowrev) const
Definition: ranges.h:286
virtual Interval< T > * clone() const
Definition: ranges.h:406