diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-06-23 23:33:34 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-06-23 23:33:34 +0000 |
commit | 4b0172d1f666a12cffbdd6bd331e95a92d8f652f (patch) | |
tree | dde7ab71fd5d02200be35e041b00e5649f9cd3a8 /src/resources/resource.cpp | |
parent | 33587089cf7d87bbc2104e80746fdddc7a5498e1 (diff) | |
download | mana-4b0172d1f666a12cffbdd6bd331e95a92d8f652f.tar.gz mana-4b0172d1f666a12cffbdd6bd331e95a92d8f652f.tar.bz2 mana-4b0172d1f666a12cffbdd6bd331e95a92d8f652f.tar.xz mana-4b0172d1f666a12cffbdd6bd331e95a92d8f652f.zip |
Finishing resource manager ability to clean up resources. Still work to do on
resources other than images.
Diffstat (limited to 'src/resources/resource.cpp')
-rw-r--r-- | src/resources/resource.cpp | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/src/resources/resource.cpp b/src/resources/resource.cpp index b3aa80f6..3ff8064d 100644 --- a/src/resources/resource.cpp +++ b/src/resources/resource.cpp @@ -22,49 +22,45 @@ */ #include "resource.h" +#include "resourcemanager.h" Resource::Resource(): - referenceCount(0) + mRefCount(0) { } Resource::~Resource() { - // TODO: Notify resource manager about this resource being deleted } -bool Resource::isLoaded() const +void +Resource::setIdPath(const std::string &idPath) { - return loaded; + mIdPath = idPath; } -void Resource::incRef() +void +Resource::incRef() { - referenceCount++; + mRefCount++; } -bool Resource::decRef() +bool +Resource::decRef() { - /* Warning: There is still a serious problem with the object deleting - * itself and that is that the resource manager doesn't know about it - * currently, causing it to crash while trying to clean up. Don't use - * this function until that is solved. Probably we'll have to make it - * so that decrementing count goes through resource manager too. - */ - if (referenceCount > 0) - { - referenceCount--; + // Reference may not already have reached zero + assert(mRefCount != 0); - if (referenceCount == 0) { - //delete this; - return true; - } - else { - return false; - } + mRefCount--; + + if (mRefCount == 0) { + // Make sure resource manager won't refer to deleted resource + ResourceManager *resman = ResourceManager::getInstance(); + resman->release(mIdPath); + delete this; + return true; } else { - // Warning: Shouldn't get here! - return true; + return false; } } |