`
pleasetojava
  • 浏览: 704840 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ACE_Hash_Map的使用示例

阅读更多

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

// TestHaspMap.cpp:Definestheentrypointfortheconsoleapplication.
//

#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_SStringnumber_;
};



typedefACE_UINT16CONNECTION_ID;

typedefACE_Null_MutexMAP_MUTEX;

typedefACE_Map_Manager
< CONNECTION_ID,PhoneNumber * ,MAP_MUTEX >
CONNECTION_MAP;

typedefACE_Map_Iterator
< CONNECTION_ID,PhoneNumber * ,MAP_MUTEX >
CONNECTION_MAP_ITERATOR;

typedefACE_Map_Entry
< CONNECTION_ID,PhoneNumber *>
CONNECTION_MAP_ENTRY;

typedefACE_Map_Manager
< CONNECTION_ID,CONNECTION_MAP * ,MAP_MUTEX >
MAP_MAP;

typedefACE_Map_Iterator
< CONNECTION_ID,CONNECTION_MAP * ,MAP_MUTEX >
MAP_MAP_ITERATOR;

typedefACE_Map_Entry
< CONNECTION_ID,CONNECTION_MAP *>
MAP_MAP_ENTRY;


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


CONNECTION_MAPconnection_map;
PhoneNumberme(
" 13717928*** " );
PhoneNumberoffice(
" 010-82378*** " );

PhoneNumberhome(
" 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_ITERATORit(connection_map);

for (CONNECTION_MAP_ENTRY * i = 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_IDany_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,
" notfound. " ));
}

MAP_MAPmap_map;
map_map.bind(
1 , & connection_map);
size_tn
= map_map.current_size();
MAP_MAP_ITERATORmap_it(map_map);

for (MAP_MAP_ENTRY * j = 0 ;
map_it.next(j)
!= 0 ;
map_it.advance())
{
CONNECTION_MAP
* cur_map = j -> int_id_;
size_tcount
= 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 ;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics