Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 28, 2009, 5:50:31 PM (15 years ago)
Author:
landauf
Message:

added callback functionality to WeakPtr

Location:
code/branches/core5/src/libraries/core
Files:
2 edited

Legend:

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

    r5823 r5824  
    6666        // reset all weak pointers pointing to this object
    6767        for (std::set<WeakPtr<OrxonoxClass>*>::iterator it = this->weakPointers_.begin(); it != this->weakPointers_.end(); )
    68             (*(it++))->reset();
     68            (*(it++))->objectDeleted();
    6969    }
    7070
  • code/branches/core5/src/libraries/core/WeakPtr.h

    r5823 r5824  
    3636#include <cassert>
    3737#include "OrxonoxClass.h"
     38#include "Functor.h"
    3839
    3940namespace orxonox
     
    4243    class WeakPtr
    4344    {
     45        friend class OrxonoxClass;
     46       
    4447        public:
    45             inline WeakPtr() : pointer_(0), base_(0)
    46             {
    47             }
    48 
    49             inline WeakPtr(int) : pointer_(0), base_(0)
    50             {
    51             }
    52 
    53             inline WeakPtr(T* pointer) : pointer_(pointer), base_(pointer)
     48            inline WeakPtr() : pointer_(0), base_(0), callback_(0)
     49            {
     50            }
     51
     52            inline WeakPtr(int) : pointer_(0), base_(0), callback_(0)
     53            {
     54            }
     55
     56            inline WeakPtr(T* pointer) : pointer_(pointer), base_(pointer), callback_(0)
    5457            {
    5558                if (this->base_)
     
    5760            }
    5861
    59             inline WeakPtr(const WeakPtr& other) : pointer_(other.pointer_), base_(other.base_)
     62            inline WeakPtr(const WeakPtr& other) : pointer_(other.pointer_), base_(other.base_), callback_(0)
    6063            {
    6164                if (this->base_)
     
    6467
    6568            template <class O>
    66             inline WeakPtr(const WeakPtr<O>& other) : pointer_(other.get()), base_(other.base_)
     69            inline WeakPtr(const WeakPtr<O>& other) : pointer_(other.get()), base_(other.base_), callback_(0)
    6770            {
    6871                if (this->base_)
     
    7477                if (this->base_)
    7578                    this->base_->unregisterWeakPtr(this);
     79                if (this->callback_)
     80                    delete this->callback_;
     81                   
    7682            }
    7783           
     
    151157                WeakPtr().swap(*this);
    152158            }
     159           
     160            inline void addCallback(Functor* callback)
     161            {
     162                this->callback_ = callback;
     163            }
     164           
     165            inline Functor* getFunctor() const
     166            {
     167                return this->callback_;
     168            }
    153169
    154170        private:
     171            inline void objectDeleted()
     172            {
     173                this->reset();
     174                if (this->callback_)
     175                    (*this->callback_)();
     176            }
     177       
    155178            T* pointer_;
    156179            OrxonoxClass* base_;
     180            Functor* callback_;
    157181    };
    158182
Note: See TracChangeset for help on using the changeset viewer.