hongdou999 发表于 2008-5-6 17:24:18

ACE的源码划分和library subsetting

来源:http://www.blogbus.com/blogbus/blog/index.php?blogid=13010
ACE的源码划分和library subsetting

前几篇文章也提到过,ACE的所有源文件和头文件都杂乱堆在了ACE_wrappers/ace目录下。这样的代码组织方式给学习ACE带来了很大的困难,很多朋友在看到ace目录下庞大的代码的时候,几乎就失去了学习ACE的信心^_^。因此,我们有必要对ACE的代码进行重新组织,以降低学习曲线。下面,我将给出我对ACE源码的划分方法。其实,我也是刚学习ACE没有多久,对ACE的了解还甚少,所以,我的源码划方式法不一定十分正确,这里共享出来,仅供大家参考。
其实,在ACE的帮助文档里,ACE-subsets.html和ACE-categories.html,这两个文档对指导ACE的源码划分起到了很大的作用,否则,我刚刚接触ACE,就想对其进行源码划分,是不可能完成的。
ACE-subsets.html,这个文档主要介绍了ACE的library subsetting。正常情况下,在编译完ACE后,只会产生一个ACE的库。我们可以根据该文档的介绍,简单的修改一下Makefile,就可以对ACE的库进行子集化,我们可以编译出OS、Thread等这样的子库。
ACE-categories.html,这个文档对ACE中的代码进行了一些功能上的分类。具体大家可以详细的参考一下这两个文档,这两个文档对学习ACE还是有一定的帮助的。
在ACE的源代码目录ace下,我将建立很多子目录,来对ACE的代码进行按功能分类:

ACE_OS:该目录里包含的代码是OS的API的wrapper,也就是ACE的OS适配层;
包含代码:
ARGV.cpp         OS_Memory.cpp
Argv_Type_Converter.cpp   OS_QoS.cpp
Base_Thread_Adapter.cpp   OS_String.cpp
Basic_Types.cpp             OS_TLI.cpp
Copy_Disabled.cpp         OS_Thread_Adapter.cpp
Env_Value_T.cpp             Sched_Params.cpp
Handle_Set.cpp         Template_Instantiations.cpp
Makefile                  Thread_Hook.cpp
OS.cpp                      Time_Value.cpp
OS_Dirent.cpp               
OS_Errno.cpp                  
OS_Log_Msg_Attributes.cpp
ACE_Codec:该目录包含的是ACE的各种编码类型的处理代码,目前只包含了BASE64编码的处理;
    包含代码:Codecs.cpp   Makefile

ACE_Connection:该目录包含的是ACE中的Acceptor-Connector框架代码和异步通讯类代码;
包含代码:Acceptor.cpp         Connector.cpp
   Asynch_Acceptor.cpp             Makefile
   Asynch_Connector.cpp      POSIX_Asynch_IO.cpp
   Asynch_IO.cpp                   Strategies_T.cpp
   Asynch_IO_Impl.cpp            Svc_Handler.cpp
   Asynch_Pseudo_Task.cpp      WIN32_Asynch_IO.cpp
   Cached_Connect_Strategy_T.cpp   
   Caching_Strategies_T.cpp      
ACE_Demux:该目录包含的是ACE中的Reactor和Proactor框架代码;
    包含代码:Dev_Poll_Reactor.cpp   Priority_Reactor.cpp      TP_Reactor.cpp      Event_Handler.cpp         Proactor.cpp            TkReactor.cpp
Event_Handler_T.cpp       QtReactor.cpp             WFMO_Reactor.cpp
FlReactor.cpp            Reactor.cpp               WIN32_Proactor.cpp
Makefile                  SUN_Proactor.cpp          XtReactor.cpp
Msg_WFMO_Reactor.cpp      Select_Reactor.cpp      
POSIX_CB_Proactor.cpp   Select_Reactor_Base.cpp   
POSIX_Proactor.cpp      Select_Reactor_T.cpp
ACE_IPC:该目录包含的是ACE中进程间通讯的一些封装代码:
包含代码:ATM_Acceptor.cpp             Makefile
ATM_Addr.cpp               Pipe.cpp
ATM_Connector.cpp            SPIPE.cpp
ATM_Params.cpp               SPIPE_Acceptor.cpp
ATM_QoS.cpp                  SPIPE_Addr.cpp
ATM_Stream.cpp               SPIPE_Connector.cpp
DEV.cpp                      SPIPE_Stream.cpp
DEV_Addr.cpp               SV_Message.cpp
DEV_Connector.cpp            SV_Message_Queue.cpp
DEV_IO.cpp                   SV_Semaphore_Complex.cpp
FIFO.cpp                     SV_Semaphore_Simple.cpp
FIFO_Recv.cpp                SV_Shared_Memory.cpp
FIFO_Recv_Msg.cpp            Signal.cpp
FIFO_Send.cpp                TLI.cpp
FIFO_Send_Msg.cpp            TLI_Acceptor.cpp
FILE.cpp                     TLI_Connector.cpp
FILE_Addr.cpp                TLI_Stream.cpp
FILE_Connector.cpp         TTY_IO.cpp
FILE_IO.cpp                  Typed_SV_Message.cpp
IOStream.cpp               Typed_SV_Message_Queue.cpp
IOStream_T.cpp               UNIX_Addr.cpp
IO_SAP.cpp                   UPIPE_Acceptor.cpp
MEM_Acceptor.cpp             UPIPE_Connector.cpp
MEM_Addr.cpp               UPIPE_Stream.cpp
MEM_Connector.cpp            XTI_ATM_Mcast.cpp
MEM_IO.cpp                  
MEM_SAP.cpp                  
MEM_Stream.cpp
ACE_LIB:该目录将包含ACE编译好的各个子库;
ACE_Logging:该目录包含ACE中的日志处理相关代码;
       包含代码:Dump.cpp                   Log_Msg_UNIX_Syslog.cpp
