CMGDK r49-rc2
|
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