- Timestamp:
- Mar 24, 2013, 8:51:37 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.