Dump_T.cpp               Log_Record.cpp
Log_Msg.cpp                Logging_Strategy.cpp
Log_Msg_Backend.cpp      Makefile
Log_Msg_Callback.cpp       Trace.cpp
Log_Msg_IPC.cpp            
Log_Msg_NT_Event_Log.cpp   
ACE_Memory:该目录包含了ACE内存处理相关代码;
   包含代码:Based_Pointer_Repository.cpp   Obstack.cpp
Based_Pointer_T.cpp            Obstack_T.cpp
Makefile                     PI_Malloc.cpp
Malloc.cpp                     Read_Buffer.cpp
Malloc_Allocator.cpp         Shared_Memory.cpp
Malloc_Instantiations.cpp      Shared_Memory_MM.cpp
Malloc_T.cpp                   Shared_Memory_SV.cpp
Mem_Map.cpp                  
Memory_Pool.cpp               
Obchunk.cpp
ACE_Misc:ACE中一些没有明确功能分类的代码,属于杂项;
   包含代码:CE_Screen_Output.cpp   NT_Service.cpp
Makefile               gethrtime.cpp
ACE_Nameservices:该目录包含了ACE中名字服务相关代码;
    包含代码: Name_Space.cpp
   Local_Name_Space.cpp         Naming_Context.cpp
   Local_Name_Space_T.cpp         Registry_Name_Space.cpp
   Makefile                     Remote_Name_Space.cpp
   Name_Proxy.cpp               
   Name_Request_Reply.cpp         
ACE_Sockets:该目录包含的是ACE的socket封装代码;
      包含代码:Addr.cpp                     SOCK_CODgram.cpp
INET_Addr.cpp                  SOCK_Connector.cpp
IPC_SAP.cpp                  SOCK_Dgram.cpp
LOCK_SOCK_Acceptor.cpp         SOCK_Dgram_Bcast.cpp
LSOCK.cpp                      SOCK_Dgram_Mcast.cpp
LSOCK_Acceptor.cpp             SOCK_IO.cpp
LSOCK_CODgram.cpp            SOCK_SEQPACK_Acceptor.cpp
LSOCK_Connector.cpp            SOCK_SEQPACK_Association.cpp
LSOCK_Dgram.cpp                SOCK_SEQPACK_Connector.cpp
LSOCK_Stream.cpp               SOCK_Stream.cpp
Makefile                     Sock_Connect.cpp
Multihomed_INET_Addr.cpp      
SOCK.cpp                     
SOCK_Acceptor.cpp
ACE_Streams:该目录包含了ACE中的Streams和Task框架代码;
      包含代码:CDR_Base.cpp                        Module.cpp
CDR_Stream.cpp                      Multiplexor.cpp
Codeset_IBM1047.cpp               Reactor_Notification_Strategy.cpp
Codeset_Registry.cpp                Stream.cpp
Codeset_Registry_db.cpp             Stream_Modules.cpp
IO_Cntl_Msg.cpp                     Task.cpp
Makefile                            Task_T.cpp
Message_Queue.cpp                  
Message_Queue_T.cpp   
ACE_Svcconf:该目录包含了ACE中的Service Configurator框架代码;
      包含代码:DLL.cpp                  Service_Types.cpp
DLL_Manager.cpp            Shared_Object.cpp
Dynamic_Service.cpp      Svc_Conf.l
Dynamic_Service_Base.cpp   Svc_Conf.y
Makefile                   Svc_Conf_Lexer_Guard.cpp
Parse_Node.cpp             Svc_Conf_l.cpp
Service_Config.cpp         Svc_Conf_y.cpp
Service_Manager.cpp      XML_Svc_Conf.cpp
Service_Object.cpp         
Service_Repository.cpp   
Service_Templates.cpp
ACE_Threads:该目录包含了ACE中的线程和同步机制相关代码,例如:thread manager;
      包含代码:Activation_Queue.cpp      Process_Manager.cpp       Thread.cpp
