#define _WX_HASHMAP_H_
#include "wx/string.h"
+#include "wx/wxcrt.h"
#if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \
&& (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP))
value_type m_value; \
}; \
\
- CLASSEXP Iterator; \
- friend CLASSEXP Iterator; \
protected: \
static void DeleteNode( _wxHashTable_NodeBase* node ) \
{ \
\
Iterator() : m_node(0), m_ht(0) {} \
Iterator( Node* node, const Self* ht ) \
- : m_node(node), m_ht((Self*)ht) {} \
+ : m_node(node), m_ht(wx_const_cast(Self*, ht)) {} \
bool operator ==( const Iterator& it ) const \
{ return m_node == it.m_node; } \
bool operator !=( const Iterator& it ) const \
m_node = next ? next : GetNextNode(); \
} \
}; \
+ friend class Iterator; \
\
public: \
CLASSEXP iterator : public Iterator \
const_iterator() : Iterator() {} \
const_iterator(iterator i) : Iterator(i) {} \
const_iterator( Node* node, const Self* ht ) \
- : Iterator( node, (Self*)ht ) {} \
+ : Iterator(node, wx_const_cast(Self*, ht)) {} \
const_iterator& operator++() { PlusPlus();return *this; } \
const_iterator operator++(int) { const_iterator it=*this;PlusPlus();return it; } \
const_reference operator *() const { return m_node->m_value; } \
\
const Self& operator=( const Self& ht ) \
{ \
- clear(); \
- m_hasher = ht.m_hasher; \
- m_equals = ht.m_equals; \
- m_getKey = ht.m_getKey; \
- m_items = ht.m_items; \
- HashCopy( ht ); \
+ if (&ht != this) \
+ { \
+ clear(); \
+ m_hasher = ht.m_hasher; \
+ m_equals = ht.m_equals; \
+ m_getKey = ht.m_getKey; \
+ m_items = ht.m_items; \
+ HashCopy( ht ); \
+ } \
return *this; \
} \
\
const_iterator end() const { return const_iterator( 0, this ); } \
iterator end() { return iterator( 0, this ); } \
const_iterator begin() const \
- { return const_iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); }; \
+ { return const_iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); } \
iterator begin() \
- { return iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); }; \
+ { return iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); } \
\
size_type erase( const const_key_type& key ) \
{ \
typedef const KEY_T const_t1; \
typedef const VALUE_T const_t2; \
\
- CLASSNAME( const const_t1& f, const const_t2& s ):first(t1(f)),second(t2(s)) {} \
+ CLASSNAME(const const_t1& f, const const_t2& s) \
+ : first(wx_const_cast(t1&, f)), second(wx_const_cast(t2&, s)) {} \
\
t1 first; \
t2 second; \
wxPointerEqual& operator=(const wxPointerEqual&) { return *this; }
};
-// wxString, char*, wxChar*
+// wxString, char*, wchar_t*
class WXDLLIMPEXP_BASE wxStringHash
{
public:
wxStringHash() {}
unsigned long operator()( const wxString& x ) const
- { return wxCharStringHash( x.c_str() ); }
- unsigned long operator()( const wxChar* x ) const
- { return wxCharStringHash( x ); }
- static unsigned long wxCharStringHash( const wxChar* );
-#if wxUSE_UNICODE
+ { return stringHash( x.wx_str() ); }
+ unsigned long operator()( const wchar_t* x ) const
+ { return stringHash( x ); }
unsigned long operator()( const char* x ) const
- { return charStringHash( x ); }
- static unsigned long charStringHash( const char* );
-#endif // wxUSE_UNICODE
+ { return stringHash( x ); }
+
+#if WXWIN_COMPATIBILITY_2_8
+ static unsigned long wxCharStringHash( const wxChar* x )
+ { return stringHash(x); }
+ #if wxUSE_UNICODE
+ static unsigned long charStringHash( const char* x )
+ { return stringHash(x); }
+ #endif
+#endif // WXWIN_COMPATIBILITY_2_8
+
+ static unsigned long stringHash( const wchar_t* );
+ static unsigned long stringHash( const char* );
wxStringHash& operator=(const wxStringHash&) { return *this; }
};