]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/hashmap.h
wxUSE_XML
[wxWidgets.git] / include / wx / hashmap.h
index 7c629ae63193ac30e3dff8b2635110e16216e02f..896cd12db0b54f63edf1572bd100532c381101c4 100644 (file)
 
 #include <stddef.h>             // for ptrdiff_t
 
+#ifdef __WXWINCE__
+typedef int ptrdiff_t;
+#endif
+
 // private
 struct WXDLLIMPEXP_BASE _wxHashTable_NodeBase
 {
@@ -278,8 +282,11 @@ protected: \
                 return node; \
             node = node->m_next(); \
         } \
- \
-        node = new Node( value ); \
+       return CreateNode( value  , bucket); \
+    }\
+    Node * CreateNode( const value_type& value, size_t bucket ) \
+    {\
+        Node* node = new Node( value ); \
         node->m_nxt = m_table[bucket]; \
         m_table[bucket] = node; \
  \
@@ -290,6 +297,10 @@ protected: \
  \
         return node; \
     } \
+    void CreateNode( const value_type& value ) \
+    {\
+        CreateNode(value, m_hasher( m_getKey(value) ) % m_tableBuckets ); \
+    }\
  \
     /* returns NULL if not found */ \
     Node** GetNodePtr( const const_key_type& key ) const \
@@ -556,5 +567,19 @@ public: \
     _WX_DECLARE_HASH_MAP( void*, VALUE_T, wxPointerHash, wxPointerEqual, \
                           CLASSNAME, class WXDLLEXPORT )
 
+// delete all hash elements
+//
+// NB: the class declaration of the hash elements must be visible from the
+//     place where you use this macro, otherwise the proper destructor may not
+//     be called (a decent compiler should give a warning about it, but don't
+//     count on it)!
+#define WX_CLEAR_HASH_MAP(type, hashmap)                                     \
+    {                                                                        \
+        type::iterator it, en;                                               \
+        for( it = (hashmap).begin(), en = (hashmap).end(); it != en; ++it )  \
+            delete it->second;                                               \
+        (hashmap).clear();                                                   \
+    }
+
 #endif // _WX_HASHMAP_H_