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