00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 #ifndef ACE_STRATEGIES_T_H
00014 #define ACE_STRATEGIES_T_H
00015 
00016 #include  "ace/pre.h"
00017 
00018 #include "ace/Hash_Map_Manager_T.h"
00019 
00020 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00021 # pragma once
00022 #endif 
00023 
00024 #include "ace/Reactor.h"
00025 #include "ace/Thread_Manager.h"
00026 #include "ace/Connection_Recycling_Strategy.h"
00027 #include "ace/Refcountable.h"
00028 #include "ace/Hashable.h"
00029 #include "ace/Recyclable.h"
00030 #include "ace/Reverse_Lock_T.h"
00031 
00032 
00033 #define ACE_Refcounted_Hash_Recyclable ARHR
00034 
00035 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00036 
00037 class ACE_Service_Repository;
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 template<class SVC_HANDLER>
00049 class ACE_Recycling_Strategy
00050 {
00051 public:
00052 
00053   
00054   typedef typename SVC_HANDLER::addr_type    addr_type;
00055   typedef SVC_HANDLER                        handler_type;
00056   typedef typename SVC_HANDLER::stream_type  stream_type;
00057 
00058 
00059   virtual ~ACE_Recycling_Strategy (void);
00060 
00061 
00062 
00063   virtual int assign_recycler (SVC_HANDLER *svc_handler,
00064                                ACE_Connection_Recycling_Strategy *recycler,
00065                                const void *recycling_act);
00066 
00067 
00068   virtual int prepare_for_recycling (SVC_HANDLER *svc_handler);
00069 };
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082 
00083 template <class SVC_HANDLER>
00084 class ACE_Creation_Strategy
00085 {
00086 public:
00087 
00088   
00089   typedef typename SVC_HANDLER::addr_type    addr_type;
00090   typedef SVC_HANDLER                        handler_type;
00091   typedef typename SVC_HANDLER::stream_type  stream_type;
00092 
00093   
00094 
00095 
00096   ACE_Creation_Strategy (ACE_Thread_Manager * = 0,
00097                          ACE_Reactor * = ACE_Reactor::instance ());
00098 
00099 
00100 
00101   int open (ACE_Thread_Manager * = 0,
00102             ACE_Reactor * = ACE_Reactor::instance ());
00103 
00104   virtual ~ACE_Creation_Strategy (void);
00105 
00106   
00107 
00108 
00109 
00110 
00111 
00112 
00113   virtual int make_svc_handler (SVC_HANDLER *&sh);
00114 
00115 
00116   void dump (void) const;
00117 
00118 
00119   ACE_ALLOC_HOOK_DECLARE;
00120 
00121 protected:
00122 
00123   ACE_Thread_Manager *thr_mgr_;
00124 
00125 
00126   ACE_Reactor *reactor_;
00127 };
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 template <class SVC_HANDLER>
00141 class ACE_Singleton_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00142 {
00143 public:
00144 
00145   
00146   typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00147 
00148   
00149   ACE_Singleton_Strategy (SVC_HANDLER * = 0,
00150                           ACE_Thread_Manager * = 0);
00151   int open (SVC_HANDLER *,
00152             ACE_Thread_Manager * = 0);
00153   virtual ~ACE_Singleton_Strategy (void);
00154 
00155   
00156 
00157 
00158   virtual int make_svc_handler (SVC_HANDLER *&);
00159 
00160 
00161   void dump (void) const;
00162 
00163 
00164   ACE_ALLOC_HOOK_DECLARE;
00165 
00166 protected:
00167 
00168   SVC_HANDLER *svc_handler_;
00169 
00170 
00171   int delete_svc_handler_;
00172 };
00173 
00174 
00175 
00176 
00177 
00178 
00179 
00180 template <class SVC_HANDLER>
00181 class ACE_DLL_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00182 {
00183 public:
00184 
00185   
00186   typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00187 
00188   
00189 
00190 
00191   ACE_DLL_Strategy (void);
00192 
00193 
00194 
00195   ACE_DLL_Strategy (const ACE_TCHAR dll_name[],
00196                     const ACE_TCHAR factory_function[],
00197                     const ACE_TCHAR svc_name[],
00198                     ACE_Service_Repository *,
00199                     ACE_Thread_Manager * = 0);
00200 
00201 
00202 
00203   int open (const ACE_TCHAR dll_name[],
00204             const ACE_TCHAR factory_function[],
00205             const ACE_TCHAR svc_name[],
00206             ACE_Service_Repository *,
00207             ACE_Thread_Manager * = 0);
00208 
00209   
00210 
00211 
00212   virtual int make_svc_handler (SVC_HANDLER *&);
00213 
00214 
00215   void dump (void) const;
00216 
00217 
00218   ACE_ALLOC_HOOK_DECLARE;
00219 
00220 protected:
00221   typedef ACE_Creation_Strategy<SVC_HANDLER> inherited;
00222 
00223 
00224   ACE_TCHAR dll_name_[MAXPATHLEN + 1];
00225 
00226 
00227 
00228   ACE_TCHAR factory_function_[MAXPATHLEN + 1];
00229 
00230 
00231   ACE_TCHAR svc_name_[MAXNAMELEN + 1];
00232 
00233 
00234   ACE_Service_Repository *svc_rep_;
00235 };
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245 
00246 
00247 
00248 
00249 
00250 template <class SVC_HANDLER>
00251 class ACE_Concurrency_Strategy
00252 {
00253 public:
00254 
00255   
00256   typedef typename SVC_HANDLER::addr_type    addr_type;
00257   typedef SVC_HANDLER                        handler_type;
00258   typedef typename SVC_HANDLER::stream_type  stream_type;
00259 
00260 
00261   ACE_Concurrency_Strategy (int flags = 0);
00262 
00263   
00264 
00265 
00266 
00267 
00268 
00269 
00270   virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00271                                     void *arg = 0);
00272 
00273   virtual ~ACE_Concurrency_Strategy (void);
00274 
00275 
00276   void dump (void) const;
00277 
00278 
00279   ACE_ALLOC_HOOK_DECLARE;
00280 
00281 protected:
00282 
00283 
00284 
00285   int flags_;
00286 };
00287 
00288 
00289 
00290 
00291 
00292 
00293 
00294 
00295 
00296 
00297 
00298 template <class SVC_HANDLER>
00299 class ACE_Reactive_Strategy : public ACE_Concurrency_Strategy <SVC_HANDLER>
00300 {
00301 public:
00302 
00303   
00304   typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00305 
00306   
00307 
00308   ACE_Reactive_Strategy (int flags = 0);
00309 
00310 
00311   ACE_Reactive_Strategy (ACE_Reactor *reactor,
00312                          ACE_Reactor_Mask = ACE_Event_Handler::READ_MASK,
00313                          int flags = 0);
00314 
00315 
00316   virtual int open (ACE_Reactor *reactor,
00317                     ACE_Reactor_Mask = ACE_Event_Handler::READ_MASK,
00318                     int flags = 0);
00319 
00320 
00321   virtual ~ACE_Reactive_Strategy (void);
00322 
00323   
00324 
00325 
00326   virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00327                                     void *arg = 0);
00328 
00329 
00330   void dump (void) const;
00331 
00332 
00333   ACE_ALLOC_HOOK_DECLARE;
00334 
00335 protected:
00336   typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00337 
00338 
00339   ACE_Reactor *reactor_;
00340 
00341 
00342 
00343   ACE_Reactor_Mask mask_;
00344 };
00345 
00346 
00347 
00348 
00349 
00350 
00351 
00352 
00353 
00354 
00355 
00356 
00357 
00358 template <class SVC_HANDLER>
00359 class ACE_Thread_Strategy : public ACE_Concurrency_Strategy<SVC_HANDLER>
00360 {
00361 public:
00362 
00363   
00364   typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00365 
00366   
00367 
00368   ACE_Thread_Strategy (int flags = 0);
00369 
00370 
00371   ACE_Thread_Strategy (ACE_Thread_Manager *tm,
00372                        long thr_flags,
00373                        int n_threads = 1,
00374                        int flags = 0);
00375 
00376 
00377   virtual int open (ACE_Thread_Manager *tm,
00378                     long thr_flags,
00379                     int n_threads = 1,
00380                     int flags = 0);
00381 
00382   virtual ~ACE_Thread_Strategy (void);
00383 
00384   
00385 
00386 
00387 
00388 
00389 
00390 
00391   virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00392                                     void *arg = 0);
00393 
00394 
00395   void dump (void) const;
00396 
00397 
00398   ACE_ALLOC_HOOK_DECLARE;
00399 
00400 protected:
00401   typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00402 
00403 
00404   ACE_Thread_Manager *thr_mgr_;
00405 
00406 
00407   long thr_flags_;
00408 
00409 
00410   int n_threads_;
00411 };
00412 
00413 
00414 
00415 
00416 
00417 
00418 
00419 
00420 
00421 
00422 
00423 
00424 
00425 template <class SVC_HANDLER>
00426 class ACE_Process_Strategy : public ACE_Concurrency_Strategy<SVC_HANDLER>
00427 {
00428 public:
00429 
00430   
00431   typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00432 
00433   
00434 
00435 
00436 
00437   ACE_Process_Strategy (size_t n_processes = 1,
00438                         ACE_Event_Handler *acceptor = 0,
00439                         ACE_Reactor * = 0,
00440                         int avoid_zombies = 0);
00441 
00442 
00443 
00444   virtual int open (size_t n_processes = 1,
00445                     ACE_Event_Handler *acceptor = 0,
00446                     ACE_Reactor * = 0,
00447                     int avoid_zombies = 0);
00448 
00449   virtual ~ACE_Process_Strategy (void);
00450 
00451   
00452 
00453 
00454 
00455 
00456 
00457 
00458   virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00459                                     void *arg = 0);
00460 
00461 
00462   void dump (void) const;
00463 
00464 
00465   ACE_ALLOC_HOOK_DECLARE;
00466 
00467 protected:
00468   typedef ACE_Concurrency_Strategy<SVC_HANDLER> inherited;
00469 
00470 
00471   size_t n_processes_;
00472 
00473 
00474 
00475 
00476 
00477 
00478   ACE_Event_Handler *acceptor_;
00479 
00480 
00481 
00482 
00483 
00484 
00485   ACE_Reactor *reactor_;
00486 };
00487 
00488 
00489 
00490 
00491 
00492 
00493 
00494 
00495 
00496 
00497 template <class SVC_HANDLER, ACE_PEER_ACCEPTOR_1>
00498 class ACE_Accept_Strategy
00499 {
00500 public:
00501 
00502   
00503   typedef ACE_PEER_ACCEPTOR_ADDR             addr_type;
00504   typedef ACE_PEER_ACCEPTOR                  acceptor_type;
00505   typedef SVC_HANDLER                        handler_type;
00506   typedef typename SVC_HANDLER::stream_type  stream_type;
00507 
00508   
00509 
00510   ACE_Accept_Strategy (ACE_Reactor *reactor = ACE_Reactor::instance ());
00511 
00512 
00513   ACE_Accept_Strategy (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
00514                        int restart = 0,
00515                        ACE_Reactor *reactor = ACE_Reactor::instance ());
00516 
00517 
00518 
00519   virtual int open (const ACE_PEER_ACCEPTOR_ADDR &local_addr,
00520                     int reuse_addr = 0);
00521 
00522 
00523   virtual ACE_HANDLE get_handle (void) const;
00524 
00525 
00526   virtual ACE_PEER_ACCEPTOR &acceptor (void) const;
00527 
00528   virtual ~ACE_Accept_Strategy (void);
00529 
00530   
00531 
00532 
00533   virtual int accept_svc_handler (SVC_HANDLER *);
00534 
00535 
00536   void dump (void) const;
00537 
00538 
00539   ACE_ALLOC_HOOK_DECLARE;
00540 
00541 protected:
00542 
00543   ACE_PEER_ACCEPTOR peer_acceptor_;
00544 
00545 
00546   ACE_Reactor *reactor_;
00547 
00548 
00549   int reuse_addr_;
00550 
00551 
00552   ACE_PEER_ACCEPTOR_ADDR peer_acceptor_addr_;
00553 };
00554 
00555 
00556 
00557 
00558 
00559 
00560 
00561 
00562 
00563 
00564 template <class SVC_HANDLER, ACE_PEER_CONNECTOR_1>
00565 class ACE_Connect_Strategy
00566 {
00567 public:
00568 
00569   
00570   typedef ACE_PEER_CONNECTOR_ADDR            addr_type;
00571   typedef ACE_PEER_CONNECTOR                 connector_type;
00572   typedef SVC_HANDLER                        handler_type;
00573   typedef typename SVC_HANDLER::stream_type  stream_type;
00574 
00575   
00576 
00577   ACE_Connect_Strategy (void);
00578 
00579 
00580   virtual ACE_PEER_CONNECTOR &connector (void) const;
00581 
00582   virtual ~ACE_Connect_Strategy (void);
00583 
00584   
00585 
00586 
00587   virtual int connect_svc_handler (SVC_HANDLER *&sh,
00588                                    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00589                                    ACE_Time_Value *timeout,
00590                                    const ACE_PEER_CONNECTOR_ADDR &local_addr,
00591                                    int reuse_addr,
00592                                    int flags,
00593                                    int perms);
00594 
00595 
00596 
00597 
00598 
00599 
00600   virtual int connect_svc_handler (SVC_HANDLER *&sh,
00601                                    SVC_HANDLER *&sh_copy,
00602                                    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00603                                    ACE_Time_Value *timeout,
00604                                    const ACE_PEER_CONNECTOR_ADDR &local_addr,
00605                                    int reuse_addr,
00606                                    int flags,
00607                                    int perms);
00608 
00609 
00610   void dump (void) const;
00611 
00612 
00613   ACE_ALLOC_HOOK_DECLARE;
00614 
00615 protected:
00616 
00617   ACE_PEER_CONNECTOR connector_;
00618 };
00619 
00620 
00621 
00622 
00623 
00624 
00625 
00626 
00627 
00628 
00629 
00630 template <class SVC_HANDLER>
00631 class ACE_Scheduling_Strategy
00632 {
00633 public:
00634 
00635   
00636   typedef typename SVC_HANDLER::addr_type    addr_type;
00637   typedef SVC_HANDLER                        handler_type;
00638   typedef typename SVC_HANDLER::stream_type  stream_type;
00639 
00640   
00641 
00642 
00643   ACE_Scheduling_Strategy (SVC_HANDLER * = 0);
00644 
00645 
00646   virtual ~ACE_Scheduling_Strategy (void);
00647 
00648   
00649 
00650 
00651   virtual int suspend (void);
00652 
00653 
00654   virtual int resume (void);
00655 
00656 
00657   virtual void dump (void) const;
00658 };
00659 
00660 
00661 
00662 
00663 
00664 
00665 
00666 
00667 
00668 
00669 template <class SVC_HANDLER>
00670 class ACE_Schedule_All_Reactive_Strategy
00671   : public ACE_Scheduling_Strategy<SVC_HANDLER>
00672 {
00673 public:
00674 
00675   
00676   typedef ACE_Scheduling_Strategy<SVC_HANDLER> base_type;
00677 
00678   
00679 
00680   ACE_Schedule_All_Reactive_Strategy (SVC_HANDLER * = 0);
00681 
00682   
00683 
00684 
00685   virtual int suspend (void);
00686 
00687 
00688   virtual int resume (void);
00689 
00690 
00691   virtual void dump (void) const;
00692 
00693 protected:
00694 
00695 
00696   ACE_Reactor *reactor_;
00697 };
00698 
00699 
00700 
00701 
00702 
00703 
00704 
00705 
00706 
00707 
00708 template <class SVC_HANDLER>
00709 class ACE_Schedule_All_Threaded_Strategy
00710   : public ACE_Scheduling_Strategy<SVC_HANDLER>
00711 {
00712 public:
00713 
00714   
00715   typedef ACE_Scheduling_Strategy<SVC_HANDLER> base_type;
00716 
00717   
00718 
00719   ACE_Schedule_All_Threaded_Strategy (SVC_HANDLER * = 0);
00720 
00721   
00722 
00723 
00724   virtual int suspend (void);
00725 
00726 
00727   virtual int resume (void);
00728 
00729 
00730   virtual void dump (void) const;
00731 
00732 protected:
00733 
00734 
00735   ACE_Thread_Manager *thr_mgr_;
00736 };
00737 
00738 
00739 
00740 
00741 
00742 
00743 
00744 
00745 
00746 
00747 
00748 
00749 template <class SVC_HANDLER>
00750 class ACE_NOOP_Creation_Strategy : public ACE_Creation_Strategy<SVC_HANDLER>
00751 {
00752 public:
00753 
00754   
00755   typedef ACE_Creation_Strategy<SVC_HANDLER> base_type;
00756 
00757 
00758   virtual int make_svc_handler (SVC_HANDLER *&);
00759 };
00760 
00761 
00762 
00763 
00764 
00765 
00766 
00767 
00768 
00769 
00770 
00771 
00772 template <class SVC_HANDLER>
00773 class ACE_NOOP_Concurrency_Strategy
00774   : public ACE_Concurrency_Strategy<SVC_HANDLER>
00775 {
00776 public:
00777 
00778   
00779   typedef ACE_Concurrency_Strategy<SVC_HANDLER> base_type;
00780 
00781   
00782 
00783   virtual int activate_svc_handler (SVC_HANDLER *svc_handler,
00784                                     void *arg = 0);
00785 };
00786 
00787 template <class T>
00788 class ACE_Refcounted_Hash_Recyclable :  public ACE_Refcountable,
00789                                         public ACE_Hashable,
00790                                         public ACE_Recyclable
00791 {
00792 public:
00793 
00794   ACE_Refcounted_Hash_Recyclable (void);
00795 
00796 
00797   ACE_Refcounted_Hash_Recyclable (const T &t,
00798                                   int refcount = 0,
00799                                   ACE_Recyclable_State state = ACE_RECYCLABLE_UNKNOWN);
00800 
00801 
00802   virtual ~ACE_Refcounted_Hash_Recyclable (void);
00803 
00804 
00805   bool operator== (const ACE_Refcounted_Hash_Recyclable<T> &rhs) const;
00806   bool operator!= (const ACE_Refcounted_Hash_Recyclable<T> &rhs) const;
00807 
00808   T &subject ();
00809 
00810 protected:
00811 
00812   u_long hash_i (void) const;
00813 
00814   T t_;
00815 };
00816 
00817 
00818 
00819 
00820 
00821 
00822 
00823 
00824 
00825 
00826 
00827 
00828 template <class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX>
00829 class ACE_Cached_Connect_Strategy
00830   : public ACE_Connection_Recycling_Strategy,
00831     public ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00832 {
00833 public:
00834 
00835   
00836   typedef ACE_Creation_Strategy<SVC_HANDLER>
00837           creation_strategy_type;
00838   typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00839           connect_strategy_type;
00840   typedef ACE_Concurrency_Strategy<SVC_HANDLER>
00841           concurrency_strategy_type;
00842   typedef ACE_Recycling_Strategy<SVC_HANDLER> recycling_strategy_type;
00843 
00844   
00845   typedef ACE_Creation_Strategy<SVC_HANDLER>
00846           CREATION_STRATEGY;
00847   typedef ACE_Concurrency_Strategy<SVC_HANDLER>
00848           CONCURRENCY_STRATEGY;
00849   typedef ACE_Recycling_Strategy<SVC_HANDLER>
00850           RECYCLING_STRATEGY;
00851 
00852   
00853   typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
00854           CONNECT_STRATEGY;
00855 
00856 
00857   typedef ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX> SELF;
00858 
00859 
00860   ACE_Cached_Connect_Strategy (ACE_Creation_Strategy<SVC_HANDLER> *cre_s = 0,
00861                                ACE_Concurrency_Strategy<SVC_HANDLER> *con_s = 0,
00862                                ACE_Recycling_Strategy<SVC_HANDLER> *rec_s = 0,
00863                                MUTEX *mutex = 0,
00864                                int delete_mutex = 0);
00865 
00866 
00867   virtual ~ACE_Cached_Connect_Strategy (void);
00868 
00869 
00870 
00871   virtual int open (ACE_Creation_Strategy<SVC_HANDLER> *cre_s,
00872                     ACE_Concurrency_Strategy<SVC_HANDLER> *con_s,
00873                     ACE_Recycling_Strategy<SVC_HANDLER> *rec_s);
00874 
00875 
00876   virtual int make_svc_handler (SVC_HANDLER *&sh);
00877 
00878 
00879   virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
00880 
00881 
00882 
00883   virtual int assign_recycler (SVC_HANDLER *svc_handler,
00884                                ACE_Connection_Recycling_Strategy *recycler,
00885                                const void *recycling_act);
00886 
00887 
00888   virtual int prepare_for_recycling (SVC_HANDLER *svc_handler);
00889 
00890 
00891 
00892 
00893 
00894 
00895 
00896 
00897 
00898 
00899 
00900 
00901 
00902 
00903 
00904   virtual int connect_svc_handler (SVC_HANDLER *&sh,
00905                                    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00906                                    ACE_Time_Value *timeout,
00907                                    const ACE_PEER_CONNECTOR_ADDR &local_addr,
00908                                    int reuse_addr,
00909                                    int flags,
00910                                    int perms);
00911   virtual int connect_svc_handler (SVC_HANDLER *&sh,
00912                                    SVC_HANDLER *&sh_copy,
00913                                    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00914                                    ACE_Time_Value *timeout,
00915                                    const ACE_PEER_CONNECTOR_ADDR &local_addr,
00916                                    int reuse_addr,
00917                                    int flags,
00918                                    int perms);
00919 
00920 
00921   virtual int purge (const void *recycling_act);
00922 
00923 
00924   virtual int cache (const void *recycling_act);
00925 
00926 
00927   virtual int recycle_state (const void *recycling_act,
00928                              ACE_Recyclable_State new_state);
00929   virtual ACE_Recyclable_State recycle_state (const void *recycling_act) const;
00930 
00931 
00932   virtual int mark_as_closed (const void *recycling_act);
00933 
00934 
00935 
00936 
00937 
00938 
00939   virtual int mark_as_closed_i (const void *recycling_act);
00940 
00941 
00942   virtual int cleanup_hint (const void *recycling_act,
00943                             void **act_holder = 0);
00944 
00945   
00946   typedef ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>
00947           REFCOUNTED_HASH_RECYCLABLE_ADDRESS;
00948   typedef ACE_Hash_Map_Manager_Ex<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Hash<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Equal_To<REFCOUNTED_HASH_RECYCLABLE_ADDRESS>, ACE_Null_Mutex>
00949           CONNECTION_MAP;
00950 
00951   typedef typename CONNECTION_MAP::ITERATOR CONNECTION_MAP_ITERATOR;
00952   typedef typename CONNECTION_MAP::ENTRY CONNECTION_MAP_ENTRY;
00953 
00954   typedef ACE_Reverse_Lock<MUTEX> REVERSE_MUTEX;
00955 
00956   
00957   virtual ACE_Creation_Strategy<SVC_HANDLER> *creation_strategy (void) const;
00958   virtual ACE_Recycling_Strategy<SVC_HANDLER> *recycling_strategy (void) const;
00959   virtual ACE_Concurrency_Strategy<SVC_HANDLER> *concurrency_strategy (void) const;
00960 
00961 protected:
00962 
00963 
00964   virtual int new_connection (SVC_HANDLER *&sh,
00965                               const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00966                               ACE_Time_Value *timeout,
00967                               const ACE_PEER_CONNECTOR_ADDR &local_addr,
00968                               int reuse_addr,
00969                               int flags,
00970                               int perms);
00971 
00972 
00973   int find (REFCOUNTED_HASH_RECYCLABLE_ADDRESS &search_addr,
00974             CONNECTION_MAP_ENTRY *&entry);
00975 
00976 
00977   virtual int purge_i (const void *recycling_act);
00978 
00979 
00980   virtual int cache_i (const void *recycling_act);
00981 
00982 
00983   virtual int recycle_state_i (const void *recycling_act,
00984                                ACE_Recyclable_State new_state);
00985 
00986 
00987   virtual ACE_Recyclable_State recycle_state_i (const void *recycling_act) const;
00988 
00989 
00990   virtual int cleanup_hint_i (const void *recycling_act,
00991                               void **act_holder);
00992 
00993   
00994   int check_hint_i (SVC_HANDLER *&sh,
00995                     const ACE_PEER_CONNECTOR_ADDR &remote_addr,
00996                     ACE_Time_Value *timeout,
00997                     const ACE_PEER_CONNECTOR_ADDR &local_addr,
00998                     int reuse_addr,
00999                     int flags,
01000                     int perms,
01001                     CONNECTION_MAP_ENTRY *&entry,
01002                     int &found);
01003 
01004   int find_or_create_svc_handler_i (SVC_HANDLER *&sh,
01005                                     const ACE_PEER_CONNECTOR_ADDR &remote_addr,
01006                                     ACE_Time_Value *timeout,
01007                                     const ACE_PEER_CONNECTOR_ADDR &local_addr,
01008                                     int reuse_addr,
01009                                     int flags,
01010                                     int perms,
01011                                     CONNECTION_MAP_ENTRY *&entry,
01012                                     int &found);
01013 
01014   virtual int connect_svc_handler_i (
01015     SVC_HANDLER *&sh,
01016     const ACE_PEER_CONNECTOR_ADDR &remote_addr,
01017     ACE_Time_Value *timeout,
01018     const ACE_PEER_CONNECTOR_ADDR &local_addr,
01019     int reuse_addr,
01020     int flags,
01021     int perms,
01022     int &found);
01023 
01024 
01025   CONNECTION_MAP connection_map_;
01026 
01027 
01028   MUTEX *lock_;
01029 
01030 
01031   int delete_lock_;
01032 
01033 
01034   REVERSE_MUTEX *reverse_lock_;
01035 
01036   
01037 
01038 
01039   CREATION_STRATEGY *creation_strategy_;
01040 
01041 
01042 
01043   int delete_creation_strategy_;
01044 
01045 
01046   CONCURRENCY_STRATEGY *concurrency_strategy_;
01047 
01048 
01049 
01050   int delete_concurrency_strategy_;
01051 
01052 
01053   RECYCLING_STRATEGY *recycling_strategy_;
01054 
01055 
01056 
01057   int delete_recycling_strategy_;
01058 };
01059 
01060 ACE_END_VERSIONED_NAMESPACE_DECL
01061 
01062 #if defined (__ACE_INLINE__)
01063 #include "ace/Strategies_T.inl"
01064 #endif 
01065 
01066 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
01067 #include "ace/Strategies_T.cpp"
01068 #endif 
01069 
01070 #if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
01071 #pragma implementation ("Strategies_T.cpp")
01072 #endif 
01073 
01074 #include  "ace/post.h"
01075 
01076 #endif