summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authornodchip <nodchip@gmail.com>2010-03-06 10:07:37 +0000
committernodchip <nodchip@gmail.com>2010-03-06 10:07:37 +0000
commit2dabcb881cff02d082f09096ddbd5ee4342a68b8 (patch)
treeec0be9d6e2880089f2a88cba4a3dd22ca065c5a1 /Source/Core
parent6376645b6925bef5ee015452dcb5d2b1a72247cc (diff)
Fixed the crazy code in r5161.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5163 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoCommon/Src/VertexLoader.h20
-rw-r--r--Source/Core/VideoCommon/Src/VertexLoaderManager.cpp12
2 files changed, 21 insertions, 11 deletions
diff --git a/Source/Core/VideoCommon/Src/VertexLoader.h b/Source/Core/VideoCommon/Src/VertexLoader.h
index 8980c4e498..993e6ac88e 100644
--- a/Source/Core/VideoCommon/Src/VertexLoader.h
+++ b/Source/Core/VideoCommon/Src/VertexLoader.h
@@ -35,7 +35,7 @@
class VertexLoaderUID
{
u32 vid[5];
- size_t hashValue;
+ size_t hash;
public:
VertexLoaderUID() {}
void InitFromCurrentState(int vtx_attr_group) {
@@ -44,7 +44,7 @@ public:
vid[2] = g_VtxAttr[vtx_attr_group].g0.Hex & ~VAT_0_FRACBITS;
vid[3] = g_VtxAttr[vtx_attr_group].g1.Hex & ~VAT_1_FRACBITS;
vid[4] = g_VtxAttr[vtx_attr_group].g2.Hex & ~VAT_2_FRACBITS;
- hashValue = hash(*this);
+ hash = CalculateHash();
}
bool operator < (const VertexLoaderUID &other) const {
// This is complex because of speed.
@@ -60,16 +60,20 @@ public:
}
return false;
}
- static size_t hash(const VertexLoaderUID& rh) {
+ bool operator == (const VertexLoaderUID& rh) const {
+ return hash == rh.hash && std::equal(vid, vid + sizeof(vid) / sizeof(vid[0]), rh.vid);
+ }
+ size_t GetHash() const {
+ return hash;
+ }
+private:
+ size_t CalculateHash() {
size_t h = -1;
- for (int i = 0; i < sizeof(rh.vid) / sizeof(rh.vid[0]); ++i) {
- h = h * 137 + rh.vid[i];
+ for (int i = 0; i < sizeof(vid) / sizeof(vid[0]); ++i) {
+ h = h * 137 + vid[i];
}
return h;
}
- operator size_t() const {
- return hashValue;
- }
};
class VertexLoader : public Gen::XCodeBlock
diff --git a/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp b/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp
index cdb4aa42a5..176e9ad0c7 100644
--- a/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp
+++ b/Source/Core/VideoCommon/Src/VertexLoaderManager.cpp
@@ -37,11 +37,17 @@ static int s_attr_dirty; // bitfield
static VertexLoader *g_VertexLoaders[8];
-#ifndef _MSC_VER
+#ifdef _MSC_VER
+namespace stdext {
+ inline size_t hash_value(const VertexLoaderUID& uid) {
+ return uid.GetHash();
+ }
+}
+#else
namespace __gnu_cxx {
template<> struct hash<VertexLoaderUID> {
- size_t operator()(const VertexLoaderUID& __x) const {
- return __x;
+ size_t operator()(const VertexLoaderUID& uid) const {
+ return uid.GetHash();
}
};
}