ATLAS Offline Software
Loading...
Searching...
No Matches
DataModel_detail::iterator< DVL > Class Template Reference

(Non-const) Iterator class for DataVector/DataList. More...

#include <DVLIterator.h>

Inheritance diagram for DataModel_detail::iterator< DVL >:
Collaboration diagram for DataModel_detail::iterator< DVL >:

Public Types

typedef DVL Container
typedef DVL::BaseContainer BaseContainer

Public Member Functions

 iterator ()
 Default constructor.
 iterator (typename BaseContainer::iterator it, DVL *container)
 Constructor.
ElementProxy operator[] (int n) const
 Element access.
 operator const_iterator () const
 Convert to a const_iterator.
DVL * container ()
 Return the container holding the referenced element.
const DVL * container () const
 Return the container holding the referenced element.
SG::OwnershipPolicy ownPolicy () const
 Return the ownership policy of the container from which this iterator was created.
void testInsert (const char *op)
 Test if we can insert; raise an exception if not.
bool operator== (const iterator &i) const
bool operator!= (const iterator &i) const
bool operator< (const iterator &i) const
bool operator> (const iterator &i) const
bool operator<= (const iterator &i) const
bool operator>= (const iterator &i) const
bool operator== (const const_iterator &i) const
bool operator!= (const const_iterator &i) const
bool operator< (const const_iterator &i) const
bool operator> (const const_iterator &i) const
bool operator<= (const const_iterator &i) const
bool operator>= (const const_iterator &i) const
iterator_adaptor_::difference_type operator- (const iterator &i) const
iterator operator- (typename iterator_adaptor_::difference_type i) const
iterator_adaptor_::difference_type operator- (const const_iterator &i) const

Private Types

typedef boost::iterator_adaptor< iterator, typename DVL::BaseContainer::iterator, typename DVL::value_type, typename DVL::BaseContainer::const_iterator::iterator_category, typename DVL::ElementProxy > iterator_adaptor_
typedef DVL::ElementProxy ElementProxy
typedef DVL::const_iterator const_iterator

Private Member Functions

DVL::pointer operator-> ()
ElementProxy dereference () const
 Dereference the iterator.

Private Attributes

DVL * m_container
 The referenced container.

Friends

class boost::iterator_core_access

Detailed Description

template<class DVL>
class DataModel_detail::iterator< DVL >

(Non-const) Iterator class for DataVector/DataList.

Except for dereferencing, we want this to be the same as the iterator of the underlying container type. So, we use boost::iterator_adaptor and override dereference.

This should nearly meets underlying container's iterator requirements, except that the dereferencing operations return an ElementProxy instead of a reference.

This is templated on the specific DataVector/List class.

Definition at line 136 of file DVLIterator.h.

Member Typedef Documentation

◆ BaseContainer

template<class DVL>
typedef DVL::BaseContainer DataModel_detail::iterator< DVL >::BaseContainer

Definition at line 167 of file DVLIterator.h.

◆ const_iterator

template<class DVL>
typedef DVL::const_iterator DataModel_detail::iterator< DVL >::const_iterator
private

Definition at line 162 of file DVLIterator.h.

◆ Container

template<class DVL>
typedef DVL DataModel_detail::iterator< DVL >::Container

Definition at line 166 of file DVLIterator.h.

◆ ElementProxy

template<class DVL>
typedef DVL::ElementProxy DataModel_detail::iterator< DVL >::ElementProxy
private

Definition at line 161 of file DVLIterator.h.

◆ iterator_adaptor_

template<class DVL>
typedef boost::iterator_adaptor<iterator, typename DVL::BaseContainer::iterator, typename DVL::value_type, typename DVL::BaseContainer:: const_iterator::iterator_category, typename DVL::ElementProxy> DataModel_detail::iterator< DVL >::iterator_adaptor_
private

Definition at line 158 of file DVLIterator.h.

Constructor & Destructor Documentation

◆ iterator() [1/2]

template<class DVL>
DataModel_detail::iterator< DVL >::iterator ( )
inline

Default constructor.

Definition at line 173 of file DVLIterator.h.

173 :
174 m_container(0)
175 {}
DVL * m_container
The referenced container.

◆ iterator() [2/2]

template<class DVL>
DataModel_detail::iterator< DVL >::iterator ( typename BaseContainer::iterator< DVL > it,
DVL * container )
inline

Constructor.

Parameters
itThe underlying container iterator.
containerThe container over which we're iterating.

Definition at line 183 of file DVLIterator.h.

187 {}
(Non-const) Iterator class for DataVector/DataList.
boost::iterator_adaptor< iterator, typename DVL::BaseContainer::iterator, typename DVL::value_type, typename DVL::BaseContainer::const_iterator::iterator_category, typename DVL::ElementProxy > iterator_adaptor_
DVL * container()
Return the container holding the referenced element.

Member Function Documentation

◆ container() [1/2]

template<class DVL>
DVL * DataModel_detail::iterator< DVL >::container ( )
inline

Return the container holding the referenced element.

Definition at line 218 of file DVLIterator.h.

219 {
220 return m_container;
221 }

◆ container() [2/2]

template<class DVL>
const DVL * DataModel_detail::iterator< DVL >::container ( ) const
inline

Return the container holding the referenced element.

Definition at line 227 of file DVLIterator.h.

228 {
229 return m_container;
230 }

◆ dereference()

