#ifndef SMAP_CPP #define SMAP_CPP #include "smap.h" template smap::smap( double moc ) : hmap::hmap(moc) { pthread_mutex_init( &mut_smap , NULL); } template smap::~smap() { pthread_mutex_destroy( &mut_smap ); } template void smap::lock_mutex() { pthread_mutex_lock( &mut_smap ); } template void smap::unlock_mutex() { pthread_mutex_unlock( &mut_smap ); } template int smap::get_size() { int i_size; pthread_mutex_lock ( &mut_smap ); i_size = hmap::get_size(); pthread_mutex_unlock( &mut_smap ); return i_size; } template void smap::make_empty() { pthread_mutex_lock ( &mut_smap ); hmap::make_empty(); pthread_mutex_unlock( &mut_smap ); } template void smap::make_empty( void (*func)(key_type) ) { pthread_mutex_lock ( &mut_smap ); hmap::make_empty( func ); pthread_mutex_unlock( &mut_smap ); } template void smap::add_elem( const obj_type &x, const key_type &k ) { pthread_mutex_lock ( &mut_smap ); hmap::add_elem( x, k ); pthread_mutex_unlock( &mut_smap ); } template obj_type smap::set_elem( const obj_type &x, const key_type &k ) { pthread_mutex_lock ( &mut_smap ); hmap::set_elem( x, k ); pthread_mutex_unlock( &mut_smap ); } template void smap::del_elem( const key_type & k ) { pthread_mutex_lock ( &mut_smap ); hmap::del_elem( k ); pthread_mutex_unlock( &mut_smap ); } template obj_type smap::get_elem( const key_type &k ) { pthread_mutex_lock ( &mut_smap ); obj_type ret_val = hmap::get_elem( k ); pthread_mutex_unlock( &mut_smap ); return ret_val; } template obj_type smap::pop_elem( const key_type &k ) { pthread_mutex_lock ( &mut_smap ); obj_type ret_val = hmap::pop_elem( k ); pthread_mutex_unlock( &mut_smap ); return ret_val; } template bool smap::is_avail( const key_type &k ) { pthread_mutex_lock ( &mut_smap ); bool ret_val = hmap::is_avail( k ); pthread_mutex_unlock( &mut_smap ); return ret_val; } template void smap::run_func( void (*func)(obj_type) ) { pthread_mutex_lock ( &mut_smap ); hmap::run_func( func ); pthread_mutex_unlock( &mut_smap ); } template void smap::run_func( void (*func)(obj_type, void*), void* v_arg ) { pthread_mutex_lock ( &mut_smap ); hmap::run_func( func, v_arg ); pthread_mutex_unlock( &mut_smap ); } template void smap::run_func_on( void (*func)(obj_type), const key_type & k ) { pthread_mutex_lock ( &mut_smap ); hmap::run_func_on( func, k ); pthread_mutex_unlock( &mut_smap ); } template vector* smap::get_key_vector() { pthread_mutex_lock ( &mut_smap ); vector* p_ret_vector = hmap::get_key_vector(); pthread_mutex_unlock( &mut_smap ); return p_ret_vector; } // INSECURE METHODS template int smap::get_size_insecure() { return hmap::get_size(); } template void smap::make_empty_insecure() { hmap::make_empty(); } template void smap::make_empty_insecure( void (*func)(key_type) ) { hmap::make_empty( func ); } template void smap::add_elem_insecure( const obj_type &x, const key_type &k ) { hmap::add_elem( x, k ); } template void smap::del_elem_insecure( const key_type & k ) { hmap::del_elem( k ); } template obj_type smap::get_elem_insecure( const key_type &k ) { return hmap::get_elem( k ); } template obj_type smap::pop_elem_insecure( const key_type &k ) { return hmap::pop_elem( k ); } template bool smap::is_avail_insecure( const key_type &k ) { return hmap::is_avail( k ); } template void smap::run_func_insecure( void (*func)(obj_type) ) { hmap::run_func( func ); } template void smap::run_func_insecure( void (*func)(obj_type, void*), void* v_arg ) { hmap::run_func( func, v_arg ); } template vector* smap::get_key_vector_insecure() { return hmap::get_key_vector(); } #endif