FEDRA emulsion software from the OPERA Collaboration
VtRelationList.hh
Go to the documentation of this file.
1 #ifndef __VTRELATIONLIST_HH
2 #define __VTRELATIONLIST_HH
3 // *****************************************************************************
4 //
5 // source:
6 //
7 // type: source code
8 //
9 // created: 21. Aug 2000
10 //
11 // author: Thorsten Glebe
12 // HERA-B Collaboration
13 // Max-Planck-Institut fuer Kernphysik
14 // Saupfercheckweg 1
15 // 69117 Heidelberg
16 // Germany
17 // E-mail: T.Glebe@mpi-hd.mpg.de
18 //
19 // Description: relation container class
20 //
21 // changes:
22 // 21 Aug 2000 (TG) creation
23 // 04 Sep 2000 (TG) RelationList::erase(), RelationList::unbook() added
24 // 04 Sep 2000 (TG) RelationIterator, ConstRelationIterator friend of RelationList
25 // 04 Sep 2000 (TG) RelationList not a friend of itīs iterators any more
26 // 02 Okt 2000 (TG) ReverseRelationIterator, ConstReverseRelationIterator added
27 // 02 Okt 2000 (TG) rbegin(), rend() member functions added
28 // 27 Okt 2000 (TG) #ifndef __CINT__ added
29 // 01 Nov 2000 (TG) operator!=() added for iterators
30 // 09 Mar 2001 (TG) changed size() return value to unsigned int,
31 // added RelationList::clear()
32 //
33 // *****************************************************************************
34 
35 #include <iosfwd>
36 #include <list>
37 
38 #ifdef WIN32
39 # include "RTypes.h"
40 #endif
41 
42 namespace VERTEX {
43  class Relation;
44  class RelationIterator;
45  class ConstRelationIterator;
46  class ReverseRelationIterator;
47  class ConstReverseRelationIterator;
48  class Track;
49  class Vertex;
50 
51  bool createRelation(Track& t, Vertex& v);
52 
57 
58  typedef std::list<Relation*> Relation_v;
63 
64  //============================================================================
65  // Class RelationIterator
66  //============================================================================
68  private:
69  friend class RelationList;
71 
72  public:
73  typedef RelationIterator self;
74 #ifndef __CINT__
75  typedef Relation_it::iterator_category iterator_category;
76 #endif
77  typedef Relation_it::value_type value_type;
78  typedef Relation_it::pointer pointer;
79  typedef Relation_it::reference reference;
81  typedef Relation_it::difference_type difference_type;
82 
84  RelationIterator(const Relation_it& it):iter(it) {}
85 
86  self& operator++();
87  self& operator--();
88  Relation& operator*() const;
89  Relation* operator->() const;
90 
91  inline int operator==(const RelationIterator& rhs) const {
92  return iter == rhs.iter;
93  }
94  inline int operator!=(const RelationIterator& rhs) const {
95  return iter != rhs.iter;
96  }
97 
98 #ifdef WIN32
99  ClassDef(RelationIterator,0)
100 #endif
101  }; // class RelationIterator
102 
103 
104  //============================================================================
105  // Class ConstRelationIterator
106  //============================================================================
108  private:
109  friend class RelationList;
111 
112  public:
113  typedef ConstRelationIterator self;
114 #ifndef __CINT__
115  typedef Relation_cit::iterator_category iterator_category;
116 #endif
117  typedef Relation_cit::value_type value_type;
118  typedef Relation_cit::pointer pointer;
119  typedef Relation_cit::reference reference;
121  typedef Relation_cit::difference_type difference_type;
122 
123 
126 
127  self& operator++();
128  self& operator--();
129  const Relation& operator*() const;
130  const Relation* const operator->() const;
131 
132  inline int operator==(const ConstRelationIterator& rhs) const {
133  return iter == rhs.iter;
134  }
135  inline int operator!=(const ConstRelationIterator& rhs) const {
136  return iter != rhs.iter;
137  }
138 
139 #ifdef WIN32
140  ClassDef(ConstRelationIterator,0)
141 #endif
142  }; // class ConstRelationIterator
143 
144 
145  //============================================================================
146  // Class ReverseRelationIterator
147  //============================================================================
149  private:
150  friend class RelationList;
152 
153  public:
155 #ifndef __CINT__
156  typedef Relation_rit::iterator_category iterator_category;
157 #endif
158  typedef Relation_rit::value_type value_type;
159  typedef Relation_rit::pointer pointer;
160  typedef Relation_rit::reference reference;
161  typedef Relation_rit::difference_type difference_type;
162 
165 
166  self& operator++();
167  self& operator--();
168  Relation& operator*() const;
169  Relation* operator->() const;
170 
171  inline int operator==(const ReverseRelationIterator& rhs) const {
172  return iter == rhs.iter;
173  }
174  inline int operator!=(const ReverseRelationIterator& rhs) const {
175  return iter != rhs.iter;
176  }
177 #ifdef WIN32
178  ClassDef(ReverseRelationIterator,0)
179 #endif
180  }; // class ReverseRelationIterator
181 
182 
183  //============================================================================
184  // Class ConstReverseRelationIterator
185  //============================================================================
187  private:
188  friend class RelationList;
190 
191  public:
193 #ifndef __CINT__
194  typedef Relation_rcit::iterator_category iterator_category;
195 #endif
196  typedef Relation_rcit::value_type value_type;
197  typedef Relation_rcit::pointer pointer;
198  typedef Relation_rcit::reference reference;
199  typedef Relation_rcit::difference_type difference_type;
200 
201 
204 
205  self& operator++();
206  self& operator--();
207  const Relation& operator*() const;
208  const Relation* const operator->() const;
209 
210  inline int operator==(const ConstReverseRelationIterator& rhs) const {
211  return iter == rhs.iter;
212  }
213  inline int operator!=(const ConstReverseRelationIterator& rhs) const {
214  return iter != rhs.iter;
215  }
216 
217 #ifdef WIN32
218  ClassDef(ConstReverseRelationIterator,0)
219 #endif
220  }; // class ConstReverseRelationIterator
221 
222 
224  //============================================================================
225  // Class RelationList - class for Vertex-Track-Kalman relation container
226  //============================================================================
227  class RelationList {
228  public:
233 
236  RelationList();
238  virtual ~RelationList();
239 
242  virtual void clear();
244  inline void push__back(Relation* rel) { rellist.push_back(rel); }
246  Relation* back() const { return rellist.back(); }
248  inline unsigned int size() const { return rellist.size(); }
250  virtual const iterator erase(const iterator& pos);
251 
254  inline iterator begin() { return iterator(rellist.begin()); }
256  inline iterator end() { return iterator(rellist.end()); }
258  inline const_iterator begin() const { return const_iterator(rellist.begin()); }
260  inline const_iterator end() const { return const_iterator(rellist.end()); }
262  inline reverse_iterator rbegin() { return reverse_iterator(rellist.rbegin()); }
264  inline reverse_iterator rend() { return reverse_iterator(rellist.rend()); }
266  inline const_reverse_iterator rbegin() const { return const_reverse_iterator(rellist.rbegin()); }
268  inline const_reverse_iterator rend() const { return const_reverse_iterator(rellist.rend()); }
269 
271  Relation *const operator[](unsigned int i) const;
272 
275  void print(std::ostream& os) const;
277  inline void unbook(Relation* const rel) { rellist.remove(rel); }
279  virtual void remove(Relation* const rel);
280 
281  const RelationList& operator=(const RelationList& rhs);
282 
283  inline bool operator==(const RelationList& rhs) const {
284  return rellist == rhs.rellist;
285  }
286 
287  private:
289 
290 #ifdef WIN32
291  ClassDef(RelationList,0)
292 #endif
293  }; // class RelationList
294 
295  //==============================================================================
296  // operator<<
297  //==============================================================================
298  inline std::ostream& operator<<(std::ostream& s, const RelationList& a) {
299  a.print(s);
300  return s;
301  }
302 
303 } // end of namespace VERTEX
304 #endif
void a()
Definition: check_aligned.C:59
TTree * t
Definition: check_shower.C:4
Definition: Track.h:10
Definition: VtRelationList.hh:107
Relation_cit iter
Definition: VtRelationList.hh:110
ConstRelationIterator()
Definition: VtRelationList.C:194
int operator!=(const ConstRelationIterator &rhs) const
Definition: VtRelationList.hh:135
ConstRelationIterator(const Relation_cit &it)
Definition: VtRelationList.hh:125
const Relation *const operator->() const
Definition: VtRelationList.C:223
self & operator--()
Definition: VtRelationList.C:208
Relation_cit::difference_type difference_type
typedef Relation_cit::size_type size_type;
Definition: VtRelationList.hh:121
int operator==(const ConstRelationIterator &rhs) const
Definition: VtRelationList.hh:132
Relation_cit::iterator_category iterator_category
Definition: VtRelationList.hh:115
Relation_cit::value_type value_type
Definition: VtRelationList.hh:117
self & operator++()
Definition: VtRelationList.C:200
Relation_cit::reference reference
Definition: VtRelationList.hh:119
Relation_cit::pointer pointer
Definition: VtRelationList.hh:118
const Relation & operator*() const
Definition: VtRelationList.C:216
Definition: VtRelationList.hh:186
self & operator--()
Definition: VtRelationList.C:284
Relation_rcit::reference reference
Definition: VtRelationList.hh:198
const Relation *const operator->() const
Definition: VtRelationList.C:299
ConstReverseRelationIterator(const Relation_rcit &it)
Definition: VtRelationList.hh:203
int operator!=(const ConstReverseRelationIterator &rhs) const
Definition: VtRelationList.hh:213
Relation_rcit::difference_type difference_type
Definition: VtRelationList.hh:199
Relation_rcit::iterator_category iterator_category
Definition: VtRelationList.hh:194
Relation_rcit::pointer pointer
Definition: VtRelationList.hh:197
Relation_rcit iter
Definition: VtRelationList.hh:189
Relation_rcit::value_type value_type
Definition: VtRelationList.hh:196
const Relation & operator*() const
Definition: VtRelationList.C:292
ConstReverseRelationIterator()
Definition: VtRelationList.C:270
int operator==(const ConstReverseRelationIterator &rhs) const
Definition: VtRelationList.hh:210
self & operator++()
Definition: VtRelationList.C:276
Definition: VtRelationList.hh:67
self & operator++()
Definition: VtRelationList.C:162
Relation & operator*() const
Definition: VtRelationList.C:178
int operator==(const RelationIterator &rhs) const
Definition: VtRelationList.hh:91
Relation_it::difference_type difference_type
typedef Relation_it::size_type size_type;
Definition: VtRelationList.hh:81
self & operator--()
Definition: VtRelationList.C:170
RelationIterator()
Definition: VtRelationList.C:156
RelationIterator(const Relation_it &it)
Definition: VtRelationList.hh:84
Relation_it::reference reference
Definition: VtRelationList.hh:79
Relation * operator->() const
Definition: VtRelationList.C:185
Relation_it::iterator_category iterator_category
Definition: VtRelationList.hh:75
int operator!=(const RelationIterator &rhs) const
Definition: VtRelationList.hh:94
Relation_it::value_type value_type
Definition: VtRelationList.hh:77
Relation_it::pointer pointer
Definition: VtRelationList.hh:78
Relation_it iter
Definition: VtRelationList.hh:70
Definition: VtRelationList.hh:227
virtual void clear()
clear all relations
Definition: VtRelationList.C:57
reverse_iterator rbegin()
Definition: VtRelationList.hh:262
ConstRelationIterator const_iterator
Definition: VtRelationList.hh:230
virtual ~RelationList()
Definition: VtRelationList.C:52
const_reverse_iterator rbegin() const
Definition: VtRelationList.hh:266
const RelationList & operator=(const RelationList &rhs)
Definition: VtRelationList.C:121
const_iterator begin() const
Definition: VtRelationList.hh:258
const_iterator end() const
Definition: VtRelationList.hh:260
iterator end()
Definition: VtRelationList.hh:256
unsigned int size() const
return no of relations
Definition: VtRelationList.hh:248
void unbook(Relation *const rel)
get rid of relation pointer
Definition: VtRelationList.hh:277
Relation_v rellist
Definition: VtRelationList.hh:288
RelationList()
Definition: VtRelationList.C:50
virtual void remove(Relation *const rel)
remove a relation
Definition: VtRelationList.C:88
reverse_iterator rend()
Definition: VtRelationList.hh:264
void print(std::ostream &os) const
Definition: VtRelationList.C:131
const_reverse_iterator rend() const
Definition: VtRelationList.hh:268
bool operator==(const RelationList &rhs) const
Definition: VtRelationList.hh:283
void push__back(Relation *rel)
add a relation
Definition: VtRelationList.hh:244
Relation *const operator[](unsigned int i) const
direct access
Definition: VtRelationList.C:141
Relation * back() const
return last relation
Definition: VtRelationList.hh:246
iterator begin()
Definition: VtRelationList.hh:254
RelationIterator iterator
Definition: VtRelationList.hh:229
ReverseRelationIterator reverse_iterator
Definition: VtRelationList.hh:231
virtual const iterator erase(const iterator &pos)
Erase an element.
Definition: VtRelationList.C:105
ConstReverseRelationIterator const_reverse_iterator
Definition: VtRelationList.hh:232
Definition: VtRelation.hh:51
Definition: VtRelationList.hh:148
Relation_rit::pointer pointer
Definition: VtRelationList.hh:159
int operator==(const ReverseRelationIterator &rhs) const
Definition: VtRelationList.hh:171
self & operator++()
Definition: VtRelationList.C:238
ReverseRelationIterator(const Relation_rit &it)
Definition: VtRelationList.hh:164
Relation * operator->() const
Definition: VtRelationList.C:261
int operator!=(const ReverseRelationIterator &rhs) const
Definition: VtRelationList.hh:174
Relation_rit::difference_type difference_type
Definition: VtRelationList.hh:161
Relation & operator*() const
Definition: VtRelationList.C:254
ReverseRelationIterator()
Definition: VtRelationList.C:232
Relation_rit::iterator_category iterator_category
Definition: VtRelationList.hh:156
Relation_rit::reference reference
Definition: VtRelationList.hh:160
self & operator--()
Definition: VtRelationList.C:246
Relation_rit iter
Definition: VtRelationList.hh:151
Relation_rit::value_type value_type
Definition: VtRelationList.hh:158
Definition: VtDistance.hh:30
bool createRelation(Track &t, Vertex &v)
Definition: VtRelationList.C:39
ReverseRelationIterator reverse_iterator
Definition: VtRelationList.hh:55
std::list< Relation * >::reverse_iterator Relation_rit
Definition: VtRelationList.hh:61
std::list< Relation * >::const_iterator Relation_cit
Definition: VtRelationList.hh:60
std::list< Relation * >::iterator Relation_it
Definition: VtRelationList.hh:59
ConstRelationIterator const_iterator
Definition: VtRelationList.hh:54
std::list< Relation * > Relation_v
Definition: VtRelationList.hh:58
RelationIterator iterator
Definition: VtRelationList.hh:53
std::ostream & operator<<(std::ostream &os, const VtIni &t)
Definition: VtIni.hh:83
std::list< Relation * >::const_reverse_iterator Relation_rcit
Definition: VtRelationList.hh:62
ConstReverseRelationIterator const_reverse_iterator
Definition: VtRelationList.hh:56
EdbSegP * s
Definition: tlg2pattern.C:32