X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..970b97a267e1e60f4e269fb15317d9364526ac21:/include/wx/hashmap.h diff --git a/include/wx/hashmap.h b/include/wx/hashmap.h index f1698d3a11..5bd69cea77 100644 --- a/include/wx/hashmap.h +++ b/include/wx/hashmap.h @@ -18,12 +18,18 @@ #include "wx/string.h" +#include // for ptrdiff_t + // private struct WXDLLEXPORT _wxHashTable_NodeBase { _wxHashTable_NodeBase() : m_nxt(0) {} _wxHashTable_NodeBase* m_nxt; + +// Cannot do this: +// DECLARE_NO_COPY_CLASS(_wxHashTable_NodeBase) +// without rewriting the macros, which require a public copy constructor. }; // private @@ -175,7 +181,7 @@ public: \ CLASSNAME( size_type sz = 10, const hasher& hfun = hasher(), \ const key_equal& k_eq = key_equal(), \ const key_extractor& k_ex = key_extractor() ) \ - : m_tableBuckets( GetNextPrime( sz ) ), \ + : m_tableBuckets( GetNextPrime( (unsigned long) sz ) ), \ m_items( 0 ), \ m_hasher( hfun ), \ m_equals( k_eq ), \ @@ -248,7 +254,7 @@ public: \ delete *node; \ (*node) = temp; \ if( SHOULD_SHRINK( m_tableBuckets, m_items ) ) \ - ResizeTable( GetPreviousPrime( m_tableBuckets ) - 1 ); \ + ResizeTable( GetPreviousPrime( (unsigned long) m_tableBuckets ) - 1 ); \ return 1; \ } \ \ @@ -320,7 +326,7 @@ protected: \ \ void ResizeTable( size_t newSize ) \ { \ - newSize = GetNextPrime( newSize ); \ + newSize = GetNextPrime( (unsigned long)newSize ); \ Node** srcTable = m_table; \ size_t srcBuckets = m_tableBuckets; \ m_table = (Node**)AllocTable( newSize ); \ @@ -328,7 +334,7 @@ protected: \ \ CopyHashTable( (_wxHashTable_NodeBase**)srcTable, srcBuckets, \ this, (_wxHashTable_NodeBase**)m_table, \ - (BucketFromNode)&GetBucketForNode,\ + (BucketFromNode)GetBucketForNode,\ (ProcessNode)&DummyProcessNode ); \ free(srcTable); \ } \ @@ -340,8 +346,8 @@ protected: \ CopyHashTable( (_wxHashTable_NodeBase**)ht.m_table, ht.m_tableBuckets,\ (_wxHashTableBase2*)this, \ (_wxHashTable_NodeBase**)m_table, \ - (BucketFromNode)&GetBucketForNode, \ - (ProcessNode)&CopyNode ); \ + (BucketFromNode)GetBucketForNode, \ + (ProcessNode)CopyNode ); \ } \ }; @@ -437,7 +443,7 @@ public: // TODO: this might not work well on architectures with 64 bit pointers but // 32 bit longs, we should use % ULONG_MAX there - unsigned long operator()( const void* k ) const { return (unsigned long)k; } + unsigned long operator()( const void* k ) const { return (unsigned long)wxPtrToULong(k); } wxPointerHash& operator=(const wxPointerHash&) { return *this; } }; @@ -523,7 +529,7 @@ public: \ /* count() == 0 | 1 */ \ size_type count( const const_key_type& key ) \ { return GetNode( key ) ? 1 : 0; } \ -}; +} // these macros are to be used in the user code #define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \ @@ -531,11 +537,11 @@ public: \ #define WX_DECLARE_STRING_HASH_MAP( VALUE_T, CLASSNAME ) \ _WX_DECLARE_HASH_MAP( wxString, VALUE_T, wxStringHash, wxStringEqual, \ - CLASSNAME, class ); + CLASSNAME, class ) #define WX_DECLARE_VOIDPTR_HASH_MAP( VALUE_T, CLASSNAME ) \ _WX_DECLARE_HASH_MAP( void*, VALUE_T, wxPointerHash, wxPointerEqual, \ - CLASSNAME, class ); + CLASSNAME, class ) // and these do exactly the same thing but should be used inside the // library @@ -544,11 +550,11 @@ public: \ #define WX_DECLARE_EXPORTED_STRING_HASH_MAP( VALUE_T, CLASSNAME ) \ _WX_DECLARE_HASH_MAP( wxString, VALUE_T, wxStringHash, wxStringEqual, \ - CLASSNAME, class WXDLLEXPORT ); + CLASSNAME, class WXDLLEXPORT ) #define WX_DECLARE_EXPORTED_VOIDPTR_HASH_MAP( VALUE_T, CLASSNAME ) \ _WX_DECLARE_HASH_MAP( void*, VALUE_T, wxPointerHash, wxPointerEqual, \ - CLASSNAME, class WXDLLEXPORT ); + CLASSNAME, class WXDLLEXPORT ) #endif // _WX_HASHMAP_H_