PtrList: Added const_iterator

This commit is contained in:
Henry Weller 2015-09-16 21:25:09 +01:00
parent bb0898d2e0
commit 15c7b16c20
2 changed files with 339 additions and 4 deletions

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -32,6 +32,7 @@ Description
pointer.
SourceFiles
PtrListI.H
PtrList.C
PtrListIO.C
@ -80,6 +81,34 @@ inline label operator-
const typename PtrList<T>::iterator&
);
template<class T>
inline typename PtrList<T>::const_iterator operator+
(
const typename PtrList<T>::const_iterator&,
label
);
template<class T>
inline typename PtrList<T>::const_iterator operator+
(
label,
const typename PtrList<T>::const_iterator&
);
template<class T>
inline typename PtrList<T>::const_iterator operator-
(
const typename PtrList<T>::const_iterator&,
label
);
template<class T>
inline label operator-
(
const typename PtrList<T>::const_iterator&,
const typename PtrList<T>::const_iterator&
);
template<class T>
Istream& operator>>(Istream&, PtrList<T>&);
@ -245,7 +274,9 @@ public:
// Random access iterator for traversing PtrList.
class iterator;
class const_iterator;
friend class iterator;
friend class const_iterator;
//- An STL-conforming iterator
class iterator
@ -254,6 +285,8 @@ public:
public:
friend class const_iterator;
//- Construct for a given PtrList entry
inline iterator(T**);
@ -303,6 +336,87 @@ public:
inline iterator end();
// STL const_iterator
// Random access iterator for traversing PtrList.
//- An STL-conforming const_iterator
class const_iterator
{
const T* const* ptr_;
public:
//- Construct for a given PtrList entry
inline const_iterator(const T* const*);
//- Construct from an iterator
inline const_iterator(const iterator&);
// Member operators
inline bool operator==(const const_iterator&) const;
inline bool operator!=(const const_iterator&) const;
typedef const T& Tref;
inline Tref operator*();
inline Tref operator()();
inline const_iterator operator++();
inline const_iterator operator++(int);
inline const_iterator operator--();
inline const_iterator operator--(int);
inline const_iterator operator+=(label);
friend const_iterator operator+ <T>
(
const const_iterator&,
label
);
friend const_iterator operator+ <T>
(
label,
const const_iterator&
);
inline const_iterator operator-=(label);
friend const_iterator operator- <T>
(
const const_iterator&,
label
);
friend label operator- <T>
(
const const_iterator&,
const const_iterator&
);
inline const T& operator[](label);
inline bool operator<(const const_iterator&) const;
inline bool operator>(const const_iterator&) const;
inline bool operator<=(const const_iterator&) const;
inline bool operator>=(const const_iterator&) const;
};
//- Return an const_iterator to begin traversing the PtrList.
inline const_iterator cbegin() const;
//- Return an const_iterator to end traversing the PtrList.
inline const_iterator cend() const;
//- Return an const_iterator to begin traversing the PtrList.
inline const_iterator begin() const;
//- Return an const_iterator to end traversing the PtrList.
inline const_iterator end() const;
// IOstream operator
//- Read List from Istream, discarding contents of existing List.

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -23,8 +23,6 @@ License
\*---------------------------------------------------------------------------*/
#include "error.H"
#include "autoPtr.H"
#include "tmp.H"
@ -373,4 +371,227 @@ inline typename Foam::PtrList<T>::iterator Foam::PtrList<T>::end()
}
// * * * * * * * * * * * * * * * STL const_iterator * * * * * * * * * * * * //
template<class T>
inline Foam::PtrList<T>::const_iterator::const_iterator(const T* const* ptr)
:
ptr_(ptr)
{}
template<class T>
inline Foam::PtrList<T>::const_iterator::const_iterator(const iterator& iter)
:
ptr_(iter.ptr_)
{}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator==
(
const const_iterator& iter
) const
{
return ptr_ == iter.ptr_;
}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator!=
(
const const_iterator& iter
) const
{
return ptr_ != iter.ptr_;
}
template<class T>
inline const T& Foam::PtrList<T>::const_iterator::operator*()
{
return **ptr_;
}
template<class T>
inline const T& Foam::PtrList<T>::const_iterator::operator()()
{
return operator*();
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator++()
{
++ptr_;
return *this;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator++(int)
{
const_iterator tmp = *this;
++ptr_;
return tmp;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator--()
{
--ptr_;
return *this;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator--(int)
{
const_iterator tmp = *this;
--ptr_;
return tmp;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator+=(label n)
{
ptr_ += n;
return *this;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::operator+(const typename PtrList<T>::const_iterator& iter, label n)
{
typename PtrList<T>::const_iterator tmp = iter;
return tmp += n;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::operator+(label n, const typename PtrList<T>::const_iterator& iter)
{
typename PtrList<T>::const_iterator tmp = iter;
return tmp += n;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::const_iterator::operator-=(label n)
{
ptr_ -= n;
return *this;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::operator-(const typename PtrList<T>::const_iterator& iter, label n)
{
typename PtrList<T>::const_iterator tmp = iter;
return tmp -= n;
}
template<class T>
inline Foam::label Foam::operator-
(
const typename PtrList<T>::const_iterator& iter1,
const typename PtrList<T>::const_iterator& iter2
)
{
return (iter1.ptr_ - iter2.ptr_)/sizeof(T*);
}
template<class T>
inline const T& Foam::PtrList<T>::const_iterator::operator[](label n)
{
return *(*this + n);
}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator<
(
const const_iterator& iter
) const
{
return ptr_ < iter.ptr_;
}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator>
(
const const_iterator& iter
) const
{
return ptr_ > iter.ptr_;
}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator<=
(
const const_iterator& iter
) const
{
return ptr_ <= iter.ptr_;
}
template<class T>
inline bool Foam::PtrList<T>::const_iterator::operator>=
(
const const_iterator& iter
) const
{
return ptr_ >= iter.ptr_;
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::begin() const
{
return ptrs_.begin();
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::end() const
{
return ptrs_.end();
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::cbegin() const
{
return ptrs_.begin();
}
template<class T>
inline typename Foam::PtrList<T>::const_iterator
Foam::PtrList<T>::cend() const
{
return ptrs_.end();
}
// ************************************************************************* //