diff options
author | Max Horn | 2010-06-15 12:31:16 +0000 |
---|---|---|
committer | Max Horn | 2010-06-15 12:31:16 +0000 |
commit | 2b24a1a2adcd112a6f3d878c9172ec570a6077d9 (patch) | |
tree | ba8fff2af23a85f0acb98ddcc1567766a47961ac /engines/sci/resource.h | |
parent | 68eeef8f1aa560954297291887f26bad6591aa15 (diff) | |
download | scummvm-rg350-2b24a1a2adcd112a6f3d878c9172ec570a6077d9.tar.gz scummvm-rg350-2b24a1a2adcd112a6f3d878c9172ec570a6077d9.tar.bz2 scummvm-rg350-2b24a1a2adcd112a6f3d878c9172ec570a6077d9.zip |
SCI: OOpify class ResourceId
svn-id: r49841
Diffstat (limited to 'engines/sci/resource.h')
-rw-r--r-- | engines/sci/resource.h | 67 |
1 files changed, 38 insertions, 29 deletions
diff --git a/engines/sci/resource.h b/engines/sci/resource.h index d2dff8f58d..e030db4bc4 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -114,57 +114,64 @@ class ResourceManager; class ResourceSource; class ResourceId { -public: - ResourceType type; - uint16 number; - uint32 tuple; // Only used for audio36 and sync36 + static inline ResourceType fixupType(ResourceType type) { + if (type < kResourceTypeMacPict || type > kResourceTypeInvalid) + return kResourceTypeInvalid; + return type; + } - ResourceId() : type(kResourceTypeInvalid), number(0), tuple(0) { } + ResourceType _type; + uint16 _number; + uint32 _tuple; // Only used for audio36 and sync36 + +public: + ResourceId() : _type(kResourceTypeInvalid), _number(0), _tuple(0) { } ResourceId(ResourceType type_, uint16 number_, uint32 tuple_ = 0) - : type(type_), number(number_), tuple(tuple_) { - if (type < kResourceTypeMacPict || type > kResourceTypeInvalid) - type = kResourceTypeInvalid; + : _type(fixupType(type_)), _number(number_), _tuple(tuple_) { } ResourceId(ResourceType type_, uint16 number_, byte noun, byte verb, byte cond, byte seq) - : type(type_), number(number_) { - tuple = (noun << 24) | (verb << 16) | (cond << 8) | seq; - - if ((type < kResourceTypeView) || (type > kResourceTypeInvalid)) - type = kResourceTypeInvalid; + : _type(fixupType(type_)), _number(number_) { + _tuple = (noun << 24) | (verb << 16) | (cond << 8) | seq; } - Common::String toString() { + Common::String toString() const { char buf[32]; - snprintf(buf, 32, "%s.%i", getResourceTypeName(type), number); + snprintf(buf, 32, "%s.%i", getResourceTypeName(_type), _number); Common::String retStr = buf; - if (tuple != 0) { - snprintf(buf, 32, "(%i, %i, %i, %i)", tuple >> 24, (tuple >> 16) & 0xff, (tuple >> 8) & 0xff, tuple & 0xff); + if (_tuple != 0) { + snprintf(buf, 32, "(%i, %i, %i, %i)", _tuple >> 24, (_tuple >> 16) & 0xff, (_tuple >> 8) & 0xff, _tuple & 0xff); retStr += buf; } return retStr; } -}; -struct ResourceIdHash : public Common::UnaryFunction<ResourceId, uint> { - uint operator()(ResourceId val) const { return ((uint)((val.type << 16) | val.number)) ^ val.tuple; } -}; + inline ResourceType getType() const { return _type; } + inline uint16 getNumber() const { return _number; } + inline uint32 getTuple() const { return _tuple; } -struct ResourceIdEqualTo : public Common::BinaryFunction<ResourceId, ResourceId, bool> { - bool operator()(const ResourceId &x, const ResourceId &y) const { return (x.type == y.type) && (x.number == y.number) && (x.tuple == y.tuple); } -}; + inline uint hash() const { + return ((uint)((_type << 16) | _number)) ^ _tuple; + } + + bool operator==(const ResourceId &other) const { + return (_type == other._type) && (_number == other._number) && (_tuple == other._tuple); + } -struct ResourceIdLess : public Common::BinaryFunction<ResourceId, ResourceId, bool> { - bool operator()(const ResourceId &x, const ResourceId &y) const { - return (x.type < y.type) || ((x.type == y.type) && (x.number < y.number)) - || ((x.type == y.type) && (x.number == y.number) && (x.tuple < y.tuple)); + bool operator<(const ResourceId &other) const { + return (_type < other._type) || ((_type == other._type) && (_number < other._number)) + || ((_type == other._type) && (_number == other._number) && (_tuple < other._tuple)); } }; +struct ResourceIdHash : public Common::UnaryFunction<ResourceId, uint> { + uint operator()(ResourceId val) const { return val.hash(); } +}; + /** Class for storing resources in memory */ class Resource { friend class ResourceManager; @@ -191,6 +198,8 @@ public: byte *_header; uint32 _headerSize; + inline ResourceType getType() const { return _id.getType(); } + /** * Write the resource to the specified stream. * This method is used only by the "dump" debugger command. @@ -213,7 +222,7 @@ protected: int readResourceInfo(Common::SeekableReadStream *file, uint32 &szPacked, ResourceCompression &compression); }; -typedef Common::HashMap<ResourceId, Resource *, ResourceIdHash, ResourceIdEqualTo> ResourceMap; +typedef Common::HashMap<ResourceId, Resource *, ResourceIdHash> ResourceMap; enum ResVersion { kResVersionUnknown, |