dchain::PartialCandidateItr< CandidateClass > Class Template Reference

#include <PartialCandidateItr.h>

List of all members.

Public Types

typedef LabeledCandidate<
CandidateClass > 
value_type
typedef dchain::candidateitr::difference_type difference_type
typedef dchain::candidateitr::size_type size_type
typedef value_typereference
typedef value_typepointer
typedef std::bidirectional_iterator_tag iterator_category

Public Member Functions

 PartialCandidateItr ()
 PartialCandidateItr (const PartialCandidateItr< CandidateClass > &aOtherItr)
virtual ~PartialCandidateItr ()
const PartialCandidateItr<
CandidateClass > & 
operator= (const PartialCandidateItr< CandidateClass > &aOtherItr)
PartialCandidateItr< CandidateClass > & operator++ ()
PartialCandidateItr< CandidateClass > operator++ (int)
PartialCandidateItr< CandidateClass > & operator-- ()
PartialCandidateItr< CandidateClass > operator-- (int)
const LabeledCandidate< CandidateClass > & operator * () const
bool operator== (const PartialCandidateItr< CandidateClass > &aOtherItr) const
bool operator!= (const PartialCandidateItr< CandidateClass > &aOtherItr) const

Protected Member Functions

 PartialCandidateItr (const IndexedLabeledCandidates< CandidateClass > *aList, const size_type aIndex, const conjugation::Label aLabel)
IndexedLabeledCandidates<
CandidateClass > * 
indexedCandidates () const
size_type index () const
conjugation::Label label () const

Private Attributes

IndexedLabeledCandidates<
CandidateClass > * 
m_indexedCandidates
size_type m_index
conjugation::Label m_label

Friends

class LabeledCandidateList< CandidateClass >


Detailed Description

template<class CandidateClass>
class dchain::PartialCandidateItr< CandidateClass >

Definition at line 47 of file PartialCandidateItr.h.


Member Typedef Documentation

template<class CandidateClass>
typedef dchain::candidateitr::difference_type dchain::PartialCandidateItr< CandidateClass >::difference_type

Definition at line 56 of file PartialCandidateItr.h.

template<class CandidateClass>
typedef std::bidirectional_iterator_tag dchain::PartialCandidateItr< CandidateClass >::iterator_category

Definition at line 61 of file PartialCandidateItr.h.

template<class CandidateClass>
typedef value_type* dchain::PartialCandidateItr< CandidateClass >::pointer

Definition at line 59 of file PartialCandidateItr.h.

template<class CandidateClass>
typedef value_type& dchain::PartialCandidateItr< CandidateClass >::reference

Definition at line 58 of file PartialCandidateItr.h.

template<class CandidateClass>
typedef dchain::candidateitr::size_type dchain::PartialCandidateItr< CandidateClass >::size_type

Definition at line 57 of file PartialCandidateItr.h.

template<class CandidateClass>
typedef LabeledCandidate<CandidateClass> dchain::PartialCandidateItr< CandidateClass >::value_type

Definition at line 55 of file PartialCandidateItr.h.


Constructor & Destructor Documentation

template<class CandidateClass>
dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr (  )  [inline]

Definition at line 150 of file PartialCandidateItr.h.

00151 {
00152 }

template<class CandidateClass>
dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr ( const PartialCandidateItr< CandidateClass > &  aOtherItr  )  [inline]

Definition at line 156 of file PartialCandidateItr.h.

00156                                                                                                                    :
00157    m_indexedCandidates( aOtherItr.indexedCandidates() ) ,
00158    m_index( aOtherItr.index() ) ,
00159    m_label( aOtherItr.label() )
00160 {
00161 }

template<class CandidateClass>
virtual dchain::PartialCandidateItr< CandidateClass >::~PartialCandidateItr (  )  [inline, virtual]

Definition at line 67 of file PartialCandidateItr.h.

00067 {}

template<class CandidateClass>
dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr ( const IndexedLabeledCandidates< CandidateClass > *  aList,
const size_type  aIndex,
const conjugation::Label  aLabel 
) [inline, protected]

Definition at line 165 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index, dchain::PartialCandidateItr< CandidateClass >::m_label, and dchain::PartialCandidateItr< CandidateClass >::operator++().

00167                                       :
00168    // cast away const as const_iterator can be assocciated with a non-const list,
00169    //   but only const lists use this constructor
00170    m_indexedCandidates( (IndexedLabeledCandidates< CandidateClass >*)aList ) ,
00171    m_index( aIndex ) ,
00172    m_label( aLabel )
00173 {
00174    // move to first entry with correct label
00175    if ( ( m_index < size_type( (*m_indexedCandidates).size() ) ) &&
00176          ( (*m_indexedCandidates).labeledCandidateClass( m_index ) != m_label )
00177       ) {
00178       operator++() ;
00179    }
00180 }


Member Function Documentation

template<class CandidateClass>
PartialCandidateItr< CandidateClass >::size_type dchain::PartialCandidateItr< CandidateClass >::index (  )  const [inline, protected]

