aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/resourceman.cpp
diff options
context:
space:
mode:
authorjohndoe1232012-11-16 21:26:15 +0000
committerWillem Jan Palenstijn2013-05-08 20:47:38 +0200
commitcc015e3d24d15dc0c3532063927fd40e2329f43e (patch)
tree0827cef3a7e3bf2d4322e7e55e103308b5b11bb8 /engines/neverhood/resourceman.cpp
parent1b9807b312172b0cb31b2eb83b8afc5fd23f97f5 (diff)
downloadscummvm-rg350-cc015e3d24d15dc0c3532063927fd40e2329f43e.tar.gz
scummvm-rg350-cc015e3d24d15dc0c3532063927fd40e2329f43e.tar.bz2
scummvm-rg350-cc015e3d24d15dc0c3532063927fd40e2329f43e.zip
NEVERHOOD: Simplify resource loading
- Renamne and clean up
Diffstat (limited to 'engines/neverhood/resourceman.cpp')
-rw-r--r--engines/neverhood/resourceman.cpp114
1 files changed, 36 insertions, 78 deletions
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp
index eb6aa01533..3b67b26a06 100644
--- a/engines/neverhood/resourceman.cpp
+++ b/engines/neverhood/resourceman.cpp
@@ -24,6 +24,13 @@
namespace Neverhood {
+ResourceHandle::ResourceHandle()
+ : _resourceFileEntry(NULL), _data(NULL) {
+}
+
+ResourceHandle::~ResourceHandle() {
+}
+
ResourceMan::ResourceMan() {
}
@@ -66,92 +73,43 @@ ResourceFileEntry *ResourceMan::findEntry(uint32 fileHash) {
return entry;
}
-int ResourceMan::useResource(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- if (!entry)
- return -1;
- if (entry->resourceHandle != -1) {
- _resources[entry->resourceHandle]->useRefCount++;
- } else {
- Resource *resource = new Resource();
- resource->entry = entry;
- resource->useRefCount = 1;
- entry->resourceHandle = (int)_resources.size();
- _resources.push_back(resource);
- }
- return entry->resourceHandle;
-}
-
-void ResourceMan::unuseResource(int resourceHandle) {
- if (resourceHandle < 0)
- return;
- Resource *resource = _resources[resourceHandle];
- if (resource->useRefCount > 0)
- resource->useRefCount--;
-}
-
-uint32 ResourceMan::getResourceSize(int resourceHandle) const {
- if (resourceHandle < 0)
- return 0;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archiveEntry->size;
-}
-
-byte ResourceMan::getResourceType(int resourceHandle) {
- if (resourceHandle < 0)
- return 0;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archiveEntry->type;
-}
-
-byte ResourceMan::getResourceTypeByHash(uint32 fileHash) {
+Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
ResourceFileEntry *entry = findEntry(fileHash);
- return entry->archiveEntry->type;
-}
-
-byte *ResourceMan::getResourceExtData(int resourceHandle) {
- if (resourceHandle < 0)
- return NULL;
- Resource *resource = _resources[resourceHandle];
- return resource->entry->archive->getEntryExtData(resource->entry->archiveEntry);
+ return entry->archive->createStream(entry->archiveEntry);
}
-byte *ResourceMan::getResourceExtDataByHash(uint32 fileHash) {
- ResourceFileEntry *entry = findEntrySimple(fileHash);
- return entry ? entry->archive->getEntryExtData(entry->archiveEntry) : NULL;
+void ResourceMan::queryResource(uint32 fileHash, ResourceHandle &resourceHandle) {
+ resourceHandle._resourceFileEntry = findEntry(fileHash);
}
-byte *ResourceMan::loadResource(int resourceHandle, bool moveToFront) {
- if (resourceHandle < 0)
- return NULL;
- Resource *resource = _resources[resourceHandle];
- ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
- if (!resourceData) {
- resourceData = new ResourceData();
- _data[resource->entry->archiveEntry->fileHash] = resourceData;
- }
- if (resourceData->data != NULL) {
- resourceData->dataRefCount++;
- } else {
- resourceData->data = new byte[resource->entry->archiveEntry->size];
- resource->entry->archive->load(resource->entry->archiveEntry, resourceData->data, 0);
- resourceData->dataRefCount = 1;
+void ResourceMan::loadResource(ResourceHandle &resourceHandle) {
+ resourceHandle._data = NULL;
+ if (resourceHandle.isValid()) {
+ const uint32 fileHash = resourceHandle.fileHash();
+ ResourceData *resourceData = _data[fileHash];
+ if (!resourceData) {
+ resourceData = new ResourceData();
+ _data[fileHash] = resourceData;
+ }
+ if (resourceData->data != NULL) {
+ resourceData->dataRefCount++;
+ } else {
+ resourceData->data = new byte[resourceHandle._resourceFileEntry->archiveEntry->size];
+ resourceHandle._resourceFileEntry->archive->load(resourceHandle._resourceFileEntry->archiveEntry, resourceData->data, 0);
+ resourceData->dataRefCount = 1;
+ }
+ resourceHandle._data = resourceData->data;
}
- return resourceData->data;
-}
-
-void ResourceMan::unloadResource(int resourceHandle) {
- if (resourceHandle < 0)
- return;
- Resource *resource = _resources[resourceHandle];
- ResourceData *resourceData = _data[resource->entry->archiveEntry->fileHash];
- if (resourceData && resourceData->dataRefCount > 0)
- resourceData->dataRefCount--;
}
-Common::SeekableReadStream *ResourceMan::createStream(uint32 fileHash) {
- ResourceFileEntry *entry = findEntry(fileHash);
- return entry->archive->createStream(entry->archiveEntry);
+void ResourceMan::unloadResource(ResourceHandle &resourceHandle) {
+ if (resourceHandle.isValid()) {
+ ResourceData *resourceData = _data[resourceHandle.fileHash()];
+ if (resourceData && resourceData->dataRefCount > 0)
+ --resourceData->dataRefCount;
+ resourceHandle._resourceFileEntry = NULL;
+ resourceHandle._data = NULL;
+ }
}
} // End of namespace Neverhood