OpendTect  6.6
posidxpairvalset.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A.H.Bril
8  Date: July 2004/Oct 2013
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "generalmod.h"
15 #include "posidxpair.h"
16 #include "sets.h"
17 #include "ranges.h"
18 #include "od_iosfwd.h"
19 namespace PosInfo { class CubeData; }
20 class TrcKeySampling;
21 
22 
23 namespace Pos
24 {
25 template <class IPT,class FT> class ValueIdxPair;
26 template <class IPT,class FT> class IdxPairValues;
27 
28 
68 {
69 public:
70 
74 
75  IdxPairValueSet(int nr_vals,
76  bool allow_duplicate_idxpairs);
78  virtual ~IdxPairValueSet();
79  IdxPairValueSet& operator =(const IdxPairValueSet&);
80 
81  inline void allowDuplicateIdxPairs( bool yn )
82  { allowdup_ = yn; if ( !yn ) removeDuplicateIdxPairs();}
83  bool allowsDuplicateIdxPairs() const { return allowdup_; }
84  void setEmpty();
85  bool append(const IdxPairValueSet&);
86  void remove(const IdxPairValueSet&);
89 
95  struct SPos
96  {
97  SPos( int ii=-1, int jj=-1 )
98  : i(ii), j(jj) {}
99  void reset() { i = j = -1; }
100  inline bool operator ==( const SPos& p ) const
101  { return i == p.i && j == p.j; }
102  inline bool operator !=( const SPos& p ) const
103  { return i != p.i || j != p.j; }
104  inline bool operator>( const SPos& p ) const
105  { if ( i>p.i ) return true; return i==p.i && j>p.j; }
106  inline bool operator<( const SPos& p ) const
107  { if ( i<p.i ) return true; return i==p.i && j<p.j; }
108  inline bool isValid() const { return i > -1 && j > -1; }
109 
110  int i, j;
111  };
112 
113  inline SPos find( const IdxPair& ip ) const
114  { return findOccurrence( ip, 0 ); }
115  SPos findOccurrence(const IdxPair&,int occ=0) const;
119  SPos findNearest(const IdxPair&) const;
120  SPos findNearestOnFirst(int frst,int scnd) const;
121  bool next(SPos&,bool skip_duplicate_idxpairs=false) const;
122  bool prev(SPos&,bool skip_duplicate_idxpairs=false) const;
123  bool isValid(const IdxPair&) const;
124 
125  void get(const SPos&,IdxPair&,float* v=0,
126  int mxnrvals=-1) const;
127  IdxPair getIdxPair(const SPos&) const;
128  SPos getPos(od_int64 global_idx) const;
130  SPos add(const IdxPair&,const float* vs=0);
132  SPos add(const DataRow&);
134  void set(SPos,const float* vs=0);
135 
139  // more get, set and add: see below
140 
141  inline int nrVals() const { return nrvals_; }
142  inline int nrFirst() const { return frsts_.size(); }
143  int nrSecond(IdxType firstidx) const;
144  inline bool isEmpty() const { return nrFirst() < 1; }
145  inline bool includes( const IdxPair& ip ) const
146  { return find(ip).j > -1; }
147  bool hasFirst(IdxType) const;
148  bool hasSecond(IdxType) const;
154  Interval<float> valRange(int valnr) const;
155 
156  int firstIdx(int) const;
157  int secondIdx(int firstidx,int) const;
158  int firstAtIdx(int firstidx) const;
159  void getSecondsAtIdx(int firstidx,TypeSet<int>&) const;
160 
161  void remove(const SPos&);
163  void remove(const TypeSet<SPos>&);
166  void removeVal(int);
167  bool insertVal(int); //<! Will add a 'column'
168  bool setNrVals(int,bool kp_data=true);
169  int nrDuplicateIdxPairs() const;
170  void sortDuplicateIdxPairs(int value_nr,bool ascending=true);
173 
174  void extend(const IdxPairDelta& stepout,const IdxPairStep&);
176  void removeRange(int valnr,const Interval<float>&,
177  bool inside=true);
180  void remove(const TrcKeySampling& hrg,bool inside);
181 
182  // Convenience stuff
183  SPos add(const PairVal&);
184  SPos add(const IdxPair&,float);
185  SPos add(const IdxPair&,double);
186  SPos add(const IdxPair&,float,float);
187  SPos add(const IdxPair&,const TypeSet<float>&);
188  void add(const PosInfo::CubeData&);
189  void get(const SPos&,DataRow&) const;
190  void get(const SPos&,PairVal&) const;
191  void get(const SPos&,IdxPair&,float&) const;
192  void get(const SPos&,IdxPair&,float&,float&) const;
194  int maxnrvals=-1) const;
195  void set(const SPos&,float);
196  void set(const SPos&,float,float);
197  void set(const SPos&,const TypeSet<float>&);
198  void getColumn(int valnr,TypeSet<float>&,bool incudf) const;
199 
200  // Slow! Can still come in handly for small sets
201  void fillPar(IOPar&,const char* key) const;
202  void usePar(const IOPar&,const char* key);
203 
204  // Fast
207  bool putTo(od_ostream&) const;
208 
209  bool includes(const DataRow&) const;
210  int nrPos(int lineidx) const;
211  inline float* getVals( const SPos& pos )
212  { return valsets_[pos.i]->arr() + nrvals_*pos.j; }
214  inline const float* getVals( const SPos& pos ) const
215  { return valsets_[pos.i]->arr() + nrvals_*pos.j; }
217  inline float getVal( const SPos& pos, int valnr ) const
219  { return getVals(pos)[valnr]; }
220  bool hasDuplicateIdxPairs() const;
221  bool haveDataRow(const DataRow&) const;
222 
223  // aliases
224  inline int nrInls() const { return nrFirst(); }
225  inline int nrCrls( IdxType inl ) const { return nrSecond(inl); }
226  inline int nrRows() const { return nrFirst(); }
227  inline int nrCols( IdxType row ) const { return nrSecond(row); }
228  bool hasInl( IdxType inl ) const { return hasFirst(inl); }
229  bool hasCrl( IdxType crl ) const { return hasSecond(crl); }
230  inline bool hasRow( IdxType row ) const { return hasFirst(row); }
231  inline bool hasCol( IdxType col ) const { return hasSecond(col); }
232  Interval<int> inlRange() const { return firstRange(); }
233  Interval<int> rowRange() const { return firstRange(); }
235  { return secondRange(inl); }
237  { return secondRange(row); }
238 
239 protected:
240 
241  const int nrvals_;
242  TypeSet<IdxType> frsts_; //inline number set
243  ObjectSet< TypeSet<IdxType> > scndsets_; // per inline tracennumbers in 2D
245  bool allowdup_;
246 
247  void addNew(SPos&,IdxType,const float*);
249  int,int,int,bool);
250 
251  void removeLine(int idx);
252 
253  inline IdxType getFrst( const SPos& pos ) const
254  { return frsts_[pos.i]; }
255  inline IdxType getScnd( const SPos& pos ) const
256  { return (*scndsets_[pos.i])[pos.j]; }
257  inline TypeSet<IdxType>& getScndSet( const SPos& pos )
258  { return *scndsets_[pos.i]; }
259  inline const TypeSet<IdxType>& getScndSet( const SPos& pos ) const
260  { return *scndsets_[pos.i]; }
261  inline TypeSet<float>& getValSet( const SPos& pos )
262  { return *valsets_[pos.i]; }
263  inline const TypeSet<float>& getValSet( const SPos& pos ) const
264  { return *valsets_[pos.i]; }
265  inline TypeSet<IdxType>& getScndSet( int idx )
266  { return *scndsets_[idx]; }
267  inline const TypeSet<IdxType>& getScndSet( int idx ) const
268  { return *scndsets_[idx]; }
269  inline TypeSet<float>& getValSet( int idx )
270  { return *valsets_[idx]; }
271  inline const TypeSet<float>& getValSet( int idx ) const
272  { return *valsets_[idx]; }
273 
274  void updNearest(const IdxPair&,const SPos&,
275  od_int64&,SPos&) const;
276 
277  friend class DataPointSet;
278  friend class PosVecDataSet;
279 
280 };
281 
282 
283 } // namespace Pos
284 
285 
Pos::IdxPairValueSet::remove
void remove(const TypeSet< SPos > &)
Pos::IdxPairValueSet::hasFirst
bool hasFirst(IdxType) const
PosInfo::CubeData
Position info for an entire 3D cube. The LineData's are not sorted.
Definition: posinfo.h:95
Pos::IdxPairValueSet::set
void set(const SPos &, float, float)
TrcKeySampling
Horizontal sampling (inline and crossline range and steps).
Definition: trckeysampling.h:35
Pos::IdxPairValueSet::allowDuplicateIdxPairs
void allowDuplicateIdxPairs(bool yn)
Definition: posidxpairvalset.h:81
Pos::IdxPairValueSet::remove
void remove(const TrcKeySampling &hrg, bool inside)
Pos::IdxPairValueSet::nrDuplicateIdxPairs
int nrDuplicateIdxPairs() const
Pos::IdxPairValueSet::hasRow
bool hasRow(IdxType row) const
Definition: posidxpairvalset.h:230
Pos::IdxPairValueSet::nrSecond
int nrSecond(IdxType firstidx) const
Pos::IdxPairValueSet::nrPos
int nrPos(int lineidx) const
nth line in the set
Pos::IdxPairValueSet::prev
bool prev(SPos &, bool skip_duplicate_idxpairs=false) const
Pos::IdxPairValueSet::setNrVals
bool setNrVals(int, bool kp_data=true)
Pos::IdxPairValueSet::~IdxPairValueSet
virtual ~IdxPairValueSet()
Pos::IdxPairValueSet::getPos
SPos getPos(od_int64 global_idx) const
Slow. And no check on idx in range.
Pos::IdxPairValueSet::includes
bool includes(const DataRow &) const
Pos::IdxPairValueSet::IdxPairValueSet
IdxPairValueSet(const IdxPairValueSet &)
Pos
Position.
Definition: commontypes.h:78
Pos::IdxPairValueSet::nrvals_
const int nrvals_
Definition: posidxpairvalset.h:241
Pos::IdxPairValueSet::getVals
float * getVals(const SPos &pos)
Direct access to value arrays.
Definition: posidxpairvalset.h:211
Pos::IdxPairValueSet::append
bool append(const IdxPairValueSet &)
Pos::IdxPairValueSet::SPos::reset
void reset()
Definition: posidxpairvalset.h:99
Pos::IdxPairValueSet::valRange
Interval< float > valRange(int valnr) const
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
Pos::IdxPairValueSet::set
void set(SPos, const float *vs=0)
Pos::IdxPairValueSet::randomSubselect
void randomSubselect(od_int64 maxnr)
Pos::IdxPairValueSet::SPos
position in IdxPairValueSet; an iterator.
Definition: posidxpairvalset.h:96
Pos::IdxPairValueSet::frsts_
TypeSet< IdxType > frsts_
Definition: posidxpairvalset.h:242
Pos::IdxPairValueSet::fillPar
void fillPar(IOPar &, const char *key) const
Pos::IdxPairValueSet::removeLine
void removeLine(int idx)
od_int64
#define od_int64
Definition: plftypes.h:35
Pos::IdxPairValueSet::getScnd
IdxType getScnd(const SPos &pos) const
Definition: posidxpairvalset.h:255
Pos::IdxPairValueSet::inlRange
Interval< int > inlRange() const
Definition: posidxpairvalset.h:232
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Pos::IdxPairValueSet::removeVal
void removeVal(int)
Will remove entire 'column'.
od_istream
OD class for stream read common access to the std::cin.
Definition: od_istream.h:24
Pos::IdxPairValueSet::removeRange
void removeRange(int valnr, const Interval< float > &, bool inside=true)
Pos::IdxPairValueSet::firstAtIdx
int firstAtIdx(int firstidx) const
Pos::IdxPairValueSet::secondIdx
int secondIdx(int firstidx, int) const
Pos::IdxPairValueSet::totalSize
od_int64 totalSize() const
Pos::IdxPairValueSet::remove
void remove(const IdxPairValueSet &)
PosVecDataSet
Data set consisting of data vectors.
Definition: posvecdataset.h:32
Pos::IdxPairValueSet::setEmpty
void setEmpty()
Pos::IdxPairValueSet::allowsDuplicateIdxPairs
bool allowsDuplicateIdxPairs() const
Definition: posidxpairvalset.h:83
Pos::IdxPairValueSet::get
void get(const SPos &, DataRow &) const
Pos::IdxPairValueSet::nrVals
int nrVals() const
Definition: posidxpairvalset.h:141
Pos::IdxPairValueSet::getIdxPair
IdxPair getIdxPair(const SPos &) const
Pos::IdxPairValueSet::nrFirst
int nrFirst() const
Definition: posidxpairvalset.h:142
Pos::IdxPairValueSet::hasInl
bool hasInl(IdxType inl) const
Definition: posidxpairvalset.h:228
operator==
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:81
Pos::IdxPairValueSet::findOccurrence
SPos findOccurrence(const IdxPair &, int occ=0) const
IdxPair::IdxType
Index_Type IdxType
Definition: idxpair.h:33
Pos::IdxPairValueSet::add
SPos add(const PairVal &)
Pos::IdxPairValueSet::add
SPos add(const IdxPair &, double)
Pos::IdxPairValueSet::firstIdxPair
IdxPair firstIdxPair() const
if empty, returns IdxPair::udf()
Pos::IdxPairValueSet::add
void add(const PosInfo::CubeData &)
Pos::IdxPairValueSet::IdxType
IdxPair::IdxType IdxType
Definition: posidxpairvalset.h:71
Pos::IdxPairValueSet::valsets_
ObjectSet< TypeSet< float > > valsets_
Definition: posidxpairvalset.h:244
Pos::IdxPairValueSet::findNearest
SPos findNearest(const IdxPair &) const
Pos::IdxPairValueSet::firstIdx
int firstIdx(int) const
Pos::IdxPairValueSet::IdxPairValueSet
IdxPairValueSet(int nr_vals, bool allow_duplicate_idxpairs)
Pos::IdxPairValueSet::add
SPos add(const IdxPair &, const float *vs=0)
Either pass sufficient data or pass null.
Pos::IdxPairValueSet::get
void get(const SPos &, PairVal &) const
Pos::IdxPairValueSet::remove
void remove(const SPos &)
afterwards, SPos may be invalid
Pos::IdxPairValueSet::getFrom
bool getFrom(od_istream &, Pos::GeomID=mUdf(Pos::GeomID))
detects/converts coords if geomid passed
Pos::IdxPairValueSet::nrCrls
int nrCrls(IdxType inl) const
Definition: posidxpairvalset.h:225
DataPointSet
Set of data points with group selection.
Definition: datapointset.h:48
Pos::IdxPairValueSet::putTo
bool putTo(od_ostream &) const
Pos::IdxPairValueSet::hasCol
bool hasCol(IdxType col) const
Definition: posidxpairvalset.h:231
Pos::IdxPairValueSet::SPos::operator<
bool operator<(const SPos &p) const
Definition: posidxpairvalset.h:106
Pos::IdxPairValueSet::includes
bool includes(const IdxPair &ip) const
Definition: posidxpairvalset.h:145
find
const BufferString * find(const BufferStringSet &, const char *)
Pos::IdxPairValueSet::sortDuplicateIdxPairs
void sortDuplicateIdxPairs(int value_nr, bool ascending=true)
Pos::IdxPairValueSet::getValSet
TypeSet< float > & getValSet(int idx)
Definition: posidxpairvalset.h:269
Pos::IdxPairValueSet::SPos::operator>
bool operator>(const SPos &p) const
Definition: posidxpairvalset.h:104
Pos::IdxPairValueSet::getFrst
IdxType getFrst(const SPos &pos) const
Definition: posidxpairvalset.h:253
operator!=
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:90
Pos::IdxPairValueSet::add
SPos add(const IdxPair &, float, float)
Pos::IdxPairValueSet::copyStructureFrom
void copyStructureFrom(const IdxPairValueSet &)
will also empty this set
Pos::IdxPairValueSet::nrInls
int nrInls() const
Definition: posidxpairvalset.h:224
Pos::IdxPairValueSet::removeDuplicateIdxPairs
void removeDuplicateIdxPairs()
posidxpair.h
Pos::IdxPairValueSet::find
SPos find(const IdxPair &ip) const
Definition: posidxpairvalset.h:113
Pos::IdxPairValueSet::DataRow
IdxPairValues< IdxPair, float > DataRow
Definition: posidxpairvalset.h:73
Pos::IdxPairValueSet::getVal
float getVal(const SPos &pos, int valnr) const
< Direct access to value arrays.
Definition: posidxpairvalset.h:217
Pos::IdxPairValueSet::add
SPos add(const IdxPair &, const TypeSet< float > &)
Pos::IdxPairValueSet::set
void set(const SPos &, float)
Pos::IdxPairValueSet::secondRange
Interval< IdxType > secondRange(IdxType firsidx=-1) const
Pos::IdxPairValueSet::getScndSet
const TypeSet< IdxType > & getScndSet(int idx) const
Definition: posidxpairvalset.h:267
Pos::IdxPairValueSet::add
SPos add(const IdxPair &, float)
Pos::IdxPairValueSet::SPos::j
int j
Definition: posidxpairvalset.h:110
Pos::IdxPairValueSet::hasDuplicateIdxPairs
bool hasDuplicateIdxPairs() const
Pos::IdxPairValueSet::get
void get(const SPos &, IdxPair &, float &, float &) const
Pos::IdxPairValueSet::haveDataRow
bool haveDataRow(const DataRow &) const
Pos::IdxPairValueSet::nrRows
int nrRows() const
Definition: posidxpairvalset.h:226
Pos::IdxPairValueSet::isEmpty
bool isEmpty() const
Definition: posidxpairvalset.h:144
Pos::IdxPairValueSet::getScndSet
const TypeSet< IdxType > & getScndSet(const SPos &pos) const
Definition: posidxpairvalset.h:259
Pos::IdxPairValueSet::getSecondsAtIdx
void getSecondsAtIdx(int firstidx, TypeSet< int > &) const
Pos::IdxPairValueSet::SPos::i
int i
Definition: posidxpairvalset.h:110
Pos::IdxPairValueSet::insertVal
bool insertVal(int)
Pos::IdxPairValueSet::hasSecond
bool hasSecond(IdxType) const
Pos::IdxPairValueSet::getScndSet
TypeSet< IdxType > & getScndSet(const SPos &pos)
Definition: posidxpairvalset.h:257
Pos::IdxPairValueSet::nrCols
int nrCols(IdxType row) const
Definition: posidxpairvalset.h:227
Pos::IdxPairValueSet::get
void get(const SPos &, IdxPair &, float *v=0, int mxnrvals=-1) const
Pos::IdxPairValueSet
A sorted set of IdxPairs and associated values.
Definition: posidxpairvalset.h:68
Pos::IdxPairValueSet::sortPart
void sortPart(TypeSet< IdxType > &, TypeSet< float > &, int, int, int, bool)
Pos::IdxPairValueSet::getVals
const float * getVals(const SPos &pos) const
Direct access to value arrays.
Definition: posidxpairvalset.h:214
Pos::IdxPairValueSet::getColumn
void getColumn(int valnr, TypeSet< float > &, bool incudf) const
PosInfo
Position info, often segmented.
Definition: posinfo.h:40
od_iosfwd.h
Pos::IdxPairValueSet::scndsets_
ObjectSet< TypeSet< IdxType > > scndsets_
Definition: posidxpairvalset.h:243
Pos::IdxPairValueSet::getValSet
TypeSet< float > & getValSet(const SPos &pos)
Definition: posidxpairvalset.h:261
mUdf
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
Pos::IdxPairValueSet::get
void get(const SPos &, IdxPair &, float &) const
Pos::IdxPairValueSet::firstRange
Interval< IdxType > firstRange() const
Pos::IdxPairValueSet::SPos::SPos
SPos(int ii=-1, int jj=-1)
Definition: posidxpairvalset.h:97
Pos::IdxPairValueSet::isValid
bool isValid(const IdxPair &) const
Pos::IdxPairValueSet::getValSet
const TypeSet< float > & getValSet(const SPos &pos) const
Definition: posidxpairvalset.h:263
Pos::IdxPairValueSet::updNearest
void updNearest(const IdxPair &, const SPos &, od_int64 &, SPos &) const
Pos::IdxPair
IdxPair with position indices; base class for BinID et al.
Definition: posidxpair.h:29
Pos::IdxPairValueSet::next
bool next(SPos &, bool skip_duplicate_idxpairs=false) const
Pos::IdxPairValueSet::getValSet
const TypeSet< float > & getValSet(int idx) const
Definition: posidxpairvalset.h:271
Pos::IdxPairValueSet::usePar
void usePar(const IOPar &, const char *key)
Pos::IdxPairValueSet::extend
void extend(const IdxPairDelta &stepout, const IdxPairStep &)
Adds only IdxPair postions not yet in set.
Pos::IdxPairValueSet::allowdup_
bool allowdup_
Definition: posidxpairvalset.h:245
ranges.h
sets.h
Interval
Interval of values.
Definition: commontypes.h:30
Pos::IdxPairValueSet::getScndSet
TypeSet< IdxType > & getScndSet(int idx)
Definition: posidxpairvalset.h:265
Pos::IdxPairValueSet::crlRange
Interval< int > crlRange(IdxType inl=-1) const
Definition: posidxpairvalset.h:234
Pos::ValueIdxPair
IdxPair with a value.
Definition: posidxpairvalue.h:29
od_ostream
OD class for stream write common access to the user log file, or std::cout in other than od_main.
Definition: od_ostream.h:26
Pos::IdxPairValueSet::set
void set(const SPos &, const TypeSet< float > &)
Pos::IdxPairValueSet::get
void get(const SPos &, IdxPair &, TypeSet< float > &, int maxnrvals=-1) const
max == -1 => all
Pos::IdxPairValueSet::SPos::isValid
bool isValid() const
Definition: posidxpairvalset.h:108
Pos::IdxPairValueSet::rowRange
Interval< int > rowRange() const
Definition: posidxpairvalset.h:233
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
Pos::IdxPairValueSet::addNew
void addNew(SPos &, IdxType, const float *)
Pos::IdxPairValueSet::findNearestOnFirst
SPos findNearestOnFirst(int frst, int scnd) const
Pos::GeomID
Index_Type GeomID
Definition: commontypes.h:87
Pos::IdxPairValueSet::PairVal
ValueIdxPair< IdxPair, float > PairVal
Definition: posidxpairvalset.h:72
Pos::IdxPairValueSet::add
SPos add(const DataRow &)
Wrong-sized will be handled correctly.
Pos::IdxPairValues
IdxPair with 0-N values.
Definition: posidxpairvalue.h:22
Pos::IdxPairValueSet::hasCrl
bool hasCrl(IdxType crl) const
Definition: posidxpairvalset.h:229
TypeSet< int >
Pos::IdxPairValueSet::colRange
Interval< int > colRange(IdxType row=-1) const
Definition: posidxpairvalset.h:236

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021