Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 15, 2009, 1:26:23 AM (15 years ago)
Author:
rgrieder
Message:
  • Using std::vector instead of std::list in register/unregister Iterator/ObjectListIterator. That is approximately 6 times faster because the list has very few elements.
  • Inlined getIdentifier() for sure by exporting the heavy part to another function.
  • Also eliminated the need of isFirstCall() because the "static initialisation chaos" only applies to variables that cannot be evaluated at compile time.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/core/Iterator.h

    r2662 r2784  
    7575                this->element_ = exp.element_;
    7676                this->list_ = exp.list_;
    77                 this->iterator_ = this->list_->registerIterator(this);
     77                this->list_->registerIterator(this);
    7878            }
    7979
     
    8686                this->element_ = other.element_;
    8787                this->list_ = other.list_;
    88                 this->iterator_ = this->list_->registerIterator(this);
     88                this->list_->registerIterator(this);
    8989            }
    9090
     
    9898                this->element_ = (element) ? static_cast<ObjectListBaseElement*>(element) : 0;
    9999                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
    100                 this->iterator_ = this->list_->registerIterator(this);
     100                this->list_->registerIterator(this);
    101101            }
    102102
     
    110110                this->element_ = (other.element_) ? static_cast<ObjectListBaseElement*>(other.element_) : 0;
    111111                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
    112                 this->iterator_ = this->list_->registerIterator(this);
     112                this->list_->registerIterator(this);
    113113            }
    114114
     
    118118            inline ~Iterator()
    119119            {
    120                 this->list_->unregisterIterator(this->iterator_);
     120                this->list_->unregisterIterator(this);
    121121            }
    122122
     
    128128            {
    129129                if (this->list_)
    130                     this->list_->unregisterIterator(this->iterator_);
     130                    this->list_->unregisterIterator(this);
    131131
    132132                this->element_ = exp.element_;
    133133                this->list_ = exp.list_;
    134                 this->iterator_ = this->list_->registerIterator(this);
     134                this->list_->registerIterator(this);
    135135
    136136                return (*this);
     
    144144            {
    145145                if (this->list_)
    146                     this->list_->unregisterIterator(this->iterator_);
     146                    this->list_->unregisterIterator(this);
    147147
    148148                this->element_ = other.element_;
    149149                this->list_ = other.list_;
    150                 this->iterator_ = this->list_->registerIterator(this);
     150                this->list_->registerIterator(this);
    151151
    152152                return (*this);
     
    161161            {
    162162                if (this->list_)
    163                     this->list_->unregisterIterator(this->iterator_);
     163                    this->list_->unregisterIterator(this);
    164164
    165165                this->element_ = (element) ? static_cast<ObjectListBaseElement*>(element) : 0;
    166166                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
    167                 this->iterator_ = this->list_->registerIterator(this);
     167                this->list_->registerIterator(this);
    168168
    169169                return (*this);
     
    179179            {
    180180                if (this->list_)
    181                     this->list_->unregisterIterator(this->iterator_);
     181                    this->list_->unregisterIterator(this);
    182182
    183183                this->element_ = (other.element_) ? (ObjectListBaseElement*)other.element_ : 0;
    184184                this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects();
    185                 this->iterator_ = this->list_->registerIterator(this);
     185                this->list_->registerIterator(this);
    186186
    187187                return (*this);
     
    300300            ObjectListBaseElement* element_;       //!< The element the Iterator points at
    301301            ObjectListBase* list_;                 //!< The list wherein the element is
    302             std::list<void*>::iterator iterator_;  //!< The iterator in the notifying list of the ObjectList
    303302    };
    304303
Note: See TracChangeset for help on using the changeset viewer.