Browse Source

Make explicit `std::hash` specialization for ResourceKey.

Allows users to use ResourceKey in `std::unordered_map` more
conveniently.
pull/277/head
Vladimír Vondruš 13 years ago
parent
commit
091efebaa1
  1. 7
      src/Magnum.h
  2. 11
      src/Resource.h
  3. 8
      src/ResourceManager.h

7
src/Magnum.h

@ -419,4 +419,11 @@ class Timeline;
}
namespace std {
#ifndef DOXYGEN_GENERATING_OUTPUT
template<class> struct hash;
#endif
template<> struct hash<Magnum::ResourceKey>;
}
#endif

11
src/Resource.h

@ -277,6 +277,17 @@ template<class T, class U> void Resource<T, U>::acquire() {
}
namespace std {
/** @brief `std::hash` specialization for @ref Magnum::ResourceKey */
template<> struct hash<Magnum::ResourceKey> {
#ifndef DOXYGEN_GENERATING_OUTPUT
std::size_t operator()(Magnum::ResourceKey key) const {
return *reinterpret_cast<const std::size_t*>(key.byteArray());
}
#endif
};
}
/* Make the definition complete */
#include "ResourceManager.h"

8
src/ResourceManager.h

@ -91,12 +91,6 @@ template<class> class AbstractResourceLoader;
namespace Implementation {
struct ResourceKeyHash {
std::size_t operator()(ResourceKey key) const {
return *reinterpret_cast<const std::size_t*>(key.byteArray());
}
};
template<class T> class ResourceManagerData {
template<class, class> friend class Magnum::Resource;
friend class AbstractResourceLoader<T>;
@ -147,7 +141,7 @@ template<class T> class ResourceManagerData {
void decrementReferenceCount(ResourceKey key);
std::unordered_map<ResourceKey, Data, ResourceKeyHash> _data;
std::unordered_map<ResourceKey, Data> _data;
T* _fallback;
AbstractResourceLoader<T>* _loader;
std::size_t _lastChange;

Loading…
Cancel
Save