Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 26, 2009, 2:05:30 AM (15 years ago)
Author:
landauf
Message:

Added destroy() function to OrxonoxClass.
Removed destroy() functions from some subclasses.
Expanded Timer to accept Functors of other classes too.

Location:
code/branches/core5/src/libraries
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core5/src/libraries/core/OrxonoxClass.cc

    r5772 r5791  
    4545        this->parents_ = 0;
    4646        this->metaList_ = new MetaObjectList();
     47        this->referenceCount_ = 0;
     48        this->requestedDestruction_ = false;
    4749    }
    4850
     
    5557        if (this->parents_)
    5658            delete this->parents_;
     59    }
     60
     61    /** @brief Deletes the object if no smart pointers point to this object. Otherwise schedules the object to be deleted as soon as possible. */
     62    void OrxonoxClass::destroy()
     63    {
     64        if (this->referenceCount_ > 0)
     65            this->requestedDestruction_ = true;
     66        else
     67            delete this;
    5768    }
    5869
  • code/branches/core5/src/libraries/core/OrxonoxClass.h

    r5772 r5791  
    5959            virtual ~OrxonoxClass();
    6060
     61            void destroy();
     62
    6163            /** @brief Function to collect the SetConfigValue-macro calls. */
    6264            void setConfigValues() {};
     
    9294            bool isDirectParentOf(const OrxonoxClass* object);
    9395
     96            inline unsigned int getReferenceCount() const
     97                { return this->referenceCount_; }
     98
    9499            /**
    95100            @brief
     
    117122
    118123        private:
     124            /** @brief Increments the reference counter (for smart pointers). */
     125            inline void incrementReferenceCount()
     126                { ++this->referenceCount_; }
     127            /** @brief Decrements the reference counter (for smart pointers). */
     128            inline void decrementReferenceCount()
     129                { --this->referenceCount_; if (this->referenceCount_ == 0 && this->requestedDestruction_) { delete this; } }
     130
    119131            Identifier* identifier_;                   //!< The Identifier of the object
    120132            std::set<const Identifier*>* parents_;     //!< List of all parents of the object
    121133            MetaObjectList* metaList_;                 //!< MetaObjectList, containing all ObjectLists and ObjectListElements the object is registered in
     134            unsigned int referenceCount_;              //!< Counts the references from smart pointers to this object
     135            bool requestedDestruction_;                //!< Becomes true after someone called delete on this object
     136
    122137            //! 'Fast map' that holds this-pointers of all derived types
    123138            std::vector<std::pair<unsigned int, void*> > objectPointers_;
  • code/branches/core5/src/libraries/tools/Timer.h

    r5738 r5791  
    143143                @param exeuctor A executor of the function to call
    144144            */
    145             Timer(float interval, bool bLoop, T* object, ExecutorMember<T>* exeuctor, bool bKillAfterCall = false)
     145            template <class O>
     146            Timer(float interval, bool bLoop, T* object, ExecutorMember<O>* exeuctor, bool bKillAfterCall = false)
    146147            {
    147148                this->setTimer(interval, bLoop, object, exeuctor, bKillAfterCall);
     
    155156                @param exeuctor A executor of the function to call
    156157            */
    157             void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor, bool bKillAfterCall = false)
     158            template <class O>
     159            void setTimer(float interval, bool bLoop, T* object, ExecutorMember<O>* executor, bool bKillAfterCall = false)
    158160            {
    159161                this->deleteExecutor();
Note: See TracChangeset for help on using the changeset viewer.