template<class DVL>
ElementProxy DataModel_detail::iterator< DVL >::dereference ( ) const
inlineprivate

Dereference the iterator.

Returns
A proxy to the pointed-to element.

Definition at line 300 of file DVLIterator.h.

301 {
303 return ElementProxy (this->base(), container);
304 }
DVL::ElementProxy ElementProxy
std::string base
Definition hcg.cxx:83

◆ operator const_iterator()

template<class DVL>
DataModel_detail::iterator< DVL >::operator const_iterator ( ) const
inline

Convert to a const_iterator.

This is needed to allow iterator to convert to const_iterator.

Definition at line 209 of file DVLIterator.h.

210 {
211 return const_iterator (this->base());
212 }
DVL::const_iterator const_iterator

◆ operator!=() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator!= ( const const_iterator< DVL > & i) const
inline

Definition at line 264 of file DVLIterator.h.

265 { return static_cast<const_iterator>(*this)!=i; }

◆ operator!=() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator!= ( const iterator< DVL > & i) const
inline

Definition at line 255 of file DVLIterator.h.

255{ return this->base() != i.base();}

◆ operator-() [1/3]

template<class DVL>
iterator_adaptor_::difference_type DataModel_detail::iterator< DVL >::operator- ( const const_iterator< DVL > & i) const
inline

Definition at line 285 of file DVLIterator.h.

286 { return static_cast<const_iterator>(*this) - i; }

◆ operator-() [2/3]

template<class DVL>
iterator_adaptor_::difference_type DataModel_detail::iterator< DVL >::operator- ( const iterator< DVL > & i) const
inline

Definition at line 277 of file DVLIterator.h.

278 { return this->base() - i.base(); }

◆ operator-() [3/3]

template<class DVL>
iterator DataModel_detail::iterator< DVL >::operator- ( typename iterator_adaptor_::difference_type i) const
inline

Definition at line 279 of file DVLIterator.h.

280 {
282 return iterator (this->base() - i, container);
283 }
iterator()
Default constructor.

◆ operator->()

template<class DVL>
DVL::pointer DataModel_detail::iterator< DVL >::operator-> ( )
private

◆ operator<() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator< ( const const_iterator< DVL > & i) const
inline

Definition at line 266 of file DVLIterator.h.

267 { return static_cast<const_iterator>(*this)<i; }

◆ operator<() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator< ( const iterator< DVL > & i) const
inline

Definition at line 256 of file DVLIterator.h.

256{ return this->base() < i.base();}

◆ operator<=() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator<= ( const const_iterator< DVL > & i) const
inline

Definition at line 270 of file DVLIterator.h.

271 { return static_cast<const_iterator>(*this)<=i; }

◆ operator<=() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator<= ( const iterator< DVL > & i) const
inline

Definition at line 258 of file DVLIterator.h.

258{ return this->base() <= i.base();}

◆ operator==() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator== ( const const_iterator< DVL > & i) const
inline

Definition at line 262 of file DVLIterator.h.

263 { return static_cast<const_iterator>(*this)==i; }

◆ operator==() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator== ( const iterator< DVL > & i) const
inline

Definition at line 254 of file DVLIterator.h.

254{ return this->base() == i.base();}

◆ operator>() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator> ( const const_iterator< DVL > & i) const
inline

Definition at line 268 of file DVLIterator.h.

269 { return static_cast<const_iterator>(*this)>i; }

◆ operator>() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator> ( const iterator< DVL > & i) const
inline

Definition at line 257 of file DVLIterator.h.

257{ return this->base() > i.base();}

◆ operator>=() [1/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator>= ( const const_iterator< DVL > & i) const
inline

Definition at line 272 of file DVLIterator.h.

273 { return static_cast<const_iterator>(*this)>=i; }

◆ operator>=() [2/2]

template<class DVL>
bool DataModel_detail::iterator< DVL >::operator>= ( const iterator< DVL > & i) const
inline

Definition at line 259 of file DVLIterator.h.

259{ return this->base() >= i.base();}

◆ operator[]()

template<class DVL>
ElementProxy DataModel_detail::iterator< DVL >::operator[] ( int n) const
inline

Element access.

Parameters
nIndex relative to the iterator of the element to access.
Returns
Proxy for the element.

We need to override this here in order to get the return type correct.

Definition at line 197 of file DVLIterator.h.

198 {
200 return ElementProxy (this->base()+n, container);
201 }

◆ ownPolicy()

template<class DVL>
SG::OwnershipPolicy DataModel_detail::iterator< DVL >::ownPolicy ( ) const
inline

Return the ownership policy of the container from which this iterator was created.

Definition at line 237 of file DVLIterator.h.

238 {
239 return m_container->ownPolicy();
240 }

◆ testInsert()

template<class DVL>
void DataModel_detail::iterator< DVL >::testInsert ( const char * op)
inline

Test if we can insert; raise an exception if not.

Parameters
opDescription of the attempted operation.

Definition at line 247 of file DVLIterator.h.

248 {
249 m_container->testInsert (op);
250 }

◆ boost::iterator_core_access

template<class DVL>
friend class boost::iterator_core_access
friend

Definition at line 293 of file DVLIterator.h.

Member Data Documentation

◆ m_container

template<class DVL>
DVL* DataModel_detail::iterator< DVL >::m_container
private

The referenced container.

Definition at line 308 of file DVLIterator.h.


The documentation for this class was generated from the following file: