 |
OpendTect
6.6
|
Go to the documentation of this file.
23 template <
class T,
class IT>
35 {
return copy( oth ); }
38 {
return !(*
this == oth); }
55 inline const T&
last()
const;
64 inline bool push(
const T&);
77 bool must_preserve_order=
false);
81 {
swap( (IT)i1, (IT)i2 ); }
89 bool preserver_order=
true);
93 inline virtual T*
arr() {
return gtArr(); }
94 inline virtual const T*
arr()
const {
return gtArr(); }
95 inline std::vector<T>&
vec();
96 inline const std::vector<T>&
vec()
const;
144 #define mDefTypeSetClass( clss, idxtype ) \
146 mClass(Basic) clss : public OD::ValVec<T,idxtype> \
150 typedef typename OD::ValVec<T,idxtype>::idx_type idx_type; \
151 typedef typename OD::ValVec<T,idxtype>::size_type size_type; \
154 : OD::ValVec<T,size_type>() {} \
155 clss( size_type nr, T typ ) \
156 : OD::ValVec<T,size_type>( nr, typ ) {} \
157 explicit clss( T typ ) \
158 : OD::ValVec<T,size_type>( 1, typ ) {} \
159 clss( const T* t, size_type nr ) \
160 : OD::ValVec<T,size_type>( t, nr ) {} \
161 clss( const clss& oth ) \
162 : OD::ValVec<T,size_type>( oth ) {} \
163 virtual clss* clone() const { return new clss(*this); } \
167 mGlobal(Basic) inline void swap( clss<T>& vv1, clss<T>& vv2 ) \
198 operator bool()
const {
return bool(val_); }
212 template <
class T,
class IT>
215 return a.operator ==( b );
218 template <
class T,
class IT>
inline
221 const IT sz = size();
222 if ( sz != oth.
size() )
225 for ( IT vidx=0; vidx<sz; vidx++ )
226 if ( !(get(vidx) == oth.
get(vidx)) )
232 template <
class T,
class IT>
234 {
return !(a == b); }
238 template <
class T,
class IT,
class J,
class S>
241 const J sz = from.
size();
242 if ( !
to.setCapacity( sz +
to.size(),
true ) )
245 for ( J vidx=0; vidx<sz; vidx++ )
246 to.add( (T)from.
get(vidx) );
254 template <
class T,
class IT,
class S>
257 if ( (
void*)(&
to) == (
void*)(&from) )
return;
264 template <
class T,
class IT>
inline
266 bool ascending=
true )
269 const IT sz = vv.
size();
271 { idx_type* ret =
new int [1]; *ret = 0;
return ret; }
275 for ( IT d=sz/2; d>0; d=d/2 )
276 for ( IT i=d; i<sz; i++ )
277 for ( IT j=i-d; j>=0 && vv[idxs[j]]>vv[idxs[j+d]]; j-=d )
281 std::reverse( idxs, idxs+sz );
288 template <
class T,
class IT>
291 T tmp;
const IT sz = vv.
size();
292 for ( IT d=sz/2; d>0; d=d/2 )
293 for ( IT i=d; i<sz; i++ )
294 for ( IT j=i-d; j>=0 && vv[j]>vv[j+d]; j-=d )
295 { tmp = vv[j]; vv[j] = vv[j+d]; vv[j+d] = tmp; }
300 template <
class T,
class IT>
inline
304 template <
class T,
class IT>
inline
306 { setSize( nr, typ ); }
308 template <
class T,
class IT>
inline
312 template <
class T,
class IT>
inline
317 template <
class T,
class IT>
inline
320 template <
class T,
class IT>
inline
322 {
return vec_.size(); }
324 template <
class T,
class IT>
inline
326 {
return vec_.setSize( sz, val ); }
328 template <
class T,
class IT>
inline
330 {
return vec_.getCapacity(); }
332 template <
class T,
class IT>
inline
334 {
return vec_.setCapacity( sz, withmargin ); }
336 template <
class T,
class IT>
inline
338 { vec_.fillWith( val ); }
340 template <
class T,
class IT>
inline
342 { vec_.replace( val, newval ); }
345 template <
class T,
class IT>
inline
347 {
return vec_.validIdx(
sCast(IT,vidx) ); }
349 template <
class T,
class IT>
inline
353 if ( !validIdx(vidx) )
359 template <
class T,
class IT>
inline
363 if ( !validIdx(vidx) )
369 template <
class T,
class IT>
inline
371 {
return vec_.first(); }
373 template <
class T,
class IT>
inline
375 {
return vec_.first(); }
377 template <
class T,
class IT>
inline
379 {
return vec_.last(); }
381 template <
class T,
class IT>
inline
383 {
return vec_.last(); }
385 template <
class T,
class IT>
inline
387 {
return vec_.pop_back(); }
389 template <
class T,
class IT>
inline
391 {
return vec_.indexOf( typ, forward, start ); }
393 template <
class T,
class IT>
inline
395 {
return vec_.isPresent(t); }
397 template <
class T,
class IT>
inline
399 {
return vec_.count( typ ); }
401 template <
class T,
class IT>
inline
403 { vec_.push_back( typ );
return *
this; }
405 template <
class T,
class IT>
inline
407 {
return vec_.push_back( typ ); }
409 template <
class T,
class IT>
inline
411 { vec_.
erase( typ );
return *
this; }
413 template <
class T,
class IT>
inline
415 {
return this == &oth ? *this :
copy( oth.
arr(), oth.
size() ); }
417 template <
class T,
class IT>
inline
421 template <
class T,
class IT>
inline
423 { vec_.remove( i1, i2 ); }
425 template <
class T,
class IT>
inline
427 { vec_.insert( vidx, typ );}
429 template <
class T,
class IT>
inline
431 {
return vec_.vec(); }
433 template <
class T,
class IT>
inline
435 {
return vec_.vec(); }
437 template <
class T,
class IT>
inline
440 return isEmpty() ? nullptr :
const_cast<T*
>( &first() );
444 template <
class T,
class IT>
inline
447 if ( !validIdx(idx1) || !validIdx(idx2) )
454 vec_.swapElems( idx1, idx2 );
458 template <
class T,
class IT>
inline
462 if ( idxs && sz > 1 )
466 get(idx) = tmp->
get( idxs[idx] );
472 template <
class T,
class IT>
inline
475 if ( !validIdx(idxfrom) || !validIdx(idxto) )
478 T tmp = vec_[idxfrom];
479 insert( idxto, tmp );
480 vec_.remove( idxfrom < idxto ? idxfrom : idxfrom+1 );
484 template <
class T,
class IT>
inline
487 const IT sz = size();
489 for ( IT vidx=0; vidx<hsz; vidx++ )
490 swap( vidx, sz-1-vidx );
494 template <
class T,
class IT>
inline
498 { erase();
append(tarr,sz); }
501 for ( IT vidx=0; vidx<sz; vidx++ )
502 get(vidx) = tarr[vidx];
508 template <
class T,
class IT>
inline
514 const ValVec* cln = clone();
515 const bool ret =
append( *cln );
521 template <
class T,
class IT>
inline
524 if ( !sz )
return true;
526 if ( !setCapacity( sz+size(),
true ) )
529 for ( IT vidx=0; vidx<sz; vidx++ )
536 template <
class T,
class IT>
539 const IT sz = oth.
size();
540 const T* ptr = oth.
arr();
541 for ( IT vidx=0; vidx<sz; vidx++, ptr++ )
546 template <
class T,
class IT>
549 for ( IT vidx=0; vidx<size(); vidx++ )
553 removeSingle( vidx--,
false );
558 template <
class T,
class IT>
562 const IT sz = oth.
size();
563 for ( IT vidx=0; vidx<sz; vidx++ )
565 const T typ = oth[vidx];
566 for ( IT idy=0; idy<size(); idy++ )
568 if ( vec_[idy] == typ )
569 removeSingle( idy--, kporder );
575 template <
class T,
class IT>
inline
578 if ( !isPresent(typ) )
579 { *
this += typ;
return true; }
584 template <
class T,
class IT>
inline
591 const IT lastidx = size()-1;
592 if ( vidx != lastidx )
593 vec_[vidx] = vec_[lastidx];
594 vec_.remove( lastidx );
601 template <
class T,
class IT>
603 {
return vv.
get( i ); }
604 template <
class T,
class IT>
606 {
return vv.
get( i ); }
T & getRef(OD::ValVec< T, IT > &vv, IT i)
Definition: typeset.h:602
const_iterator cbegin() const
Definition: vectoraccess.h:50
idx_type getIdx(iterator it) const
Definition: vectoraccess.h:54
char val_
Definition: typeset.h:203
const_iterator cbegin() const
Definition: typeset.h:127
void swap(IT, IT)
Definition: typeset.h:445
const_iterator end() const
Definition: typeset.h:129
T value_type
Definition: typeset.h:118
T to(const F &fr)
Definition: convert.h:34
bool push(const T &)
Definition: typeset.h:406
void sort(OD::ValVec< T, IT > &vv)
Sort OD::ValVec. Must have operator > defined for elements.
Definition: typeset.h:289
bool operator==(const ValVec &) const
Definition: typeset.h:219
#define mGlobal(module)
Definition: commondefs.h:180
bool operator=(bool v)
Definition: typeset.h:199
virtual bool setCapacity(size_type sz, bool withmargin)
Definition: typeset.h:333
iterator begin()
Definition: typeset.h:125
IT size_type
Definition: typeset.h:28
const value_type & const_reference
Definition: typeset.h:120
#define od_int64
Definition: plftypes.h:35
impl_type::iterator iterator
Definition: typeset.h:121
impl_type::iterator iterator
Definition: vectoraccess.h:45
OpendTect.
Definition: commontypes.h:28
Simple vector-based container simplifying index-based work.
Definition: vectoraccess.h:38
ValVec(size_type nr, T typ)
Definition: typeset.h:305
#define sCast(tp, v)
Definition: commondefs.h:141
const_iterator begin() const
Definition: typeset.h:126
virtual bool validIdx(int64_t) const
Definition: typeset.h:346
virtual void removeRange(idx_type from, idx_type to)
Definition: typeset.h:422
virtual void createDifference(const ValVec &, bool must_preserve_order=false)
Removes all items present in other set.
Definition: typeset.h:559
std::vector< T > & vec()
Definition: typeset.h:430
const_iterator cend() const
Definition: typeset.h:130
void setAll(T)
Definition: typeset.h:337
virtual void useIndexes(const idx_type *)
Definition: typeset.h:459
bool isEmpty(const NLAModel *mdl)
impl_type vec_
Definition: typeset.h:111
virtual idx_type indexOf(T, bool forward=true, idx_type start=-1) const
Definition: typeset.h:390
void replace(T, T)
Definition: typeset.h:341
T & first()
Definition: typeset.h:370
const_iterator cend() const
Definition: vectoraccess.h:53
ValVec(const T *, size_type nr)
Definition: typeset.h:309
virtual const T * arr() const
Definition: typeset.h:94
virtual void createIntersection(const ValVec &)
Only keeps common items.
Definition: typeset.h:547
#define mGetIdxArr(tp, var, sz)
Creates new array of an integer type filled with index.
Definition: commondefs.h:258
virtual size_type getCapacity() const
Definition: typeset.h:329
bool operator!=(const ValVec &oth) const
Definition: typeset.h:37
const std::vector< T > & vec() const
Definition: typeset.h:434
const T & operator[](idx_type i) const
Definition: typeset.h:99
T & last()
Definition: typeset.h:378
ValVec * clone() const =0
virtual bool append(const ValVec &)
Definition: typeset.h:509
void swap(TypeSet< T > &vv1, TypeSet< T > &vv2)
Definition: typeset.h:185
impl_type::const_iterator const_iterator
Definition: typeset.h:122
virtual ~ValVec()
Definition: typeset.h:318
VectorAccess< T, IT > impl_type
Definition: typeset.h:110
TypeSet< BoolTypeSetType > BoolTypeSet
Definition: typeset.h:207
#define mClass(module)
Definition: commondefs.h:181
virtual void swapItems(int64_t i1, int64_t i2)
Definition: typeset.h:80
impl_type::const_iterator const_iterator
Definition: vectoraccess.h:46
T * gtArr() const
Definition: typeset.h:438
void swap(VectorAccess &oth)
Definition: vectoraccess.h:120
ValVec & operator-=(const T &t)
Definition: typeset.h:410
size_type count(const T &) const
Definition: typeset.h:398
const T & last() const
Definition: typeset.h:382
T & operator[](idx_type i)
Definition: typeset.h:98
BoolTypeSetType(bool v=false)
Definition: typeset.h:195
size_type idx_type
Definition: typeset.h:29
ValVec()
Definition: typeset.h:301
bool operator!=(const OD::ValVec< T, IT > &a, const OD::ValVec< T, IT > &b)
Definition: typeset.h:233
bool empty() const
Definition: typeset.h:132
iterator end()
Definition: vectoraccess.h:51
idx_type getIdx(iterator it) const
Definition: typeset.h:136
virtual void removeSingle(idx_type, bool preserver_order=true)
Definition: typeset.h:585
bool operator==(const OD::ValVec< T, IT > &a, const OD::ValVec< T, IT > &b)
Definition: typeset.h:213
virtual bool setSize(size_type, T val=T())
Definition: typeset.h:325
iterator begin()
Definition: vectoraccess.h:48
void copy(OD::ValVec< T, IT > &to, const OD::ValVec< S, IT > &from)
Definition: typeset.h:255
iterator end()
Definition: typeset.h:128
Needed because the std lib has a crazy specialisation vector<bool>.
Definition: typeset.h:192
bool isPresent(const T &) const
Definition: typeset.h:394
T pop()
Definition: typeset.h:386
size_type difference_type
Definition: typeset.h:123
virtual T * arr()
3rd party access
Definition: typeset.h:93
ValVec & add(const T &)
Definition: typeset.h:402
const T & get(idx_type) const
Definition: typeset.h:360
virtual void reverse()
Definition: typeset.h:485
ValVec(const ValVec &)
Definition: typeset.h:313
#define od_int32
Definition: plftypes.h:30
const T & first() const
Definition: typeset.h:374
void swap(ValVec &oth)
Definition: typeset.h:133
ValVec & operator+=(const T &t)
Definition: typeset.h:100
size_type max_size() const
Definition: typeset.h:131
virtual ValVec & copy(const ValVec &)
Definition: typeset.h:414
virtual bool append(const T *, size_type)
Definition: typeset.h:522
virtual int64_t nrItems() const
Definition: typeset.h:41
virtual void erase()
Definition: typeset.h:418
T & get(idx_type)
Definition: typeset.h:350
size_type size() const
Definition: typeset.h:321
virtual ValVec & copy(const T *, size_type)
Definition: typeset.h:495
bool append(OD::ValVec< T, IT > &to, const OD::ValVec< S, J > &from)
append allowing a different type to be merged into set
Definition: typeset.h:239
T object_type
Definition: typeset.h:30
LargeValVec< BoolTypeSetType > BoolLargeValVec
Definition: typeset.h:208
void forceCrash(bool withdump)
virtual void insert(idx_type, const T &)
Definition: typeset.h:426
value_type & reference
Definition: typeset.h:119
OD::ValVec< T, IT >::idx_type * getSortIndexes(OD::ValVec< T, IT > &vv, bool ascending=true)
Get sort indexes. Must have operator > defined for elements.
Definition: typeset.h:265
#define mDefTypeSetClass(clss, idxtype)
Definition: typeset.h:144
virtual void createUnion(const ValVec &)
Definition: typeset.h:537
Definition: typeset.h:186
idx_type getIdx(const_iterator it) const
Definition: typeset.h:137
virtual void move(idx_type from, idx_type to)
Definition: typeset.h:473
Sets of (small) copyable elements.
Definition: commontypes.h:29
Base class for all sets used in OpendTect.
Definition: odset.h:33
virtual bool addIfNew(const T &)
Definition: typeset.h:576
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021