Atomic_Op.cpp             Process_Mutex.cpp         Thread_Adapter.cpp
Atomic_Op_T.cpp         Process_Semaphore.cpp   Thread_Control.cpp
File_Lock.cpp             RW_Process_Mutex.cpp      Thread_Exit.cpp
Future.cpp                Synch.cpp               Thread_Manager.cpp
Future_Set.cpp            Synch_Options.cpp         Token.cpp
Makefile                  Synch_T.cpp               
Process.cpp               Test_and_Set.cpp         
ACE_Timer:该目录包含ACE中和时间相关的代码;
   包含代码:Timer_Heap.cpp
Basic_Stats.cpp            Timer_Heap_T.cpp
High_Res_Timer.cpp         Timer_List.cpp
Makefile                   Timer_List_T.cpp
Profile_Timer.cpp          Timer_Queue.cpp
System_Time.cpp            Timer_Queue_Adapters.cpp
Time_Request_Reply.cpp   Timer_Queue_T.cpp
Timeprobe.cpp            Timer_Wheel.cpp
Timeprobe_T.cpp            Timer_Wheel_T.cpp
Timer_Hash.cpp            
Timer_Hash_T.cpp         
ACE_Token:Token是ACE中实现的一种同步机制,保证严格的FIFO或LIFO策略来获得锁。ACE通过Token机制实现了分布式同步机制。
   包含代码:Local_Tokens.cpp          Token_Collection.cpp      Token_Request_Reply.cpp
Makefile                  Token_Invariants.cpp      
Remote_Tokens.cpp         Token_Manager.cpp         
ACE_Utils:ACE中的一些基础数据结构和算法的工具类代码;
    包含代码:ACE.cpp                           Init_ACE.cpp
Active_Map_Manager.cpp            Intrusive_List.cpp
Active_Map_Manager_T.cpp            Intrusive_List_Node.cpp
Arg_Shifter.cpp                     Lib_Find.cpp
Array_Base.cpp                      Makefile
Auto_IncDec_T.cpp                   Managed_Object.cpp
Auto_Ptr.cpp                        Map.cpp
Cache_Map_Manager_T.cpp             Map_Manager.cpp
Caching_Utility_T.cpp               Map_T.cpp
Capabilities.cpp                  Message_Block.cpp
Cleanup_Strategies_T.cpp            Message_Block_T.cpp
Configuration.cpp                   Method_Request.cpp
Configuration_Import_Export.cpp   Node.cpp
Connection_Recycling_Strategy.cpp   Notification_Strategy.cpp
Containers.cpp                      Object_Manager.cpp
Containers_T.cpp                  Pair.cpp
Date_Time.cpp                     Pair_T.cpp
Dirent.cpp                        RB_Tree.cpp
Dirent_Selector.cpp               Recyclable.cpp
Dynamic.cpp                         Refcountable.cpp
Filecache.cpp                     Registry.cpp
Flag_Manip.cpp                      SString.cpp
Framework_Component.cpp             Sample_History.cpp
Framework_Component_T.cpp         Singleton.cpp
Free_List.cpp                     Stats.cpp
Functor.cpp                         String_Base.cpp
Functor_T.cpp                     String_Base_Const.cpp
Get_Opt.cpp                         Swap.cpp
Handle_Ops.cpp                      Unbounded_Queue.cpp
Hash_Cache_Map_Manager_T.cpp      Unbounded_Set.cpp
Hash_Map_Manager.cpp                Unbounded_Set_Ex.cpp
Hash_Map_Manager_T.cpp            Vector_T.cpp
Hash_Map_With_Allocator_T.cpp      
Hashable.cpp                        
include:该目录又包含子目录ace,也就是说include/ace/目录下,包含了ACE的所有头文件和.i文件,之所以这样组织,是因为ACE中的源 文件和头文件的包含文件的方式为:#include "ace/OS.h",所以采用这种目录结构方式来存放头文件和.i文件。这里,对头文件和.i文件,没有进一步按照功能划分,就是因为#include "ace/OS.h"这种包含方式,如果头文件和.i文件也按照功能划分,那么代码修改 量相当大;
            
通过上面给出的目录结构和源文件功能划分及头文件组织方式,相信读者以可以自行对ACE代码进行整理了。在实际整理和编译代码的过程中,需要修改Makefile和ACE头文件中以_T方式为后缀的头文件,例如:Obstack_T.h,需要修改里面模板源文件包含路径。我将在下一篇文章中进行描述。
我再次强调,上面ACE源码划分方式,不一定十分正确^_^,随着我们ACE学习和理解的深入,我们可能会进行更改。其实,在我们整理ACE源文件的时候,我们可以进一步了解ACE的各个源文件大致功能,对我们以后更深入的学习大有裨益。

winston 发表于 2008-5-6 17:34:06

不错。可以尝试一下。
不过,一般做软件的时候,除非内存等硬件受限,否则尺寸问题,不是太大问题,所以这个事情,关心的人不多。
只要充分了解了ACE,不划分一样玩得转。

kentg 发表于 2008-5-10 13:34:15

代码划分可以很好的帮助理解其内部结构,

也有利于开发时对各种问题的处理,

所以对开发还是很有意义的。

顶一下!
页: [1]
查看完整版本: ACE的源码划分和library subsetting