wxHashTableEqual( keyType ) ),
m_keyType( keyType ) { }
- ~wxHashTableBase()
+ ~wxHashTableBase() { Clear(); }
+
+ size_t GetCount() const { return m_map.size(); }
+
+ void Clear()
{
if( m_keyType == wxKEY_STRING )
{
delete[] tmp; // used in operator++
}
}
+ m_map.clear();
}
-
- size_t GetCount() const { return m_map.size(); }
protected:
void DoPut( long key, void* data )
{
+ wxASSERT( m_keyType == wxKEY_INTEGER );
+
wxHashKeyValue k; k.integer = key;
m_map[k] = data;
}
void DoPut( const wxChar* key, void* data )
{
+ wxASSERT( m_keyType == wxKEY_STRING );
+
wxHashKeyValue k;
- k.string = new wxChar[wxStrlen(key) + 1];
- wxStrcpy(k.string, key);
- m_map[k] = data;
+ k.string = (wxChar*)key;
+ wxHashTableBaseBase::iterator it = m_map.find(k);
+
+ if( it == m_map.end() )
+ {
+ k.string = new wxChar[wxStrlen(key) + 1];
+ wxStrcpy(k.string, key);
+ m_map[k] = data;
+ }
+ else
+ it->second = data;
}
void* DoGet( long key ) const
{
+ wxASSERT( m_keyType == wxKEY_INTEGER );
+
wxHashKeyValue k; k.integer = key;
wxHashTableBaseBase::const_iterator it = m_map.find( k );
void* DoGet( const wxChar* key ) const
{
+ wxASSERT( m_keyType == wxKEY_STRING );
+
wxHashKeyValue k; k.string = (wxChar*)key;
wxHashTableBaseBase::const_iterator it = m_map.find( k );
void* DoDelete( long key )
{
+ wxASSERT( m_keyType == wxKEY_INTEGER );
+
wxHashKeyValue k; k.integer = key;
wxHashTableBaseBase::iterator it = m_map.find( k );
void* DoDelete( const wxChar* key )
{
+ wxASSERT( m_keyType == wxKEY_STRING );
+
wxHashKeyValue k; k.string = (wxChar*)key;
wxHashTableBaseBase::iterator it = m_map.find( k );
it lit = i->m_iter;
return citer( i->m_hash, ++lit );
}
- citer GetPrevious() const
- {
- citer* i = (citer*)this;
- it lit = i->m_iter;
- return citer( i->m_hash, ++lit );
- }
void SetData( wxObject* e )
{
citer* i = (citer*)this;
return it;
}
- void Clear() { m_map.clear(); }
+ void Clear() { wxHashTableBase::Clear(); }
private:
compatibility_iterator m_iter;
};