56 : sampling_(PosType(0),PosType(1)) {}
63 inline size_type
size()
const;
65 inline void setEmpty();
67 sampling_,cSamplingChange());
68 void setSize(size_type);
70 inline VT
get(
IdxType,
bool cumulative=
false)
const;
71 inline VT operator[](IdxType)
const;
72 inline VT valueAt(PosType,
bool cumulative)
const;
73 inline IdxType getBinNr(PosType)
const;
74 inline SetType
getSet(
bool cum )
const 75 {
mLock4Read();
return cum ? cumdata_ : data_; }
78 inline void set(
const VT*);
79 inline void add(
const VT*);
82 {
return sumOfValues() == VT(1); }
83 inline VT sumOfValues()
const;
84 inline VT maxValue()
const;
85 inline RangeType dataRange()
const;
87 inline PosType positionForCumulative(VT)
const;
88 inline PosType medianPosition()
const;
90 {
return cum ? cumdata_.arr() : data_.arr(); }
97 static inline IdxType getBinNrFor(PosType,
const SamplingType&,
108 void setCumData(
int);
109 inline VT gtMax(
int* idxat=0)
const;
118 template <
class VT>
inline 122 , cumdata_(oth.cumdata_)
123 , sampling_(oth.sampling_)
128 template <
class VT>
inline 137 template <
class VT>
inline 146 template <
class VT>
inline 156 template <
class VT>
inline 166 template <
class VT>
inline 177 template <
class VT>
inline 186 template <
class VT>
inline 197 template <
class VT>
inline 205 template <
class VT>
inline 215 ret = (
IdxType)( fbin + 0.5f );
223 template <
class VT>
inline 232 template <
class VT>
inline 235 return get( idx, false );
239 template <
class VT>
inline 246 template <
class VT>
inline 251 const int sz = vals.
size();
258 else if ( fidx > vals.
size()-0.5f )
259 fidx = vals.
size()-0.5f;
263 const int aftidx =
getLimited( ((
int)fidx + 1), 0, sz );
264 const int beforeidx = aftidx - 1;
266 const VT valbefore = beforeidx<0 ? (cumulative?VT(0):vals[0])
268 const VT valafter = aftidx>sz-2 ? vals.
last() : vals[ aftidx ] ;
269 const PosType relpos = (fidx - beforeidx);
270 return valbefore + (valafter-valbefore) * relpos;
274 template <
class VT>
inline 288 template <
class VT>
inline 297 const VT diff = val -
data_[isamp];
300 for (
IdxType idx=isamp+1; idx<sz; idx++ )
306 template <
class VT>
inline 311 VT add2cumulative = 0;
312 for (
IdxType idx=0; idx<sz; idx++ )
314 add2cumulative += vals[idx];
315 data_[idx] += vals[idx];
323 template <
class VT>
inline 330 template <
class VT>
inline 335 for (
IdxType idx=0; idx<sz; idx++ )
337 data_[idx] = vals[idx];
345 template <
class VT>
inline 353 template <
class VT>
inline 361 template <
class VT>
inline 371 template <
class VT>
inline 379 return sz == 1 ?
data_[0] : VT(0);
382 for (
IdxType idx=1; idx<sz; idx++ )
384 const VT val =
data_[idx];
407 else if ( val <= VT(0) )
418 for (
int idx=0; idx<sz; idx++ )
421 if ( val <= nextval )
425 if ( val == nextval )
428 const VT prevval = idx ?
cumdata_[idx-1] : VT(0);
429 const PosType relpos = (val - prevval) / (nextval - prevval);
436 for (
int idx=sz-1; idx>0; idx-- )
439 if ( val >= prevval )
443 if ( prevval == val )
447 const PosType relpos = (val - prevval) / (nextval - prevval);
469 template <
class VT>
inline #define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
T step
Definition: samplingdata.h:48
SetType getSet(bool cum) const
Definition: datadistribution.h:74
#define mLock4Read()
Definition: monitor.h:60
int ChangeType
Definition: monitorable.h:80
RangeType dataRange() const
Definition: datadistribution.h:362
~DataDistribution()
Definition: datadistribution.h:167
VT maxValue() const
Definition: datadistribution.h:354
void set(IdxType, VT)
slow, O(N)
Definition: datadistribution.h:289
short IdxType
Definition: seisblocksdata.h:39
SamplingData< PosType > SamplingType
Definition: datadistribution.h:52
VT get(IdxType, bool cumulative=false) const
Definition: datadistribution.h:240
size_type IdxType
Definition: datadistribution.h:51
PosType positionForCumulative(VT) const
Definition: datadistribution.h:398
#define mStartMonitorableCompare()
Helper macro to easily implement your compareClassData() in standard situations.
Definition: monitor.h:235
bool isNormalised() const
Definition: datadistribution.h:81
Definition: sharedobject.h:18
static const DataDistribution< VT > & getEmptyDistrib()
Definition: datadistribution.h:470
SamplingType sampling_
Definition: datadistribution.h:106
#define mDefineStaticLocalObject(type, var, init)
Definition: commondefs.h:199
void setCumData(int)
Definition: datadistribution.h:324
Definition: datadistribution.h:20
#define mLock2Write()
Definition: monitor.h:62
size_type size() const
Definition: datadistribution.h:198
SetType data_
Definition: datadistribution.h:104
bool isEmpty() const
Definition: odset.h:43
IdxType getBinNr(PosType) const
Definition: datadistribution.h:224
ChangeType compareClassData(const SharedObject &) const
#define mDeclMonitorableAssignment(clss)
like mDeclAbstractMonitorableAssignment but for non-abstract subclasses. Implements the clone() metho...
Definition: monitor.h:111
VT * getArr(bool cum) const
for fast non-shared usage
Definition: datadistribution.h:89
static ChangeType cDataChange()
Definition: datadistribution.h:93
Interval of values.
Definition: commontypes.h:27
#define mSendChgNotif(typ, id)
Definition: monitor.h:66
void setEmpty()
Definition: datadistribution.h:275
virtual T * arr()
3rd party access
Definition: typeset.h:86
static IDType cUnspecChgID()
Definition: monitorable.h:108
#define mLock4Write()
Definition: monitor.h:61
T atIndex(IT) const
Definition: samplingdata.h:156
I size_type
Definition: typeset.h:29
SetType cumdata_
Definition: datadistribution.h:105
#define mImplSimpleMonitoredGetSet(pfx, fnnmget, fnnmset, typ, memb, chgtyp)
Defines simple MT-safe copyable member access.
Definition: monitor.h:39
VT valueAt(PosType, bool cumulative) const
Definition: datadistribution.h:247
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
VT operator[](IdxType) const
Definition: datadistribution.h:233
mGenImplMonitorableAssignment(template< class VT > inline, DataDistribution< VT >, SharedObject)
T start
Definition: samplingdata.h:47
void setEmpty()
Definition: odset.h:44
#define mDeliverMonitorableCompare()
Definition: monitor.h:255
T & last()
Definition: typeset.h:320
Definition: datadistribution.h:18
void copyClassData(const SharedObject &)
static IdxType getBinNrFor(PosType, const SamplingType &, size_type nrbins)
Definition: datadistribution.h:206
TypeSet< VT > SetType
Definition: datadistribution.h:49
static ChangeType cSamplingChange()
Definition: datadistribution.h:94
VT sumOfValues() const
Definition: datadistribution.h:346
float getfIndex(FT) const
Definition: samplingdata.h:124
VT DataValueType
Definition: datadistribution.h:46
size_type size() const
Definition: typeset.h:263
T getLimited(T v, T min, T max)
Definition: commondefs.h:43
PosType medianPosition() const
Definition: datadistribution.h:459
void add(const VT *)
fast, no checks
Definition: datadistribution.h:307
#define mSendEntireObjChgNotif()
Definition: monitor.h:67
Interval< VT > RangeType
Definition: datadistribution.h:53
#define mHandleMonitorableCompare(memb, val)
Definition: monitor.h:237
DataDistribution()
Definition: datadistribution.h:55
bool isEmpty() const
Definition: datadistribution.h:64
Sharable data distribution. Sampling defaults to 0 step 1.
Definition: datadistribution.h:42
#define mClass(module)
Definition: commondefs.h:161
void sendDelNotif() const
DataValueType PosType
Definition: datadistribution.h:47
virtual bool validIdx(int64_t) const
Definition: typeset.h:288
SetType::size_type size_type
Definition: datadistribution.h:50
VT ValueType
Definition: datadistribution.h:48
VT gtMax(int *idxat=0) const
Definition: datadistribution.h:372