现在的位置: 首页 > 综合 > 正文

ACE_Hash_Map的使用示例

2013年02月20日 ⁄ 综合 ⁄ 共 2736字 ⁄ 字号 评论关闭

一位网友说他不能在ACE中正常地使用嵌套使Hash_Map,我写下下面的代码作了简单测试,发现在ACE使用Hasp_Map还是可以的.

//  TestHaspMap.cpp : Defines the entry point for the console application.
//

#include 
" stdafx.h "
#include 
" ACE/Basic_Types.h "
#include 
" ACE/Map_Manager.h "
#include 
" ACE/SString.h "
#include 
" ACE/Log_Msg.h "
#include 
" ACE/Null_Mutex.h "

class  PhoneNumber
{
public :
    PhoneNumber(
const   char *  number):number_(number)
    {

    }
     const   char *  getNumber( void )
    {
        
return  number_.c_str();
    }
private :
    ACE_SString  number_; 
};

typedef ACE_UINT16 CONNECTION_ID;

typedef ACE_Null_Mutex MAP_MUTEX;

typedef ACE_Map_Manager < CONNECTION_ID,PhoneNumber * , MAP_MUTEX >
   CONNECTION_MAP;

typedef ACE_Map_Iterator < CONNECTION_ID, PhoneNumber * , MAP_MUTEX >
     CONNECTION_MAP_ITERATOR;

typedef ACE_Map_Entry < CONNECTION_ID, PhoneNumber *>
    CONNECTION_MAP_ENTRY;

typedef ACE_Map_Manager < CONNECTION_ID,CONNECTION_MAP * ,MAP_MUTEX >
     MAP_MAP;

typedef ACE_Map_Iterator < CONNECTION_ID, CONNECTION_MAP * , MAP_MUTEX >
MAP_MAP_ITERATOR;

typedef ACE_Map_Entry < CONNECTION_ID, CONNECTION_MAP *>
MAP_MAP_ENTRY;

int  ACE_TMAIN( int  argc, _TCHAR *  argv[])
{

    CONNECTION_MAP connection_map;
    PhoneNumber  me( " 13717928*** " );
    PhoneNumber  office(
" 010-82378*** " );

    PhoneNumber  home( " 13366686** " );
    
int  result  =   - 1 ;
    result 
=  connection_map.bind( 1 , & me);
     ACE_ASSERT(result 
==   0 );
    result 
=   connection_map.bind( 2 , & office);
    ACE_ASSERT(result 
==   0 );
    result 
=   connection_map.bind( 3 , & home);
    ACE_ASSERT(result 
==   0 );
    result 
=  connection_map.bind( 5 , & home);
    ACE_ASSERT(result 
==   0 );

    connection_map.unbind( 3 );
    CONNECTION_MAP_ITERATOR it(connection_map);
  
    
for  (CONNECTION_MAP_ENTRY  * =   0 ;
        it.next (i) 
!=   0 ;
        it.advance ())
    {
        PhoneNumber
*  phone  =  i -> int_id_;
        ACE_DEBUG((LM_INFO,ACE_TEXT(
" 连接号码 %d, 电话号码 %s/n " ),
            i
-> ext_id_,
            phone
-> getNumber()));
    }

   PhoneNumber *  any_phone  =   0 ;
   CONNECTION_ID any_id 
=   5 ;

    result  =  connection_map.find(any_id,any_phone);
   
if ( result  !=    - 1 )
   {
       ACE_DEBUG((LM_INFO,ACE_TEXT(
" 连接号码 %d, 电话号码 %s/n " ),
           any_id,
           any_phone
-> getNumber()));
   } 
   
else
   {
       ACE_DEBUG((LM_INFO,ACE_TEXT(
" 连接号码 %d, 电话号码 %s/n " ),
           any_id,
           
" not found. " ));
   }

   MAP_MAP map_map;
   map_map.bind( 1 , & connection_map);
   size_t n 
=  map_map.current_size();
   MAP_MAP_ITERATOR map_it(map_map);

    for  (MAP_MAP_ENTRY  * =   0 ;
       map_it.next (j) 
!=   0 ;
       map_it.advance ())
   {
       CONNECTION_MAP
*  cur_map  =  j -> int_id_;
        size_t count 
=  cur_map -> current_size();
         PhoneNumber
*  any_phone2  =   0 ;
         
if  (cur_map -> find( 2 ,any_phone2) !=- 1 )
         {
             ACE_DEBUG((LM_INFO,ACE_TEXT(
" 内部map中电话号码 %s/n " ),
                 any_phone2
-> getNumber()));
         }
   }

     return   0 ;
}
 

抱歉!评论已关闭.