OpendTect  6.6
manobjectset.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: Bert
8  Date: Feb 2009
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "objectset.h"
15 #include "refcount.h"
16 
18 template <class T>
20 {
21 public:
22 
24  typedef typename ObjectSet<T>::idx_type idx_type;
25 
26  virtual bool isManaged() const { return true; }
27 
28  inline virtual T* removeSingle(idx_type,bool kporder=true);
30  inline virtual void removeRange(idx_type,idx_type);
31  inline virtual T* replace(idx_type, T*);
33  inline virtual T* removeAndTake(idx_type,bool kporder=true);
35  inline virtual void erase();
36 
37  inline virtual ManagedObjectSetBase<T>& operator-=(T*);
38 
39 protected:
40 
41  typedef void (*PtrFunc)(T*ptr);
42  ManagedObjectSetBase(PtrFunc delfunc)
43  : ObjectSet<T>()
44  , delfunc_( delfunc )
45  {}
47 private:
48 
49  PtrFunc delfunc_;
50 };
51 
52 
55 template <class T>
57 {
58 public:
59 
61  typedef typename ObjectSet<T>::idx_type idx_type;
62 
63  inline ManagedObjectSet();
64  virtual ManagedObjectSet* clone() const
65  { return new ManagedObjectSet(*this); }
66 
68  //Must be implemented as default
69  //copy constructor will call
70  //operator= before class is fully setup and
71  //append is not in virtual table
72 
74 
76 
77  inline virtual void append(const ObjectSet<T>&);
78 
79 private:
80 
81  static void delFunc(T* ptr) { delete ptr; }
82 };
83 
84 
90 template <class T>
92 {
93 public:
94 
96  typedef typename ObjectSet<T>::idx_type idx_type;
97 
98  RefObjectSet();
100  RefObjectSet(const ObjectSet<T>&);
101  virtual RefObjectSet* clone() const
102  { return new RefObjectSet(*this); }
103 
104  RefObjectSet<T>& operator=(const ObjectSet<T>&);
105  inline virtual T* replace(idx_type,T*);
106  inline virtual void insertAt(T*,idx_type);
107 
108 protected:
109 
110  virtual ObjectSet<T>& doAdd(T*);
111  static void unRef( T* ptr ) { unRefPtr(ptr); }
112 
113 };
114 
115 
116 template <class T> inline
118 { erase(); }
119 
120 
121 template <class T> inline
123 {
124  if ( ptr )
125  {
126  this->vec_.erase( (T*)ptr );
127  delfunc_( ptr );
128  }
129 
130  return *this;
131 }
132 
133 
134 template <class T> inline
136 {
137  delfunc_( ObjectSet<T>::removeSingle( vidx, kporder ) );
138  return 0; //Don't give anyone a chance to play with the deleted object
139 }
140 
141 
142 template <class T> inline
144 {
145  delfunc_( ObjectSet<T>::replace( vidx, ptr ) );
146  return 0; //Don't give anyone a chance to play with the deleted object
147 }
148 
149 
150 template <class T> inline
152 {
153  for ( idx_type vidx=i1; vidx<=i2; vidx++ )
154  delfunc_( this->get(vidx) );
155 
156  ObjectSet<T>::removeRange( i1, i2 );
157 }
158 
159 
160 template <class T> inline
162 {
163  for ( idx_type vidx=ObjectSet<T>::size()-1; vidx>=0; vidx-- )
164  delfunc_( this->get(vidx) );
165 
167 }
168 
169 
170 template <class T> inline
172 {
173  return ObjectSet<T>::removeSingle( vidx, kporder );
174 }
175 
176 
177 //ManagedObjectSet implementation
178 
179 template <class T> inline
181  : ManagedObjectSetBase<T>(delFunc)
182 {}
183 
184 
185 template <class T> inline
187  : ManagedObjectSetBase<T>(delFunc)
188 { *this = t; }
189 
190 
191 template <class T> inline
193  : ManagedObjectSetBase<T>(delFunc)
194 { *this = t; }
195 
196 
197 template <class T> inline
199 { ObjectSet<T>::operator=(os); return *this; }
200 
201 
202 
203 template <class T> inline
205 {
206  const size_type sz = os.size();
207  this->vec_.setCapacity( this->size()+sz, true );
208  if ( !os.isManaged() )
209  ObjectSet<T>::append( os );
210  else
211  for ( idx_type vidx=0; vidx<sz; vidx++ )
212  {
213  auto obj = os.get( vidx );
214  ObjectSet<T>::add( obj ? new T(*obj) : 0 );
215  }
216 }
217 
218 
219 template <class T> inline
221  : ManagedObjectSetBase<T>( unRef )
222 {}
223 
224 
225 template <class T> inline
227  : ManagedObjectSetBase<T>( unRef )
228 { *this = os; }
229 
230 
231 template <class T> inline
233  : ManagedObjectSetBase<T>( unRef )
234 { *this = os; }
235 
236 
237 template <class T> inline
239 { ObjectSet<T>::operator=(os); return *this; }
240 
241 
242 template <class T> inline
244 {
245  refPtr( ptr );
246  return ManagedObjectSetBase<T>::replace( vidx, ptr );
247 }
248 
249 
250 template <class T> inline
252 {
253  refPtr( ptr );
255 }
256 
257 
258 template <class T> inline
260 { refPtr( ptr ); return ObjectSet<T>::doAdd(ptr); }
ManagedObjectSet::idx_type
ObjectSet< T >::idx_type idx_type
Definition: manobjectset.h:61
ObjectSet::isManaged
virtual bool isManaged() const
Definition: objectset.h:49
ManagedObjectSet::size_type
ObjectSet< T >::size_type size_type
Definition: manobjectset.h:60
RefObjectSet::clone
virtual RefObjectSet * clone() const
Definition: manobjectset.h:101
ObjectSet::removeRange
virtual void removeRange(idx_type from, idx_type to)
Definition: objectset.h:563
ObjectSet
Set of pointers to objects.
Definition: commontypes.h:31
ObjectSet::add
ObjectSet & add(T *t)
Definition: objectset.h:69
ManagedObjectSetBase
Helper class to RefObjectSet and ManagedObjectSet.
Definition: manobjectset.h:20
ObjectSet::removeSingle
virtual T * removeSingle(idx_type, bool keep_order=true)
Definition: objectset.h:547
ManagedObjectSetBase::ManagedObjectSetBase
ManagedObjectSetBase(PtrFunc delfunc)
Definition: manobjectset.h:42
ManagedObjectSetBase::removeAndTake
virtual T * removeAndTake(idx_type, bool kporder=true)
Definition: manobjectset.h:171
RefObjectSet::unRef
static void unRef(T *ptr)
Definition: manobjectset.h:111
ManagedObjectSetBase::removeSingle
virtual T * removeSingle(idx_type, bool kporder=true)
Definition: manobjectset.h:135
ObjectSet::size
size_type size() const
Definition: objectset.h:55
ManagedObjectSetBase::replace
virtual T * replace(idx_type, T *)
Definition: manobjectset.h:143
ManagedObjectSet::operator=
ManagedObjectSet< T > & operator=(const ObjectSet< T > &)
Definition: manobjectset.h:198
ManagedObjectSet
ObjectSet where the objects contained are owned by this set.
Definition: manobjectset.h:57
ManagedObjectSet::ManagedObjectSet
ManagedObjectSet(const ObjectSet< T > &)
Definition: manobjectset.h:186
RefObjectSet::insertAt
virtual void insertAt(T *, idx_type)
Definition: manobjectset.h:251
ObjectSet::doAdd
virtual ObjectSet & doAdd(T *)
Definition: objectset.h:432
ManagedObjectSetBase::operator-=
virtual ManagedObjectSetBase< T > & operator-=(T *)
Definition: manobjectset.h:122
ManagedObjectSetBase::isManaged
virtual bool isManaged() const
Definition: manobjectset.h:26
ManagedObjectSetBase::~ManagedObjectSetBase
~ManagedObjectSetBase()
Definition: manobjectset.h:117
RefObjectSet::size_type
ObjectSet< T >::size_type size_type
Definition: manobjectset.h:95
mClass
#define mClass(module)
Definition: commondefs.h:181
ObjectSet::idx_type
size_type idx_type
Definition: objectset.h:39
ObjectSet::operator=
ObjectSet & operator=(const ObjectSet &)
Definition: objectset.h:348
ManagedObjectSetBase::size_type
ObjectSet< T >::size_type size_type
Definition: manobjectset.h:23
RefObjectSet::operator=
RefObjectSet< T > & operator=(const ObjectSet< T > &)
Definition: manobjectset.h:238
ObjectSet::append
virtual void append(const ObjectSet &)
Definition: objectset.h:524
RefObjectSet::RefObjectSet
RefObjectSet()
Definition: manobjectset.h:220
RefObjectSet::replace
virtual T * replace(idx_type, T *)
Definition: manobjectset.h:243
ManagedObjectSetBase::delfunc_
PtrFunc delfunc_
Definition: manobjectset.h:49
ObjectSet::erase
virtual void erase()
Definition: objectset.h:85
ManagedObjectSetBase::idx_type
ObjectSet< T >::idx_type idx_type
Definition: manobjectset.h:24
ObjectSet::size_type
int size_type
Definition: objectset.h:38
ManagedObjectSetBase::removeRange
virtual void removeRange(idx_type, idx_type)
Definition: manobjectset.h:151
ManagedObjectSet::clone
virtual ManagedObjectSet * clone() const
Definition: manobjectset.h:64
ManagedObjectSetBase::erase
virtual void erase()
Definition: manobjectset.h:161
refcount.h
ObjectSet::insertAt
virtual void insertAt(T *newptr, idx_type)
Definition: objectset.h:497
ManagedObjectSet::ManagedObjectSet
ManagedObjectSet(const ManagedObjectSet< T > &)
Definition: manobjectset.h:192
RefObjectSet::doAdd
virtual ObjectSet< T > & doAdd(T *)
Definition: manobjectset.h:259
ObjectSet::get
virtual T * get(idx_type)
Definition: objectset.h:393
objectset.h
ManagedObjectSet::append
virtual void append(const ObjectSet< T > &)
Definition: manobjectset.h:204
ManagedObjectSet::delFunc
static void delFunc(T *ptr)
Definition: manobjectset.h:81
ManagedObjectSet::ManagedObjectSet
ManagedObjectSet()
Definition: manobjectset.h:180
RefObjectSet::idx_type
ObjectSet< T >::idx_type idx_type
Definition: manobjectset.h:96
RefObjectSet
Definition: manobjectset.h:92

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