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
42namespace 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:
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
85
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:
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
219#endif
220 }; // class ConstReverseRelationIterator
221
222
224 //============================================================================
225 // Class RelationList - class for Vertex-Track-Kalman relation container
226 //============================================================================
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()); }
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
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 self
Definition: VtRelationList.hh:113
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
ConstReverseRelationIterator self
Definition: VtRelationList.hh:192
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 self
Definition: VtRelationList.hh:73
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
Relation * back() const
return last relation
Definition: VtRelationList.hh:246
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
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
ReverseRelationIterator self
Definition: VtRelationList.hh:154
Relation_rit iter
Definition: VtRelationList.hh:151
Relation_rit::value_type value_type
Definition: VtRelationList.hh:158
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
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::ostream & operator<<(std::ostream &os, const VtIni &t)
Definition: VtIni.hh:83
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::list< Relation * >::const_reverse_iterator Relation_rcit
Definition: VtRelationList.hh:62
ConstReverseRelationIterator const_reverse_iterator
Definition: VtRelationList.hh:56