Definition at line 132 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index.

Referenced by dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator=(), and dchain::PartialCandidateItr< CandidateClass >::operator==().

00133 {
00134    return ( m_index ) ;
00135 }

template<class CandidateClass>
IndexedLabeledCandidates< CandidateClass > * dchain::PartialCandidateItr< CandidateClass >::indexedCandidates (  )  const [inline, protected]

Definition at line 124 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_indexedCandidates.

Referenced by dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator=(), and dchain::PartialCandidateItr< CandidateClass >::operator==().

00125 {
00126    return ( m_indexedCandidates ) ;
00127 }

template<class CandidateClass>
conjugation::Label dchain::PartialCandidateItr< CandidateClass >::label (  )  const [inline, protected]

Definition at line 139 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_label.

Referenced by dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator=(), and dchain::PartialCandidateItr< CandidateClass >::operator==().

00140 {
00141    return ( m_label ) ;
00142 }

template<class CandidateClass>
const LabeledCandidate< CandidateClass > & dchain::PartialCandidateItr< CandidateClass >::operator * (  )  const [inline]

Reimplemented in dchain::PartialItr< T >.

Definition at line 293 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index.

00294 {
00295    return ( (*m_indexedCandidates).labeledCandidateClass( m_index ) ) ;
00296 }

template<class CandidateClass>
bool dchain::PartialCandidateItr< CandidateClass >::operator!= ( const PartialCandidateItr< CandidateClass > &  aOtherItr  )  const [inline]

Definition at line 311 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::index(), dchain::PartialCandidateItr< CandidateClass >::indexedCandidates(), dchain::PartialCandidateItr< CandidateClass >::label(), dchain::PartialCandidateItr< CandidateClass >::m_index, dchain::PartialCandidateItr< CandidateClass >::m_indexedCandidates, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00312 {
00313    // There needs to be a final test on the label as itrs with two different labels
00314    //   have the same values for the past-the-end value
00315    return ( ( m_index != aOtherItr.index() ) ||
00316          ( m_indexedCandidates != aOtherItr.indexedCandidates() ) ||
00317          ( m_label != aOtherItr.label() ) ) ;
00318 }

template<class CandidateClass>
PartialCandidateItr< CandidateClass > dchain::PartialCandidateItr< CandidateClass >::operator++ ( int   )  [inline]

Reimplemented in dchain::PartialItr< T >.

Definition at line 223 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00224 {
00225    PartialCandidateItr< CandidateClass > tmp( *this ) ;
00226    ++m_index ;
00227    // This while loop find next match to label.
00228    // The order is done for efficiency reasons.  It is more likely a label
00229    //   will match than the end of the list has been reached.  However this
00230    //   will can cause an access to an uninitiallized location, but the
00231    //   loop will still terminate correctly.
00232    while (
00233          ( (*m_indexedCandidates).labeledCandidateClass( m_index ) != m_label ) &&
00234          ( m_index < size_type( (*m_indexedCandidates).size() ) ) ) {
00235       ++m_index ;
00236    }
00237    return ( tmp ) ;
00238 }

template<class CandidateClass>
PartialCandidateItr< CandidateClass > & dchain::PartialCandidateItr< CandidateClass >::operator++ (  )  [inline]

Reimplemented in dchain::PartialItr< T >.

Definition at line 202 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index, and dchain::PartialCandidateItr< CandidateClass >::m_label.

Referenced by dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr().

00203 {
00204    ++m_index ;
00205    // This while loop find next match to label.
00206    // The order is done for efficiency reasons.  It is more likely a label
00207    //   will match than the end of the list has been reached.  However this
00208    //   will can cause an access to an uninitiallized location, but the
00209    //   loop will still terminate correctly.
00210    // update: the efficiency doesn't matter but reading invalid memory
00211    //   makes our automated memory checkers have fits
00212    while (
00213          ( m_index < size_type( (*m_indexedCandidates).size() ) &&
00214            ( (*m_indexedCandidates).labeledCandidateClass( m_index ) != m_label )
00215          ) ) {
00216       ++m_index ;
00217    }
00218    return ( *this ) ;
00219 }

template<class CandidateClass>
PartialCandidateItr< CandidateClass > dchain::PartialCandidateItr< CandidateClass >::operator-- ( int   )  [inline]

Reimplemented in dchain::PartialItr< T >.

Definition at line 265 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00266 {
00267    PartialCandidateItr< CandidateClass > tmp( *this ) ;
00268    // As the index is 'unsigned' it should not go below zero.  This behavior is completely
00269    //   consistent with the STL reverse_iterator adaptor. (See pp254 of Musser & Saini)
00270    //
00271    if ( 0 != m_index ) {
00272       --m_index ;
00273    }
00274    // This while loop find next match to label.
00275    // The order is done for efficiency reasons.  It is more likely a label
00276    //   will match than the end of the list has been reached.  However this
00277    //   will can cause an access to an uninitiallized location, but the
00278    //   loop will still terminate correctly.
00279    while (
00280          ( (*m_indexedCandidates).labeledCandidateClass( m_index ) != m_label ) &&
00281          ( m_index != 0 ) ) {
00282       --m_index ;
00283    }
00284    return ( tmp ) ;
00285 }

