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 171 of file DVLIterator.h.

Member Typedef Documentation

◆ BaseContainer

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

Definition at line 202 of file DVLIterator.h.

◆ const_iterator

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

Definition at line 197 of file DVLIterator.h.

◆ Container

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

Definition at line 201 of file DVLIterator.h.

◆ ElementProxy

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

Definition at line 196 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 193 of file DVLIterator.h.

Constructor & Destructor Documentation

◆ iterator() [1/2]

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

Default constructor.

Definition at line 208 of file DVLIterator.h.

208 :
209 m_container(0)
210 {}
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 218 of file DVLIterator.h.

222 {}
(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 253 of file DVLIterator.h.

254 {
255 return m_container;
256 }

◆ 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 262 of file DVLIterator.h.

263 {
264 return m_container;
265 }

◆ 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 335 of file DVLIterator.h.

336 {
338 return ElementProxy (this->base(), container);
339 }
DVL::ElementProxy ElementProxy
std::string base
Definition hcg.cxx:81

◆ 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 244 of file DVLIterator.h.

245 {
246 return const_iterator (this->base());
247 }
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 299 of file DVLIterator.h.

300 { 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 290 of file DVLIterator.h.

290{ 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 320 of file DVLIterator.h.

321 { 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 312 of file DVLIterator.h.

313 { 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 314 of file DVLIterator.h.

315 {
317 return iterator (this->base() - i, container);
318 }
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 301 of file DVLIterator.h.

302 { 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 291 of file DVLIterator.h.

291{ 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 305 of file DVLIterator.h.

306 { 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 293 of file DVLIterator.h.

293{ 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 297 of file DVLIterator.h.

298 { 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 289 of file DVLIterator.h.

289{ 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 303 of file DVLIterator.h.

304 { 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 292 of file DVLIterator.h.

292{ 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 307 of file DVLIterator.h.

308 { 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 294 of file DVLIterator.h.

294{ 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 232 of file DVLIterator.h.

233 {
235 return ElementProxy (this->base()+n, container);
236 }

◆ 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 272 of file DVLIterator.h.

273 {
274 return m_container->ownPolicy();
275 }

◆ 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 282 of file DVLIterator.h.

283 {
284 m_container->testInsert (op);
285 }

◆ boost::iterator_core_access

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

Definition at line 328 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 343 of file DVLIterator.h.


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