4595 Mauritz Sundell 2011-10-13
ndb - move helper methods from entry class to super class for DLHashTable
To enable multiple hash tables on same object the helper methods
equal() and hashValue() need to be different not only the linked
list members (nextHash, prevHash).
Moving the methods from entry class, T, to superclass, U. All used
instances of DLHashTable used U=T so no change in function is
expected.
modified:
storage/ndb/src/kernel/vm/DLHashTable.hpp
4594 Jonas Oreland 2011-10-13
ndb - improve column comments on new ndb$info tables
modified:
storage/ndb/src/kernel/vm/NdbinfoTables.cpp
=== modified file 'storage/ndb/src/kernel/vm/DLHashTable.hpp'
--- a/storage/ndb/src/kernel/vm/DLHashTable.hpp 2011-10-07 11:46:40 +0000
+++ b/storage/ndb/src/kernel/vm/DLHashTable.hpp 2011-10-13 09:25:13 +0000
@@ -27,11 +27,16 @@
* (with a double linked list)
*
* The entries in the hashtable must have the following methods:
- * -# bool equal(const class T &) const;
+ * -# bool U::equal(const class U &) const;
* Which should return equal if the to objects have the same key
- * -# Uint32 hashValue() const;
+ * -# Uint32 U::hashValue() const;
* Which should return a 32 bit hashvalue
+ *
+ * and the following members:
+ * -# Uint32 U::nextHash;
+ * -# Uint32 U::prevHash;
*/
+
template <typename P, typename T, typename U = T>
class DLHashTableImpl
{
@@ -211,7 +216,7 @@ inline
void
DLHashTableImpl<P, T, U>::add(Ptr<T> & obj)
{
- const Uint32 hv = obj.p->hashValue() & mask;
+ const Uint32 hv = obj.p->U::hashValue() & mask;
const Uint32 i = hashValues[hv];
if(i == RNIL)
@@ -288,7 +293,7 @@ inline
void
DLHashTableImpl<P, T, U>::remove(Ptr<T> & ptr, const T & key)
{
- const Uint32 hv = key.hashValue() & mask;
+ const Uint32 hv = key.U::hashValue() & mask;
Uint32 i;
T * p;
@@ -300,7 +305,7 @@ DLHashTableImpl<P, T, U>::remove(Ptr<T>
while(i != RNIL)
{
p = thePool.getPtr(i);
- if(key.equal(* p))
+ if(key.U::equal(* p))
{
const Uint32 next = p->U::nextHash;
if(prev.i == RNIL)
@@ -366,7 +371,7 @@ DLHashTableImpl<P, T, U>::remove(Ptr<T>
}
else
{
- const Uint32 hv = ptr.p->hashValue() & mask;
+ const Uint32 hv = ptr.p->U::hashValue() & mask;
if (hashValues[hv] == ptr.i)
{
hashValues[hv] = next;
@@ -400,7 +405,7 @@ DLHashTableImpl<P, T, U>::release(Ptr<T>
}
else
{
- const Uint32 hv = ptr.p->hashValue() & mask;
+ const Uint32 hv = ptr.p->U::hashValue() & mask;
if (hashValues[hv] == ptr.i)
{
hashValues[hv] = next;
@@ -493,7 +498,7 @@ inline
bool
DLHashTableImpl<P, T, U>::find(Ptr<T> & ptr, const T & key) const
{
- const Uint32 hv = key.hashValue() & mask;
+ const Uint32 hv = key.U::hashValue() & mask;
Uint32 i;
T * p;
@@ -502,7 +507,7 @@ DLHashTableImpl<P, T, U>::find(Ptr<T> &
while(i != RNIL)
{
p = thePool.getPtr(i);
- if(key.equal(* p))
+ if(key.U::equal(* p))
{
ptr.i = i;
ptr.p = p;
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.0 branch (mauritz.sundell:4594 to 4595) | Mauritz Sundell | 13 Oct |