template<class CandidateClass>
PartialCandidateItr< CandidateClass > & dchain::PartialCandidateItr< CandidateClass >::operator-- (  )  [inline]

Reimplemented in dchain::PartialItr< T >.

Definition at line 242 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::m_index, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00243 {
00244    // As the index is 'unsigned' it should not go below zero.  This behavior is completely
00245    //   consistent with the STL reverse_iterator adaptor. (See pp254 of Musser & Saini)
00246    //
00247    if ( 0 != m_index ) {
00248       --m_index ;
00249    }
00250    // This while loop find next match to label.
00251    // The order is done for efficiency reasons.  It is more likely a label
00252    //   will match than the end of the list has been reached.  However this
00253    //   will can cause an access to an uninitiallized location, but the
00254    //   loop will still terminate correctly.
00255    while (
00256          ( (*m_indexedCandidates).labeledCandidateClass( m_index ) != m_label ) &&
00257          ( m_index != 0 ) ) {
00258       --m_index ;
00259    }
00260    return ( *this ) ;
00261 }

template<class CandidateClass>
const PartialCandidateItr< CandidateClass > & dchain::PartialCandidateItr< CandidateClass >::operator= ( const PartialCandidateItr< CandidateClass > &  aOtherItr  )  [inline]

Definition at line 188 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::index(), dchain::PartialCandidateItr< CandidateClass >::indexedCandidates(), dchain::PartialCandidateItr< CandidateClass >::label(), dchain::PartialCandidateItr< CandidateClass >::m_index, dchain::PartialCandidateItr< CandidateClass >::m_indexedCandidates, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00189 {
00190    m_indexedCandidates = aOtherItr.indexedCandidates() ;
00191    m_index = aOtherItr.index() ;
00192    m_label = aOtherItr.label() ;
00193    return ( *this ) ;
00194 }

template<class CandidateClass>
bool dchain::PartialCandidateItr< CandidateClass >::operator== ( const PartialCandidateItr< CandidateClass > &  aOtherItr  )  const [inline]

Definition at line 300 of file PartialCandidateItr.h.

References dchain::PartialCandidateItr< CandidateClass >::index(), dchain::PartialCandidateItr< CandidateClass >::indexedCandidates(), dchain::PartialCandidateItr< CandidateClass >::label(), dchain::PartialCandidateItr< CandidateClass >::m_index, dchain::PartialCandidateItr< CandidateClass >::m_indexedCandidates, and dchain::PartialCandidateItr< CandidateClass >::m_label.

00301 {
00302    // There needs to be a final test on the label as itrs with two different labels
00303    //   have the same values for the past-the-end value
00304    return ( ( m_index == aOtherItr.index() ) &&
00305          ( m_indexedCandidates == aOtherItr.indexedCandidates() ) &&
00306          ( m_label == aOtherItr.label() ) ) ;
00307 }


Friends And Related Function Documentation

template<class CandidateClass>
friend class LabeledCandidateList< CandidateClass > [friend]

Definition at line 50 of file PartialCandidateItr.h.


Member Data Documentation

template<class CandidateClass>
size_type dchain::PartialCandidateItr< CandidateClass >::m_index [private]

Definition at line 107 of file PartialCandidateItr.h.

Referenced by dchain::PartialCandidateItr< CandidateClass >::index(), dchain::PartialCandidateItr< CandidateClass >::operator *(), dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator++(), dchain::PartialCandidateItr< CandidateClass >::operator--(), dchain::PartialCandidateItr< CandidateClass >::operator=(), dchain::PartialCandidateItr< CandidateClass >::operator==(), and dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr().

template<class CandidateClass>
IndexedLabeledCandidates< CandidateClass >* dchain::PartialCandidateItr< CandidateClass >::m_indexedCandidates [private]

Definition at line 106 of file PartialCandidateItr.h.

Referenced by dchain::PartialCandidateItr< CandidateClass >::indexedCandidates(), dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator=(), and dchain::PartialCandidateItr< CandidateClass >::operator==().

template<class CandidateClass>
conjugation::Label dchain::PartialCandidateItr< CandidateClass >::m_label [private]

Definition at line 108 of file PartialCandidateItr.h.

Referenced by dchain::PartialCandidateItr< CandidateClass >::label(), dchain::PartialCandidateItr< CandidateClass >::operator!=(), dchain::PartialCandidateItr< CandidateClass >::operator++(), dchain::PartialCandidateItr< CandidateClass >::operator--(), dchain::PartialCandidateItr< CandidateClass >::operator=(), dchain::PartialCandidateItr< CandidateClass >::operator==(), and dchain::PartialCandidateItr< CandidateClass >::PartialCandidateItr().


Generated on Tue Nov 29 23:36:26 2016 for BOSS_7.0.2 by  doxygen 1.4.7