C++ main module for mmsd Package  1.0
CORE_SharedPointersList.h
Go to the documentation of this file.
1 #ifndef CORE_SharedPointersList_H
2 #define CORE_SharedPointersList_H
3 
4 #include "boost/shared_ptr.hpp"
5 #include "boost/weak_ptr.hpp"
6 #include "CORE_Object.h"
7 
10 template <class T>
12  //ATTRIBUTES
13  vector<boost::shared_ptr<T> > mVector;
14 
15  //ASSOCIATION
16 
17 public:
18 
19  //CONSTRUCTORS
26  template<class Q>
28  // DESTRUCTORS
29 
30 public:
33  virtual ~CORE_SharedPointersList();
34  // OPERATORS
35 
39  inline const boost::shared_ptr<T>& operator[](const tVectorIndex & i) const {
40 
41  ASSERT_IN(i<(mVector.size()));
42  return mVector[i];
43  };
47  inline boost::shared_ptr<T>& operator[](const tVectorIndex & i) {
48 
49  ASSERT_IN(i<mVector.size());
50  return mVector[i];
51  };
55  inline const T& operator()(const tVectorIndex & i) const {
56 
57  ASSERT_IN(i<mVector.size());
58  ASSERT_IN(mVector[i].get()!=null);
59  return *mVector[i].get();
60  };
63  inline T& operator()(const tVectorIndex & i) {
64  ASSERT_IN(i<mVector.size());
65  ASSERT_IN(mVector[i].get()!=null);
66  return *mVector[i].get();
67  };
68 
69  // New
72  static inline boost::shared_ptr<CORE_SharedPointersList<T> > New() {
73  boost::shared_ptr<CORE_SharedPointersList<T> > p(new CORE_SharedPointersList<T>(),
75  return p;
76  };
77  //COPY
81  template<class Q>
82  void copy(const CORE_SharedPointersList<Q>& cpy);
83 
84  // SET
87  inline void setSize(const tVectorIndex& n) {
88  mVector.resize(n);
89  };
90 
93  tBoolean set(const tVectorIndex& i,boost::shared_ptr<T> obj);
96  inline tBoolean set(const tVectorIndex& i,T& obj) {
97  boost::shared_ptr<T> p;
98  obj.getSharedPointer(p);
99  return set(i,p);
100  };
103  inline tBoolean set(const tVectorIndex & i,T* obj) {
104  boost::shared_ptr<T> p;
105  if (obj!=null) obj->getSharedPointer(p);
106  return set(i,p);
107  };
108 
112  tBoolean insert(const tVectorIndex& i,boost::shared_ptr<T> obj);
113 
117  inline tBoolean insert(const tVectorIndex& i,T* obj) {
118  boost::shared_ptr<T> p;
119  if (obj!=null) obj->getSharedPointer(p);
120  return insert(i,p);
121  };
125  inline tBoolean insert(const tVectorIndex& i,T& obj) {
126  boost::shared_ptr<T> p;
127  obj.getSharedPointer(p);
128  return insert(i,p);
129  };
130 
131 
134  void add(boost::shared_ptr<T> obj) {
135  mVector.push_back(obj);
136  };
139  void add(T& obj) {
140  boost::shared_ptr<T> p;
141  obj.getSharedPointer(p);
142  mVector.push_back(p);
143  };
146  void add(T* obj) {
147  boost::shared_ptr<T> p;
148  if (obj!=null) obj->getSharedPointer(p);
149  mVector.push_back(p);
150  };
151 
152 
153 
154 
157  virtual void addInList(const boost::shared_ptr<T>& obj) {
158  add(obj);
159  };
160 
163  template<class Q>
164  void merge(const CORE_SharedPointersList<Q>& array);
165 
166 
172  inline tBoolean remove(boost::shared_ptr<T> obj) {
173  return remove(obj.get());
174  }
175 
181  tBoolean remove(const T& obj);
187  inline tBoolean remove(const T* obj) {
188  if (obj==null) return false;
189  return remove(*obj);
190  }
191 
195 
196 
199  inline tBoolean remove() {
200  tVectorIndex n=size();
201  if (n==0) return false;
202  return remove(n-1);
203  };
206  inline void clear(){
207  mVector.clear();
208  };
209 
210  // GET
211 
214  inline T* getLastElement() {
215  if (mVector.size()==0) return null;
216  return mVector[mVector.size()-1].get();
217  };
220  inline const T* getLastElement() const {
221  if (mVector.size()==0) return null;
222  return mVector[mVector.size()-1].get();
223  };
224 
227  inline const T* get(const tVectorIndex& i) const {
228  if (i<0) return null;
229  if (i>=mVector.size()) return null;
230  return mVector[i].get();
231  };
232 
235  inline T* get(const tVectorIndex& i) {
236  if (i<0) return null;
237  if (i>=mVector.size()) return null;
238  return mVector[i].get();
239  };
240 
242  inline tVectorIndex size() const {return mVector.size();};
243 
245  inline tVectorIndex getSize() const {return mVector.size();};
246 
247 
250  inline tBoolean exists(boost::shared_ptr<T> obj) const {
251  return exists(obj.get());
252  }
255  tBoolean exists(const T& obj) const;
256 
259  tBoolean exists(const T* obj) const {
260  if (obj==null) return false;
261  return exists(*obj);
262  }
263 
264 
265 
268  void getValues(vector<T*>& vs);
271  void getValues(vector<const T*>& vs) const;
272 
273 
274  // OTHERS
275 
276 
279  void permute(const tVectorIndex& i,const tVectorIndex& j);
280 
283  void reverse();
284 
287  typename vector<boost::shared_ptr<T> >::const_iterator getIterator() const {
288  return mVector.begin();
289  };
292  typename vector<boost::shared_ptr<T> >::iterator getIterator() {
293  return mVector.begin();
294  };
297  typename vector<boost::shared_ptr<T> >::const_iterator getEndIterator() const {
298  return mVector.end();
299  };
302  typename vector<boost::shared_ptr<T> >::iterator getEndIterator() {
303  return mVector.end();
304  };
305 
306 
307 
308 };
310 #endif
void copy(const CORE_SharedPointersList< Q > &cpy)
New copy constructor of a shared pointers list.
Definition: CORE_SharedPointersList.hpp:26
tBoolean insert(const tVectorIndex &i, T &obj)
insert the pointer at index i the old element i become the element i+1
Definition: CORE_SharedPointersList.h:125
tBoolean exists(const T *obj) const
exists
Definition: CORE_SharedPointersList.h:259
class CORE_SharedPointersList is a list of shared pointers
Definition: CORE_SharedPointersList.h:11
tBoolean set(const tVectorIndex &i, boost::shared_ptr< T > obj)
set the pointer at the index i
Definition: CORE_SharedPointersList.hpp:97
tBoolean insert(const tVectorIndex &i, T *obj)
insert the pointer at index i the old element i become the element i+1
Definition: CORE_SharedPointersList.h:117
void clear()
clear the array
Definition: CORE_SharedPointersList.h:206
static boost::shared_ptr< CORE_SharedPointersList< T > > New()
New constructor of a shared pointers list.
Definition: CORE_SharedPointersList.h:72
void add(T &obj)
add an element at the end
Definition: CORE_SharedPointersList.h:139
#define tVectorIndex
Definition: types.h:42
void add(boost::shared_ptr< T > obj)
add an element at the end
Definition: CORE_SharedPointersList.h:134
vector< boost::shared_ptr< T > >::iterator getIterator()
get iterator
Definition: CORE_SharedPointersList.h:292
T & operator()(const tVectorIndex &i)
get the i-th element
Definition: CORE_SharedPointersList.h:63
#define tBoolean
Definition: types.h:48
void add(T *obj)
add an element at the end
Definition: CORE_SharedPointersList.h:146
void merge(const CORE_SharedPointersList< Q > &array)
merge the array in this
Definition: CORE_SharedPointersList.hpp:122
virtual ~CORE_SharedPointersList()
destroy an array of T*
Definition: CORE_SharedPointersList.hpp:19
void reverse()
reverse the vector
Definition: CORE_SharedPointersList.hpp:107
#define null
Definition: types.h:13
tBoolean set(const tVectorIndex &i, T *obj)
set the pointer at the index i
Definition: CORE_SharedPointersList.h:103
tBoolean removeAtIndex(const tVectorIndex &i)
remove the pointer at index i
Definition: CORE_SharedPointersList.hpp:66
tBoolean set(const tVectorIndex &i, T &obj)
set the pointer at the index i
Definition: CORE_SharedPointersList.h:96
void getValues(vector< T * > &vs)
get values
Definition: CORE_SharedPointersList.hpp:137
const boost::shared_ptr< T > & operator[](const tVectorIndex &i) const
get the i-th element shared pointer ASSERT_IN(i<((int)mVector.size()));
Definition: CORE_SharedPointersList.h:39
CORE_SharedPointersList()
internal constructor of a shared pointers list
Definition: CORE_SharedPointersList.hpp:7
vector< boost::shared_ptr< T > >::const_iterator getIterator() const
get iterator
Definition: CORE_SharedPointersList.h:287
virtual void addInList(const boost::shared_ptr< T > &obj)
add a core object
Definition: CORE_SharedPointersList.h:157
tBoolean insert(const tVectorIndex &i, boost::shared_ptr< T > obj)
insert the pointer at index i the old element i become the element i+1
Definition: CORE_SharedPointersList.hpp:86
vector< boost::shared_ptr< T > >::iterator getEndIterator()
get iterator
Definition: CORE_SharedPointersList.h:302
const T * getLastElement() const
get last element pointer
Definition: CORE_SharedPointersList.h:220
abstract base class for most classes.
Definition: CORE_Object.h:30
boost::shared_ptr< T > & operator[](const tVectorIndex &i)
get the i-th element shared pointer ASSERT_IN(i<((int)mVector.size()));
Definition: CORE_SharedPointersList.h:47
T * getLastElement()
get last element pointer
Definition: CORE_SharedPointersList.h:214
const T & operator()(const tVectorIndex &i) const
get the i-th element ASSERT_IN(i<((int)mVector.size()));
Definition: CORE_SharedPointersList.h:55
void permute(const tVectorIndex &i, const tVectorIndex &j)
permute
Definition: CORE_SharedPointersList.hpp:75
vector< boost::shared_ptr< T > >::const_iterator getEndIterator() const
get iterator
Definition: CORE_SharedPointersList.h:297
void setSize(const tVectorIndex &n)
set the size of the shared pointers list
Definition: CORE_SharedPointersList.h:87
tBoolean exists(boost::shared_ptr< T > obj) const
exists
Definition: CORE_SharedPointersList.h:250
tVectorIndex size() const
return the size of the array
Definition: CORE_SharedPointersList.h:242
#define ASSERT_IN(a)
Definition: types.h:96
class Free introduced for deleting a smart pointer
Definition: CORE_Object.h:106
tVectorIndex getSize() const
return the size of the array
Definition: CORE_SharedPointersList.h:245