From 796609174e5ecb35fab992969e7690186840048a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Apr 2013 13:14:43 +0200 Subject: tagging ychat-0.7.3 --- src/maps/hmap.h | 6 +----- src/maps/hmap.tmpl | 11 +++++++++++ src/maps/smap.h | 1 + src/maps/smap.tmpl | 8 ++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) (limited to 'src/maps') diff --git a/src/maps/hmap.h b/src/maps/hmap.h index a0824ec..38ea2e4 100644 --- a/src/maps/hmap.h +++ b/src/maps/hmap.h @@ -9,11 +9,6 @@ using namespace std; -// void add_elem( obj_type x, key_type k ) --> Insert x -// void del_elem( key_type k ) --> Remove x -// obj_type get_elem( key_type k ) --> Return item that matches x -// void make_empty( ) --> Remove all items - template class hmap { @@ -77,6 +72,7 @@ public: virtual void make_empty( ); virtual void make_empty( void (*func)(key_type) ); virtual void del_elem ( const key_type &k ); + virtual void rename_key ( const key_type &k1, const key_type &k2 ); virtual obj_type set_elem ( const obj_type &x, const key_type &k ); virtual void run_func( void (*func)(obj_type) ); diff --git a/src/maps/hmap.tmpl b/src/maps/hmap.tmpl index 10facac..dcd0426 100644 --- a/src/maps/hmap.tmpl +++ b/src/maps/hmap.tmpl @@ -104,6 +104,17 @@ void hmap::del_elem( const key_type & k ) array[ i_current_pos ].info = DELETED; } +// Remove item x from the hash table. +template +void hmap::rename_key( const key_type & k1, const key_type & k2 ) +{ + int i_current_pos = find_pos( k1 ); + if( is_active( i_current_pos ) ) { + array[ i_current_pos ].info = DELETED; + add_elem( array[ i_current_pos ].element, k2 ); + } +} + // Finds item x and resets its value. template obj_type hmap::set_elem( const obj_type & x, const key_type & k ) diff --git a/src/maps/smap.h b/src/maps/smap.h index e056519..2096139 100644 --- a/src/maps/smap.h +++ b/src/maps/smap.h @@ -30,6 +30,7 @@ class smap : public hmap void add_elem ( const obj_type &x, const key_type &k ); obj_type set_elem ( const obj_type &x, const key_type &k ); void del_elem ( const key_type &k ); + void rename_key ( const key_type &k1, const key_type &k2 ); bool is_avail ( const key_type &k ); obj_type get_elem ( const key_type &k ); obj_type pop_elem ( const key_type &k ); diff --git a/src/maps/smap.tmpl b/src/maps/smap.tmpl index 3167504..5ec7d38 100644 --- a/src/maps/smap.tmpl +++ b/src/maps/smap.tmpl @@ -77,6 +77,14 @@ smap::del_elem( const key_type & k ) pthread_mutex_unlock( &mut_smap ); } +template void +smap::rename_key( const key_type & k1, const key_type & k2 ) +{ + pthread_mutex_lock ( &mut_smap ); + hmap::rename_key( k1, k2 ); + pthread_mutex_unlock( &mut_smap ); +} + template obj_type smap::get_elem( const key_type &k ) -- cgit v1.2.3