CMGDK r49-rc2
K:/CMGDKv18/SDK/Include/hgl/type/Pool.H
浏览该文件的文档。
00001 # i f n d e f   H G L _ P O O L _ I N C L U D E 
00002  
00003  # d e f i n e   H G L _ P O O L _ I N C L U D E 
00004  
00005  
00006  
00007  # i n c l u d e < h g l / t y p e / L i s t . H > 
00008  
00009  # i n c l u d e < h g l / t y p e / Q u e u e . H > 
00010  
00011  # i n c l u d e < h g l / t h r e a d / R W L o c k . H > 
00012  
00013  # i n c l u d e < h g l / t y p e / S t a c k . H > 
00014  
00015  # i n c l u d e < h g l / t y p e / O n l y L i s t . H > 
00016  
00017  # i n c l u d e < h g l / t y p e / I n d e x D a t a . H > 
00018  
00019  n a m e s p a c e   h g l 
00020  
00021  { 
00022  
00023      / * * 
00024  
00025      *   penc`l!jg(uN{N$N*NR N*N(W(uv N*Nzzv
00026  
00027      * / 
00028  
00029      t e m p l a t e < t y p e n a m e   T >   c l a s s   P o o l                                                                   / / / penc`l
00030  
00031      { 
00032  
00033      p r o t e c t e d : 
00034  
00035  
00036  
00037          L i s t < T >   A c t i v e ; 
00038  
00039          Q u e u e < T >   I n a c t i v e ; 
00040  
00041  
00042  
00043          i n t   c o u n t ; 
00044  
00045          i n t   h i s t o r y _ m a x ; 
00046  
00047  
00048  
00049      p r o t e c t e d : 
00050  
00051  
00052  
00053          v i r t u a l   i n t   G e t A c t i v e C o u n t ( )     { r e t u r n   A c t i v e . C o u n t ;   } 
00054  
00055          v i r t u a l   i n t   G e t I n a c t i v e C o u n t ( )     { r e t u r n   I n a c t i v e . C o u n t ;   } 
00056  
00057          v i r t u a l   i n t   G e t H i s t o r y M a x C o u n t ( ) { r e t u r n   h i s t o r y _ m a x ;     } 
00058  
00059  
00060  
00061          v o i d   I n i t P r i v a t e ( ) ; 
00062  
00063  
00064  
00065      p r o t e c t e d : 
00066  
00067  
00068  
00069          v i r t u a l   T   C r e a t e ( ) = 0 ;                                                                       / / / < R^penc
00070  
00071          v i r t u a l   v o i d   C l e a r ( T ) = 0 ;                                                                     / / / < ndpenc
00072  
00073  
00074  
00075      p u b l i c :   / / ^\'`
00076  
00077  
00078  
00079          P r o p e r t y < i n t >   A c t i v e C o u n t ;                                                                     / / / < ;mRpencpeϑ
00080  
00081          P r o p e r t y < i n t >   I n a c t i v e C o u n t ;                                                                 / / / < ^;mRpencpeϑ
00082  
00083          P r o p e r t y < i n t >   H i s t o r y M a x C o u n t ;                                                                 / / / < SS'` g'Ypencpeϑ
00084  
00085  
00086  
00087      p u b l i c : 
00088  
00089  
00090  
00091          P o o l ( ) { c o u n t = 0 ; h i s t o r y _ m a x = 0 ; I n i t P r i v a t e ( ) ; } 
00092  
00093          v i r t u a l   ~ P o o l ( ) { } 
00094  
00095  
00096  
00097          v i r t u a l   T       A c q u i r e ( ) ;                                                                     / / / < 3u N*Npenc
00098  
00099          v i r t u a l   v o i d     A p p e n d ( T ) ;                                                                     / / / < mR N*Npenc
00100  
00101          v i r t u a l   b o o l     R e l e a s e ( T ) ;                                                                   / / / < ʑ>e N*Npenc
00102  
00103  
00104  
00105          v i r t u a l   v o i d     C l e a r I n a c t i v e ( ) ;                                                             / / / < nd@b gzzv
00106  
00107          v i r t u a l   v o i d     C l e a r A l l ( ) ;                                                                   / / / < nd@b gv
00108  
00109  
00110  
00111          v i r t u a l   T   o p e r a t o r [ ] ( i n t   n ) { r e t u r n   A c t i v e [ n ] ; } 
00112  
00113      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   P o o l 
00114  
00115  
00116  
00117      t e m p l a t e < t y p e n a m e   T >   c l a s s   M u l t i T h r e a d P o o l : p u b l i c   P o o l < T >                                       / / / Y~zpenc`l
00118  
00119      { 
00120  
00121          R W L o c k   * l o c k ; 
00122  
00123  
00124  
00125          i n t   G e t A c t i v e C o u n t ( )     { i n t   r ; l o c k - > R e a d L o c k ( ) ; r = A c t i v e . C o u n t ;       l o c k - > R e a d U n l o c k ( ) ; r e t u r n   r ; } 
00126  
00127          i n t   G e t I n a c t i v e C o u n t ( )     { i n t   r ; l o c k - > R e a d L o c k ( ) ; r = I n a c t i v e . C o u n t ;   l o c k - > R e a d U n l o c k ( ) ; r e t u r n   r ; } 
00128  
00129          i n t   G e t H i s t o r y M a x C o u n t ( ) { i n t   r ; l o c k - > R e a d L o c k ( ) ; r = h i s t o r y _ m a x ;         l o c k - > R e a d U n l o c k ( ) ; r e t u r n   r ; } 
00130  
00131  
00132  
00133      p r o t e c t e d : 
00134  
00135  
00136  
00137          v i r t u a l   T   C r e a t e ( ) = 0 ;                                                                       / / / < R^penc
00138  
00139          v i r t u a l   v o i d   C l e a r ( T ) = 0 ;                                                                     / / / < ndpenc
00140  
00141  
00142  
00143      p u b l i c : 
00144  
00145  
00146  
00147          M u l t i T h r e a d P o o l ( ) 
00148  
00149          { 
00150  
00151              l o c k = C r e a t e R W L o c k ( ) ; 
00152  
00153          } 
00154  
00155  
00156  
00157          v i r t u a l   ~ M u l t i T h r e a d P o o l ( ) 
00158  
00159          { 
00160  
00161              S A F E _ C L E A R ( l o c k ) ; 
00162  
00163          } 
00164  
00165          
00166  
00167          v i r t u a l   T   * R e a d L o c k ( i n t   & c )                                                                   / / / < Rh[( (uNte*NRh) 
00168  
00169          { 
00170  
00171              l o c k - > R e a d L o c k ( ) ; 
00172  
00173  
00174  
00175              c = A c t i v e C o u n t ; 
00176  
00177              r e t u r n ( A c t i v e . D a t a ) ; 
00178  
00179          } 
00180  
00181          
00182  
00183          v i r t u a l   T   * W r i t e L o c k ( i n t   & c )                                                                 / / / < QRh[( (uNte*NRh) 
00184  
00185          { 
00186  
00187              l o c k - > W r i t e L o c k ( ) ; 
00188  
00189  
00190  
00191              c = A c t i v e C o u n t ; 
00192  
00193              r e t u r n ( A c t i v e . D a t a ) ; 
00194  
00195          } 
00196  
00197  
00198  
00199          v i r t u a l   T   * T r y R e a d L o c k ( i n t   & c )                                                                 / / / < \ՋRh[( (uNte*NRh) 
00200  
00201          { 
00202  
00203              i f ( ! l o c k - > T r y R e a d L o c k ( ) ) 
00204  
00205                  r e t u r n ( N U L L ) ; 
00206  
00207  
00208  
00209              c = A c t i v e C o u n t ; 
00210  
00211              r e t u r n ( A c t i v e . D a t a ) ; 
00212  
00213          } 
00214  
00215  
00216  
00217          v i r t u a l   T   * T r y W r i t e L o c k ( i n t   & c )                                                               / / / < \ՋQRh[( (uNte*NRh) 
00218  
00219          { 
00220  
00221              i f ( ! l o c k - > T r y W r i t e L o c k ( ) ) 
00222  
00223                  r e t u r n ( N U L L ) ; 
00224  
00225  
00226  
00227              c = A c t i v e C o u n t ; 
00228  
00229              r e t u r n ( A c t i v e . D a t a ) ; 
00230  
00231          } 
00232  
00233          
00234  
00235          v i r t u a l   v o i d   R e a d U n l o c k ( ) { l o c k - > R e a d U n l o c k ( ) ; }                                                 / / / < ( (uNte*NRh) 
00236  
00237          v i r t u a l   v o i d   W r i t e U n l o c k ( ) { l o c k - > W r i t e U n l o c k ( ) ; }                                             / / / < Q( (uNte*NRh) 
00238  
00239  
00240  
00241          v i r t u a l   T   S a f e A c q u i r e ( )                                                                                                                                           / / / < 3u N*Npenc
00242  
00243          { 
00244  
00245              T   t m p ; 
00246  
00247  
00248  
00249              l o c k - > W r i t e L o c k ( ) ; 
00250  
00251                          t m p = P o o l < T > : : A c q u i r e ( ) ; 
00252  
00253              l o c k - > W r i t e U n l o c k ( ) ; 
00254  
00255  
00256  
00257              r e t u r n   t m p ; 
00258  
00259          } 
00260  
00261  
00262  
00263          v i r t u a l   v o i d   S a f e A p p e n d ( T   t m p )                                                                 / / / < mR N*Npenc
00264  
00265          { 
00266  
00267              l o c k - > W r i t e L o c k ( ) ; 
00268  
00269              P o o l < T > : : A p p e n d ( t m p ) ; 
00270  
00271              l o c k - > W r i t e U n l o c k ( ) ; 
00272  
00273          } 
00274  
00275  
00276  
00277          v i r t u a l   b o o l   S a f e R e l e a s e ( T   t m p )                                                               / / / < ʑ>e N*Npenc
00278  
00279          { 
00280  
00281              b o o l   r e s u l t ; 
00282  
00283  
00284  
00285              l o c k - > W r i t e L o c k ( ) ; 
00286  
00287              r e s u l t = P o o l < T > : : R e l e a s e ( t m p ) ; 
00288  
00289              l o c k - > W r i t e U n l o c k ( ) ; 
00290  
00291  
00292  
00293              r e t u r n   r e s u l t ; 
00294  
00295          } 
00296  
00297  
00298  
00299          v i r t u a l   v o i d   S a f e C l e a r I n a c t i v e ( )                                                             / / / < nd@b gzzv
00300  
00301          { 
00302  
00303              l o c k - > W r i t e L o c k ( ) ; 
00304  
00305              P o o l < T > : : C l e a r I n a c t i v e ( ) ; 
00306  
00307              l o c k - > W r i t e U n l o c k ( ) ; 
00308  
00309          } 
00310  
00311  
00312  
00313          v i r t u a l   v o i d   S a f e C l e a r A l l ( )                                                                   / / / < nd@b gv
00314  
00315          { 
00316  
00317              l o c k - > W r i t e L o c k ( ) ; 
00318  
00319              P o o l < T > : : C l e a r A l l ( ) ; 
00320  
00321              l o c k - > W r i t e U n l o c k ( ) ; 
00322  
00323          } 
00324  
00325      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   M u l t i T h r e a d P o o l 
00326  
00327  
00328  
00329      t e m p l a t e < t y p e n a m e   T >   c l a s s   O b j e c t P o o l : p u b l i c   P o o l < T   * >                                             / / / [a`l
00330  
00331      { 
00332  
00333          v i r t u a l   T   * C r e a t e ( )   {       r e t u r n ( n e w   T ) ;     } 
00334  
00335  
00336  
00337          v i r t u a l   v o i d   C l e a r ( T   * o b j )     {   i f ( o b j ) d e l e t e   o b j ;     } 
00338  
00339  
00340  
00341      p u b l i c : 
00342  
00343  
00344  
00345          v i r t u a l   ~ O b j e c t P o o l ( ) { C l e a r A l l ( ) ; } 
00346  
00347      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   O b j e c t P o o l 
00348  
00349  
00350  
00351      t e m p l a t e < t y p e n a m e   T >   c l a s s   M T O b j e c t P o o l : p u b l i c   M u l t i T h r e a d P o o l < T   * >                               / / / Y~z[a`l
00352  
00353      { 
00354  
00355          v i r t u a l   T   * C r e a t e ( )   {       r e t u r n ( n e w   T ) ;     } 
00356  
00357  
00358  
00359          v i r t u a l   v o i d   C l e a r ( T   * o b j )     {   i f ( o b j ) d e l e t e   o b j ;     } 
00360  
00361  
00362  
00363      p u b l i c : 
00364  
00365  
00366  
00367          v i r t u a l   ~ M T O b j e c t P o o l ( ) { C l e a r A l l ( ) ; } 
00368  
00369      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   M T O b j e c t P o o l 
00370  
00371  
00372  
00373      t e m p l a t e < t y p e n a m e   T >   c l a s s   M e m B l o c k P o o l : p u b l i c   P o o l < T   * >                                         / / / QX[WW`l
00374  
00375      { 
00376  
00377              i n t   m e m b l o c k _ s i z e ; 
00378  
00379  
00380  
00381          T   * C r e a t e ( )           {       r e t u r n ( n e w   T [ m e m b l o c k _ s i z e ] ) ;   } 
00382  
00383  
00384  
00385          v o i d   C l e a r ( T   * o b j )     {   i f ( o b j ) d e l e t e [ ]   o b j ;     } 
00386  
00387  
00388  
00389      p u b l i c : 
00390  
00391  
00392  
00393          M e m B l o c k P o o l ( i n t   s i z e ) { S e t S i z e ( s i z e ) ; } 
00394  
00395          v i r t u a l   ~ M e m B l o c k P o o l ( ) { C l e a r A l l ( ) ; } 
00396  
00397  
00398  
00399          v o i d   S e t S i z e ( i n t   s i z e ) { m e m b l o c k _ s i z e = s i z e ; } 
00400  
00401          i n t   G e t S i z e ( ) { r e t u r n   m e m b l o c k _ s i z e ; } 
00402  
00403      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   M e m B l o c k P o o l 
00404  
00405  
00406  
00407      t e m p l a t e < t y p e n a m e   T >   c l a s s   M T M e m B l o c k P o o l : p u b l i c   M u l t i T h r e a d P o o l < T   * >                           / / / Y~zQX[WW`l
00408  
00409      { 
00410  
00411          i n t   m e m b l o c k _ s i z e ; 
00412  
00413  
00414  
00415          T   * C r e a t e ( )           {       r e t u r n ( n e w   T [ m e m b l o c k _ s i z e ] ) ;   } 
00416  
00417  
00418  
00419          v o i d   C l e a r ( T   * o b j )     {   i f ( o b j ) d e l e t e [ ]   o b j ;     } 
00420  
00421  
00422  
00423      p u b l i c : 
00424  
00425  
00426  
00427          M T M e m B l o c k P o o l ( i n t   s i z e ) { S e t S i z e ( s i z e ) ; } 
00428  
00429          v i r t u a l   ~ M T M e m B l o c k P o o l ( ) { C l e a r A l l ( ) ; } 
00430  
00431  
00432  
00433          v o i d   S e t S i z e ( i n t   s i z e ) { m e m b l o c k _ s i z e = s i z e ; } 
00434  
00435          i n t   G e t S i z e ( ) { r e t u r n   m e m b l o c k _ s i z e ; } 
00436  
00437      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   M T M e m B l o c k P o o l 
00438  
00439      
00440  
00441      / * * 
00442  
00443      *   "}_[a`l!jg
00444  
00445      * / 
00446  
00447      t e m p l a t e < t y p e n a m e   T , t y p e n a m e   I >   c l a s s   I n d e x O b j e c t P o o l                                           / / / "}_[a`l!jg
00448  
00449      { 
00450  
00451          c o n s t   i n t           m a x _ c o u n t ;                                                                 / / / <  g'Ypencpeϑ
00452  
00453  
00454  
00455          O b j e c t L i s t < T >       a l l _ l i s t ;                                                               / / / < @b g[a
00456  
00457  
00458  
00459          S t a c k < T   * >             n u l l _ l i s t ;                                                                 / / / < *gO(u[aRh
00460  
00461          I n d e x D a t a < I , T   * >     i d l e _ l i s t ;                                                                 / / / < n[aRh
00462  
00463          O n l y L i s t < T   * >       a c t i v e _ l i s t ;                                                             / / / < ;mR[aRh
00464  
00465  
00466  
00467      p u b l i c : 
00468  
00469  
00470  
00471          I n d e x O b j e c t P o o l ( i n t   c o u n t ) ;                                                                   / / / < ,g{|g Qpe
00472  
00473          v i r t u a l   ~ I n d e x O b j e c t P o o l ( ) ;                                                                   / / / < ,g{|ggQpe
00474  
00475  
00476  
00477          v i r t u a l   T   * A c q u i r e ( ) ;                                                                       / / / < 3u N*N[a
00478  
00479          v i r t u a l   T   * T r y A c q u i r e ( c o n s t   I   & f l a g ) ;                                                       / / / < \Ջ3u N*NSnv[a
00480  
00481          v i r t u a l   T   * A c q u i r e ( c o n s t   I   & f l a g ) ;                                                             / / / < 3u N*NSnv[a
00482  
00483  
00484  
00485          v i r t u a l   b o o l   R e l e a s e ( T   * o b j ) ;                                                               / / / < ʑ>e N*Npenc
00486  
00487          v i r t u a l   b o o l   R e l e a s e ( T   * o b j , c o n s t   I   & f l a g ) ;                                                   / / / < ʑ>e N*Npenc
00488  
00489      } ; / / t e m p l a t e < t y p e n a m e   T , t y p e n a m e   I >   c l a s s   I n d e x O b j e c t P o o l 
00490  
00491  
00492  
00493      / * * 
00494  
00495      *   Y~z"}_[a`l!jg
00496  
00497      * / 
00498  
00499      t e m p l a t e < t y p e n a m e   T , t y p e n a m e   I >   c l a s s   M T I n d e x O b j e c t P o o l : p u b l i c   I n d e x O b j e c t P o o l < T , I >               / / / Y~z"}_[a`l!jg
00500  
00501      { 
00502  
00503          T h r e a d M u t e x   l o c k ; 
00504  
00505  
00506  
00507      p u b l i c : 
00508  
00509  
00510  
00511          M T I n d e x O b j e c t P o o l ( i n t   c o u n t ) : I n d e x O b j e c t P o o l ( c o u n t ) { } 
00512  
00513          ~ M T I n d e x O b j e c t P o o l ( ) { } 
00514  
00515  
00516  
00517          T   * A c q u i r e ( ) 
00518  
00519          { 
00520  
00521              T   * o b j ; 
00522  
00523  
00524  
00525              l o c k . L o c k ( ) ; 
00526  
00527              o b j = I n d e x O b j e c t P o o l < T , I > : : A c q u i r e ( ) ; 
00528  
00529              l o c k . U n l o c k ( ) ; 
00530  
00531  
00532  
00533              r e t u r n ( o b j ) ; 
00534  
00535          } 
00536  
00537  
00538  
00539          T   * T r y A c q u i r e ( c o n s t   I   & f l a g ) 
00540  
00541          { 
00542  
00543              T   * o b j ; 
00544  
00545  
00546  
00547              l o c k . L o c k ( ) ; 
00548  
00549              o b j = I n d e x O b j e c t P o o l < T , I > : : T r y A c q u i r e ( f l a g ) ; 
00550  
00551              l o c k . U n l o c k ( ) ; 
00552  
00553  
00554  
00555              r e t u r n ( o b j ) ; 
00556  
00557          } 
00558  
00559  
00560  
00561          T   * A c q u i r e ( c o n s t   I   & f l a g ) 
00562  
00563          { 
00564  
00565              T   * o b j ; 
00566  
00567  
00568  
00569              l o c k . L o c k ( ) ; 
00570  
00571              o b j = I n d e x O b j e c t P o o l < T , I > : : A c q u i r e ( f l a g ) ; 
00572  
00573              l o c k . U n l o c k ( ) ; 
00574  
00575  
00576  
00577              r e t u r n ( o b j ) ; 
00578  
00579          } 
00580  
00581  
00582  
00583          b o o l   R e l e a s e ( T   * o b j ) 
00584  
00585          { 
00586  
00587              b o o l   r e s u l t ; 
00588  
00589  
00590  
00591              l o c k . L o c k ( ) ; 
00592  
00593              r e s u l t = I n d e x O b j e c t P o o l < T , I > : : R e l e a s e ( o b j ) ; 
00594  
00595              l o c k . U n l o c k ( ) ; 
00596  
00597  
00598  
00599              r e t u r n ( r e s u l t ) ; 
00600  
00601          } 
00602  
00603          
00604  
00605          b o o l   R e l e a s e ( T   * o b j , c o n s t   I   & f l a g ) 
00606  
00607          { 
00608  
00609              b o o l   r e s u l t ; 
00610  
00611  
00612  
00613              l o c k . L o c k ( ) ; 
00614  
00615              r e s u l t = I n d e x O b j e c t P o o l < T , I > : : R e l e a s e ( o b j , f l a g ) ; 
00616  
00617              l o c k . U n l o c k ( ) ; 
00618  
00619  
00620  
00621              r e t u r n ( r e s u l t ) ; 
00622  
00623          } 
00624  
00625      } ; / / t e m p l a t e < t y p e n a m e   T , t y p e n a m e   I >   c l a s s   M T I n d e x O b j e c t P o o l 
00626  
00627  } / / n a m e s p a c e   h g l 
00628  
00629  # i n c l u d e < h g l / t y p e / P o o l . C P P > 
00630  
00631  # i n c l u d e < h g l / t y p e / I n d e x O b j e c t P o o l . C P P > 
00632  
00633  # e n d i f / / H G L _ P O O L _ I N C L U D E 
00634  
00635  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义