Changeset 9570
- Timestamp:
- Mar 24, 2013, 8:51:37 PM (12 years ago)
- Location:
- code/branches/core6/src/libraries/core
- Files:
-
- 5 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core6/src/libraries/core/CorePrereqs.h
r9565 r9570 143 143 class Context; 144 144 class Core; 145 class Destroyable; 145 146 class DestructionListener; 146 147 class DynLib; -
code/branches/core6/src/libraries/core/class/Identifiable.h
r9565 r9570 57 57 virtual ~Identifiable(); 58 58 59 void destroy();60 59 void unregisterObject(); 61 60 -
code/branches/core6/src/libraries/core/class/OrxonoxClass.cc
r9565 r9570 35 35 36 36 #include <cassert> 37 #include "core/object/MetaObjectList.h"38 #include "core/object/Context.h"39 #include "Identifier.h"40 37 41 38 namespace orxonox … … 46 43 OrxonoxClass::OrxonoxClass() 47 44 { 48 this->referenceCount_ = 0;49 this->requestedDestruction_ = false;50 45 } 51 46 … … 55 50 OrxonoxClass::~OrxonoxClass() 56 51 { 57 assert(this->referenceCount_ <= 0);58 59 // notify all destruction listeners60 for (std::set<DestructionListener*>::iterator it = this->destructionListeners_.begin(); it != this->destructionListeners_.end(); )61 (*(it++))->objectDeleted();62 }63 64 /**65 @brief Deletes the object if no @ref orxonox::SmartPtr "smart pointers" point to this object. Otherwise schedules the object to be deleted as soon as possible.66 */67 void OrxonoxClass::destroy()68 {69 assert(this); // Just in case someone tries to delete a NULL pointer70 this->requestedDestruction_ = true;71 if (this->referenceCount_ == 0)72 {73 this->preDestroy();74 if (this->referenceCount_ == 0)75 delete this;76 }77 52 } 78 53 } -
code/branches/core6/src/libraries/core/class/OrxonoxClass.h
r9565 r9570 43 43 #include "core/CorePrereqs.h" 44 44 45 #include <set>46 //#include "Super.h"47 45 #include "Identifiable.h" 46 #include "core/object/Destroyable.h" 48 47 49 48 namespace orxonox … … 54 53 The BaseObject and Interfaces are derived with @c virtual @c public @c OrxonoxClass from OrxonoxClass. 55 54 */ 56 class _CoreExport OrxonoxClass : public Identifiable 55 class _CoreExport OrxonoxClass : public Identifiable, public Destroyable 57 56 { 58 template <class T>59 friend class SmartPtr;60 61 friend class DestructionListener;62 63 57 public: 64 58 OrxonoxClass(); 65 59 virtual ~OrxonoxClass(); 66 60 67 void destroy();68 69 61 /// Function to collect the SetConfigValue-macro calls. 70 62 void setConfigValues() {}; 71 72 /// Returns the number of @ref orxonox::SmartPtr "smart pointers" that point to this object.73 inline unsigned int getReferenceCount() const74 { return this->referenceCount_; }75 76 protected:77 /// This virtual function is called if destroy() is called and no SmartPtr points to this object. Used in some cases to create a new SmartPtr to prevent destruction.78 virtual void preDestroy() {}79 80 private:81 /// Increments the reference counter (for smart pointers).82 inline void incrementReferenceCount()83 { ++this->referenceCount_; }84 /// Decrements the reference counter (for smart pointers).85 inline void decrementReferenceCount()86 {87 --this->referenceCount_;88 if (this->referenceCount_ == 0 && this->requestedDestruction_)89 this->destroy();90 }91 92 /// Register a destruction listener (for example a weak pointer which points to this object).93 inline void registerDestructionListener(DestructionListener* pointer)94 { this->destructionListeners_.insert(pointer); }95 /// Unegister a destruction listener (for example a weak pointer which pointed to this object before).96 inline void unregisterDestructionListener(DestructionListener* pointer)97 { this->destructionListeners_.erase(pointer); }98 99 int referenceCount_; //!< Counts the references from smart pointers to this object100 bool requestedDestruction_; //!< Becomes true after someone called delete on this object101 std::set<DestructionListener*> destructionListeners_; //!< All destruction listeners (for example weak pointers which point to this object and like to get notified if it dies)102 63 }; 103 104 /**105 @brief This listener is used to inform weak pointers if an object of type OrxonoxClass gets destroyed.106 */107 class _CoreExport DestructionListener108 {109 friend class OrxonoxClass;110 111 protected:112 virtual ~DestructionListener() {}113 114 inline void registerAsDestructionListener(OrxonoxClass* object)115 { if (object) { object->registerDestructionListener(this); } }116 inline void unregisterAsDestructionListener(OrxonoxClass* object)117 { if (object) { object->unregisterDestructionListener(this); } }118 119 virtual void objectDeleted() = 0;120 };121 122 64 } 123 65 -
code/branches/core6/src/libraries/core/object/CMakeLists.txt
r9562 r9570 2 2 Context.cc 3 3 ContextObject.cc 4 Destroyable.cc 4 5 MetaObjectList.cc 5 6 ObjectListBase.cc -
code/branches/core6/src/libraries/core/object/Destroyable.cc
r9565 r9570 29 29 /** 30 30 @file 31 @brief Implementation of OrxonoxClass.31 @brief Implementation of Destroyable. 32 32 */ 33 33 34 #include " OrxonoxClass.h"34 #include "Destroyable.h" 35 35 36 36 #include <cassert> 37 #include "core/object/MetaObjectList.h"38 #include "core/object/Context.h"39 #include "Identifier.h"40 37 41 38 namespace orxonox … … 44 41 @brief Constructor: Sets the default values. 45 42 */ 46 OrxonoxClass::OrxonoxClass()43 Destroyable::Destroyable() 47 44 { 48 45 this->referenceCount_ = 0; … … 53 50 @brief Destructor: Notifies all DestructionListener (for example @ref WeakPtr "weak pointers") that this object is being deleted. 54 51 */ 55 OrxonoxClass::~OrxonoxClass()52 Destroyable::~Destroyable() 56 53 { 57 54 assert(this->referenceCount_ <= 0); … … 65 62 @brief Deletes the object if no @ref orxonox::SmartPtr "smart pointers" point to this object. Otherwise schedules the object to be deleted as soon as possible. 66 63 */ 67 void OrxonoxClass::destroy()64 void Destroyable::destroy() 68 65 { 69 66 assert(this); // Just in case someone tries to delete a NULL pointer -
code/branches/core6/src/libraries/core/object/Destroyable.h
r9565 r9570 28 28 29 29 /** 30 @defgroup OrxonoxClass OrxonoxClass 31 @ingroup Class 30 @file 31 @ingroup Object 32 @brief Declaration of Destroyable, the base class of all objects which can be used with SmartPtr and WeakPtr. 32 33 */ 33 34 34 /** 35 @file 36 @ingroup Class OrxonoxClass 37 @brief Declaration of OrxonoxClass, the base class of all objects and interfaces in Orxonox. 38 */ 39 40 #ifndef _OrxonoxClass_H__ 41 #define _OrxonoxClass_H__ 35 #ifndef _Destroyable_H__ 36 #define _Destroyable_H__ 42 37 43 38 #include "core/CorePrereqs.h" 44 39 45 40 #include <set> 46 //#include "Super.h"47 #include "Identifiable.h"48 41 49 42 namespace orxonox 50 43 { 51 44 /** 52 @brief The class all objects and interfaces of the game-logic (not the engine) are derived from. 53 54 The BaseObject and Interfaces are derived with @c virtual @c public @c OrxonoxClass from OrxonoxClass. 45 @brief Classes must inherit from this class if they should be used with SmartPtr or WeakPtr. 55 46 */ 56 class _CoreExport OrxonoxClass : public Identifiable47 class _CoreExport Destroyable 57 48 { 58 49 template <class T> … … 62 53 63 54 public: 64 OrxonoxClass();65 virtual ~ OrxonoxClass();55 Destroyable(); 56 virtual ~Destroyable(); 66 57 67 58 void destroy(); 68 69 /// Function to collect the SetConfigValue-macro calls.70 void setConfigValues() {};71 59 72 60 /// Returns the number of @ref orxonox::SmartPtr "smart pointers" that point to this object. … … 103 91 104 92 /** 105 @brief This listener is used to inform weak pointers if an object of type OrxonoxClassgets destroyed.93 @brief This listener is used to inform weak pointers if an object of type Destroyable gets destroyed. 106 94 */ 107 95 class _CoreExport DestructionListener 108 96 { 109 friend class OrxonoxClass;97 friend class Destroyable; 110 98 111 99 protected: 112 100 virtual ~DestructionListener() {} 113 101 114 inline void registerAsDestructionListener( OrxonoxClass* object)102 inline void registerAsDestructionListener(Destroyable* object) 115 103 { if (object) { object->registerDestructionListener(this); } } 116 inline void unregisterAsDestructionListener( OrxonoxClass* object)104 inline void unregisterAsDestructionListener(Destroyable* object) 117 105 { if (object) { object->unregisterDestructionListener(this); } } 118 106 … … 122 110 } 123 111 124 #endif /* _ OrxonoxClass_H__ */112 #endif /* _Destroyable_H__ */
Note: See TracChangeset
for help on using the changeset viewer.