 |
OpendTect
6.6
|
Go to the documentation of this file.
37 inline void set(
const T& start,
const T& stop);
47 inline T width(
bool allowrev=
true)
const;
48 inline T center()
const;
49 inline float getfCenter()
const;
50 inline void shift(
const T& len);
51 inline void widen(
const T& len,
bool allowrev=
true);
53 inline T atIndex(
int,
const T& step)
const;
55 inline int getIndex(
const X&,
const T& step)
const;
57 inline float getfIndex(
const X&,
const T& step)
const;
59 inline int nearestIndex(
const X& x,
const T& step)
const;
61 inline int indexOnOrAfter(
X x,
const T& step,
62 float eps=1e-5)
const;
68 inline X limitValue(
const X&)
const;
72 bool allrev=
true)
const;
74 inline bool includes(
const X&,
bool allowrev )
const;
77 bool allowrev=
true)
const;
80 bool allowrev=
true)
const;
83 inline float pos(
X val,
bool limit=
true,
84 bool allowrev=
true)
const;
87 inline void include(
const T&,
bool allowrev=
true);
96 inline bool isRev()
const {
return start > stop; }
121 inline virtual void scale(
const T&);
123 virtual void sort(
bool asc=
true );
125 virtual bool hasStep()
const {
return false; }
160 inline void set(
const T& start,
const T& stop,
const T& step);
171 template <
class X>
inline
183 inline T
snap(
const X&,
int dir)
const;
188 virtual inline void sort(
bool asc=
true);
223 int nDim()
const {
return ndim; }
224 bool isSet()
const {
return isset; }
227 template <
class X>
inline
228 void setRange(
const X& val);
229 template <
class X>
inline
230 void setRange(
const X& start,
const X& stop);
231 template <
class X>
inline
232 void include(
const X& val);
234 template <
class X>
inline
235 bool includes(
const X& val,
bool allowrev)
const;
237 bool allowrev)
const;
251 template <
class T>
template <
class X>
inline
254 for (
int dim=0; dim<ndim; dim++ )
255 ranges[dim].start = ranges[dim].stop = (T) val[dim];
262 template <
class T>
template <
class X>
inline
265 for (
int dim=0; dim<ndim; dim++ )
267 ranges[dim].start = start[dim];
268 ranges[dim].stop = stop[dim];
275 template <
class T>
template <
class X>
inline
280 pErrMsg(
"Doing include on undefined IntervalND");
283 for (
int dim=0; dim<ndim; dim++ )
284 ranges[dim].include((T) val[dim]);
290 template <
class T>
template <
class X>
inline
296 pErrMsg(
"Doing includes on undefined IntervalND");
301 for (
int dim=0; dim<ndim; dim++ )
303 if ( !ranges[dim].includes(val[dim], allowrev ) )
311 template <
class T>
inline
316 pErrMsg(
"Invalid intersection");
322 for (
int dim=0; dim<ndim; dim++ )
324 vector[dim] = ranges[dim].start;
330 if ( b.
includes((T*)vector, allowrev ) )
338 isstart[dim] =
false;
339 vector[dim] = ranges[dim].stop;
345 vector[dim] = ranges[dim].start;
360 template <
class T1,
class T2>
363 i1.start = (T1)i2.start;
364 i1.stop = (T1)i2.stop;
368 si1->step = (T1)si2->step;
372 template <
class T1,
class T2>
374 { i1.start = (T1)i2.start; i1.stop = (T1)i2.stop; i1.
step = (T1)i2.
step; }
383 { start = intv.
start; stop = intv.
stop;
return *
this; }
386 template <
class T>
template <
class X>
inline
394 template <
class X>
inline
402 : start(0), stop(0) {}
405 template <
class T>
inline
407 : start(t1), stop(t2) {}
410 template <
class T>
inline
415 template <
class T>
inline
417 { start = t1; stop = t2; }
420 template <
class T>
inline
425 template <
class T>
inline
427 {
return start == i.
start && stop == i.
stop; }
430 template <
class T>
inline
432 {
return ! (i == *
this); }
435 template <
class T>
inline
440 template <
class T>
inline
442 { start += i.
start; stop += i.
stop;
return *
this; }
445 template <
class T>
template <
class X>
inline
454 template <
class T>
inline
456 {
return allowrev && isRev() ? start - stop : stop - start; }
459 #define mCenterImpl(func,typ) \
460 template <class T> inline \
461 typ BasicInterval<T>::func() const \
462 { return ((typ)(start+stop))/2; }
470 template <
class T>
inline
472 { start += len; stop += len; }
475 template <
class T>
inline
478 if ( allowrev && isRev() )
479 { start += len; stop -= len; }
481 { start -= len; stop += len; }
485 template <
class T>
template <
class X>
inline
488 return allowrev && isRev()
489 ? t>=stop && start>=t
490 : t>=start && stop>=t;
494 template <
class T>
template <
class X>
inline
497 return includes( t.
start, allowrev ) && includes( t.
stop, allowrev );
501 template <
class T>
template <
class X>
inline
508 template <
class T>
template <
class X>
inline
511 float res = allowrev && isRev()
512 ? (val-stop)/(start-stop)
513 : (val-start)/(stop-start);
517 if ( res<0 ) res = 0;
518 else if ( res>1 ) res = 1;
525 template <
class T>
template <
class X>
inline
527 bool allowrev )
const
529 return includes( t.
start, allowrev ) || includes( t.
stop, allowrev ) ||
534 template <
class T>
inline
541 else if ( allowrev && isRev() )
542 {
if ( stop>i ) stop=i;
if ( start<i ) start=i; }
544 {
if ( start>i ) start=i;
if ( stop<i ) stop=i; }
548 template <
class T>
inline
550 { include( i.
start, allowrev ); include( i.
stop, allowrev ); }
553 template <
class T>
inline
555 {
return start + step * idx; }
558 template <
class T>
template <
class X>
inline
560 {
return (
int)(( t - start ) / step); }
563 template <
class T>
template <
class X>
inline
568 template <
class T>
template <
class X>
inline
571 const bool isrev = isRev();
572 if ( (!isrev&&t>stop) || (isrev&&t<stop) )
return stop;
573 if ( (!isrev&&t<start) || (isrev&&t>start) )
return start;
580 template <
class T>
inline
586 template <
class T>
inline
592 template <
class T>
inline
601 template <
class T>
inline
606 template <
class T>
inline
613 template <
class T>
inline
638 step = sintv ? sintv->step : 1;
645 {
assign( *
this, intv );
return *
this; }
648 template <
class T>
inline
653 template <
class T>
inline
658 template <
class T>
inline
663 template <
class T>
inline
668 template <
class T>
inline
673 template <
class T>
inline
678 template <
class T>
inline
680 {
return ! (i == *
this); }
683 template <
class T>
template <
class X>
inline
694 template <
class T>
inline
699 template <
class T>
template <
class X>
inline
704 template <
class T>
template <
class X>
inline
709 template <
class T>
template <
class X>
inline
716 template <
class T>
template <
class X>
inline
719 const float fidx = getfIndex( t );
720 const float snapdiff = std::abs( fidx -
int(fidx) );
721 if ( snapdiff > eps )
724 return fidx > -eps && fidx <= nrSteps() + eps;
728 template <
class T>
template <
class X>
inline
733 template <
class T>
template <
class X>
inline
735 {
return atIndex( nearestIndex(t) ); }
738 template <
class T>
template <
class X>
inline
742 return atIndex( nearestIndex(t) );
744 const float fidx = getfIndex( t );
746 return atIndex( idx );
750 template <
class T>
inline
754 if ( (asc && step < 0) || (!asc && step > 0) )
759 template <
class T>
inline
767 template <
class T>
inline
772 template <
class T>
inline
775 const float relstep = (float) inputstep/step;
776 int nrsteps =
mNINT32(relstep);
777 if ( nrsteps<1 ) nrsteps = 1;
782 template <
class T>
inline
793 if ( !step )
return 0;
794 int ret = (((int)this->start) - ((int) this->stop)) / ((
int) step);
795 return ret < 0 ? -ret : ret;
799 #define mDefFNrSteps(typ) \
801 inline int StepInterval<typ>::nrSteps() const \
803 if ( !step ) return 0; \
804 typ ns = ( (start > stop ? start : stop) \
805 - (start > stop ? stop : start) ) \
806 / (step > 0 ? step : -step); \
807 return mNINT32(ns); \
821 const T diff = this->start - b.start;
826 #define mDefFltisCompat(typ,releps) \
828 inline bool StepInterval<typ>::isCompatible( const StepInterval<typ>& b, \
831 const typ castedeps = (typ) eps; \
832 if ( !mIsEqual(step,b.step, castedeps) ) return false; \
834 typ nrsteps = (start - b.start) / step; \
835 const int nrstepsi = mNINT32( nrsteps ); \
837 return mIsEqual( start, b.start, \
838 mIsZero(start,releps) ? releps \
839 : start < 0. ? -start * releps \
842 typ reldiff = (nrsteps - nrstepsi) / nrsteps; \
843 return ( (reldiff) < (releps) && (reldiff) > (-releps) ); \
virtual bool isUdf() const
Definition: ranges.h:607
void Swap(T &a, T &b)
Definition: commondefs.h:46
StepInterval()
Definition: ranges.h:621
FixedString X()
Definition: keystrs.h:188
void set(const T &start, const T &stop)
Definition: ranges.h:416
bool includes(const X &val, bool allowrev) const
Definition: ranges.h:291
int ndim
Definition: ranges.h:241
T width(bool allowrev=true) const
Definition: ranges.h:455
int nDim() const
Definition: ranges.h:223
#define mDefFltisCompat(typ, releps)
Definition: ranges.h:826
Interval< int > SampleGate
Definition: ranges.h:130
int indexOnOrAfter(X x, float eps) const
Definition: ranges.h:710
int indexOnOrAfter(X x, const T &step, float eps=1e-5) const
Definition: ranges.h:395
virtual void sort(bool asc=true)
Definition: ranges.h:751
bool isEqual(const StepInterval< T > &i, const T &eps) const
Definition: ranges.h:669
const BasicInterval< T > & setFrom(const BasicInterval< X > &)
Definition: ranges.h:446
#define mIsEqual(x, y, eps)
Definition: commondefs.h:67
int getIndex(const X &, const T &step) const
Definition: ranges.h:559
Interval()
Definition: ranges.h:111
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
int nrSteps() const
Definition: ranges.h:791
void shift(const T &len)
Definition: ranges.h:471
virtual StepInterval< T > * clone() const
Definition: ranges.h:659
virtual void sort(bool asc=true)
Definition: ranges.h:593
T atIndex(int) const
Definition: ranges.h:695
BasicInterval< T > operator+(const BasicInterval< T > &) const
Definition: ranges.h:436
virtual bool isUdf() const
Definition: ranges.h:649
bool operator==(const BasicInterval< T > &) const
Definition: ranges.h:426
#define mDefEps
Definition: commondefs.h:71
BasicInterval()
Definition: ranges.h:401
virtual Interval< T > * clone() const
Definition: ranges.h:411
bool isCompatible(const StepInterval< T > &, float eps=(1e-10)) const
Definition: ranges.h:814
virtual ~Interval()
Definition: ranges.h:112
Interval< T > * ranges
Definition: ranges.h:242
#define mDynamicCastGet(typ, out, in)
Definition: commondefs.h:148
void assign(Interval< T1 > &i1, const Interval< T2 > &i2)
Definition: ranges.h:361
bool isSet() const
Definition: ranges.h:224
virtual void setUdf()
Definition: ranges.h:654
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
#define mCenterImpl(func, typ)
Definition: ranges.h:459
const Interval< T > & getRange(int dim) const
Definition: ranges.h:226
StepInterval(const Interval< T > &)
Definition: ranges.h:631
int getIndex(const X &) const
Definition: ranges.h:700
void widen(const T &len, bool allowrev=true)
Definition: ranges.h:476
bool includes(const X &, bool allowrev) const
Definition: ranges.h:486
T snappedCenter() const
Definition: ranges.h:768
const StepInterval< T > & setFrom(const Interval< X > &)
Definition: ranges.h:684
T start
Definition: ranges.h:91
void setRange(const X &val)
Definition: ranges.h:252
Interval with step.
Definition: commontypes.h:32
virtual ~IntervalND()
Definition: ranges.h:221
Interval< float > ZGate
Definition: ranges.h:131
Class to store ranges in N dimensions.
Definition: ranges.h:214
float pos(X val, bool limit=true, bool allowrev=true) const
Definition: ranges.h:509
int nearestIndex(const X &x, const T &step) const
Definition: ranges.h:387
bool overlaps(const BasicInterval< X > &, bool allrev=true) const
Definition: ranges.h:526
virtual void setUdf()
Definition: ranges.h:614
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:90
#define mClass(module)
Definition: commondefs.h:181
Interval(const T &start, const T &stop)
Definition: ranges.h:581
void set(const T &start, const T &stop, const T &step)
Definition: ranges.h:664
Holds the fundamental sampling info: start and interval.
Definition: samplingdata.h:22
float getfIndex(FT) const
Definition: samplingdata.h:126
T snap(const X &) const
Definition: ranges.h:734
bool operator!=(const BasicInterval< T > &) const
Definition: ranges.h:431
void include(const T &, bool allowrev=true)
Definition: ranges.h:535
Interval(const BasicInterval< T > &b)
Definition: ranges.h:587
void include(const X &val)
Definition: ranges.h:276
bool operator!=(const StepInterval< T > &) const
Definition: ranges.h:679
float nrfSteps() const
Definition: ranges.h:783
#define pErrMsg(msg)
Usual access point for programmer error messages.
Definition: errmsg.h:37
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
T snap(const X &, int dir) const
dir=0: nearest; -1: downward, 1: upward
Definition: ranges.h:739
T snapStep(const T &inpstep) const
Definition: ranges.h:773
IntervalND(int ndim_)
Definition: ranges.h:216
int nearestIndex(FT) const
Definition: samplingdata.h:138
StepInterval(const T &start, const T &stop, const T &step)
Definition: ranges.h:626
virtual bool hasStep() const
Definition: ranges.h:125
#define mAllocLargeVarLenArr(type, varnm, __size)
Definition: varlenarray.h:30
StepInterval< T > & operator=(const Interval< T > &)
Definition: ranges.h:644
float getfIndex(const X &, const T &step) const
Definition: ranges.h:564
bool intersects(const IntervalND< T > &, bool allowrev) const
Definition: ranges.h:312
static BasicInterval< T > udf()
Definition: ranges.h:94
BasicInterval< T > & operator=(const BasicInterval< T > &)
Definition: ranges.h:382
StepInterval< float > ZSampling
Definition: ranges.h:205
int indexOnOrAfter(FT, float eps=(1e-10)) const
Definition: samplingdata.h:144
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
static Interval< T > udf()
Definition: ranges.h:126
T stop
Definition: ranges.h:92
int nearestIndex(const X &) const
Definition: ranges.h:729
bool isEqual(const BasicInterval< T > &i, const T &eps) const
Definition: ranges.h:421
T atIndex(int, const T &step) const
Definition: ranges.h:554
Base class for Interval. Has no virtual functions and can hence be used in places where no virtual fu...
Definition: ranges.h:31
bool isset
Definition: ranges.h:243
void scale(const T &)
Definition: ranges.h:760
Interval of values.
Definition: commontypes.h:30
BasicInterval< T > & operator+=(const BasicInterval< T > &)
Definition: ranges.h:441
#define mNINT32(x)
Definition: commondefs.h:58
void limitTo(const BasicInterval< X > &i)
Definition: ranges.h:64
static StepInterval< T > udf()
Definition: ranges.h:153
bool operator==(const StepInterval< T > &) const
Definition: ranges.h:674
#define mDefFNrSteps(typ)
Definition: ranges.h:799
bool isPresent(const X &, float eps=1e-5f) const
Definition: ranges.h:717
float getfIndex(const X &) const
Definition: ranges.h:705
virtual bool hasStep() const
Definition: ranges.h:156
virtual void scale(const T &)
Definition: ranges.h:602
X limitValue(const X &) const
Definition: ranges.h:569
StepInterval(const StepInterval< T > &si)
Definition: ranges.h:147
T step
Definition: ranges.h:200
bool isRev() const
Definition: ranges.h:96
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021