Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 26, 2007, 1:57:37 AM (16 years ago)
Author:
landauf
Message:

changed iterator: it now needs a list-element to start from (Iterator<classname> it = ObjectList<classname>::start() or end() for ++it or —it, respectively).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/objecthierarchie/src/Iterator.h

    r239 r248  
    1010            Iterator()
    1111            {
    12                 this->elementForwards_ = ClassIdentifier<T>::getIdentifier()->objects_->first_;
    13                 this->elementBackwards_ = ClassIdentifier<T>::getIdentifier()->objects_->last_;
    14                 this->iteratingForwards_ = true;
     12                this->element_ = 0;
    1513            }
    1614
    17             Iterator<T> operator++(int step)
     15            Iterator(ObjectListElement<T>* element)
    1816            {
    19                 Iterator<T> copy = *this;
    20 
    21                 if (step < 1)
    22                     step = 1;
    23 
    24                 for (int i = 0; i < step; i++)
    25                     this->elementForwards_ = this->elementForwards_->next_;
    26 
    27                 return copy;
     17                this->element_ = element;
    2818            }
    2919
    3020            Iterator<T> operator++()
    3121            {
    32                 this->elementForwards_ = this->elementForwards_->next_;
     22                this->element_ = this->element_->next_;
    3323                return *this;
    34             }
    35 
    36             Iterator<T> operator--(int step)
    37             {
    38                 Iterator<T> copy = *this;
    39 
    40                 if (this->iteratingForwards_)
    41                 {
    42                     this->iteratingForwards_ = false;
    43                 }
    44                 else
    45                 {
    46                     if (step < 1)
    47                         step = 1;
    48 
    49                     for (int i = 0; i < step; i++)
    50                         this->elementBackwards_ = this->elementBackwards_->prev_;
    51                 }
    5224            }
    5325
    5426            Iterator<T> operator--()
    5527            {
    56                 if (this->iteratingForwards_)
    57                     this->iteratingForwards_ = false;
    58                 else
    59                     this->elementBackwards_ = this->elementBackwards_->prev_;
    60 
     28                this->element_ = this->element_->prev_;
    6129                return *this;
    6230            }
     
    6432            T* operator*()
    6533            {
    66                 if (this->iteratingForwards_)
    67                     return this->elementForwards_->object_;
    68                 else
    69                     return this->elementBackwards_->object_;
     34                return this->element_->object_;
    7035            }
    7136
    7237            T* operator->() const
    7338            {
    74                 if (this->iteratingForwards_)
    75                     return this->elementForwards_->object_;
    76                 else
    77                     return this->elementBackwards_->object_;
     39                return this->element_->object_;
    7840
    7941            }
     
    8143            operator bool()
    8244            {
    83                 if (this->iteratingForwards_)
    84                     return (this->elementForwards_ != 0);
    85                 else
    86                     return (this->elementBackwards_->prev_ != 0);
     45                return (this->element_ != 0);
    8746            }
    8847
     
    9251                    std::cout << "Warning: Comparing the " << ClassIdentifier<T>::getIdentifier()->getName() << "-List-Iterator with " << compare << " has no effect. Only comparison with 0 works.\n";
    9352
    94                 if (this->iteratingForwards_)
    95                     return (this->elementForwards_ != 0);
    96                 else
    97                     return (this->elementBackwards_->prev_ != 0);
     53                return (this->element_ != 0);
    9854            }
    9955
    100 
    10156        private:
    102             ObjectListElement<T>* elementForwards_;
    103             ObjectListElement<T>* elementBackwards_;
    104             bool iteratingForwards_;
     57            ObjectListElement<T>* element_;
    10558    };
    10659}
Note: See TracChangeset for help on using the changeset viewer.