CMGDK r49-rc2
K:/CMGDKv18/SDK/Include/hgl/type/Smart.H
浏览该文件的文档。
00001 # i f n d e f   H G L _ S M A R T _ I N C L U D E 
00002  
00003  # d e f i n e   H G L _ S M A R T _ I N C L U D E 
00004  
00005  
00006  
00007  # i n c l u d e < h g l / M a c r o . h > 
00008  
00009  # i n c l u d e < h g l / t h r e a d / A t o m i c . h > 
00010  
00011  # i n c l u d e < h g l / T y p e F u n c . h > 
00012  
00013  n a m e s p a c e   h g l 
00014  
00015  { 
00016  
00017      s t r u c t   R e f C o u n t 
00018  
00019      { 
00020  
00021          a t o m _ u i n t   c o u n t ; 
00022  
00023          a t o m _ u i n t   w e a k ; 
00024  
00025  
00026  
00027      p u b l i c : 
00028  
00029  
00030  
00031          R e f C o u n t ( ) 
00032  
00033          { 
00034  
00035              c o u n t = 1 ; 
00036  
00037              w e a k = 0 ; 
00038  
00039          } 
00040  
00041  
00042  
00043          v i r t u a l   ~ R e f C o u n t ( ) 
00044  
00045          { 
00046  
00047          } 
00048  
00049  
00050  
00051          v i r t u a l   v o i d   D e l e t e ( ) = 0 ; 
00052  
00053  
00054  
00055          i n t   i n c _ r e f ( ) 
00056  
00057          { 
00058  
00059              r e t u r n   + + c o u n t ; 
00060  
00061          } 
00062  
00063  
00064  
00065          v i r t u a l   i n t   u n r e f ( ) 
00066  
00067          { 
00068  
00069              c o u n t - - ; 
00070  
00071  
00072  
00073              i f ( c o u n t < = 0 ) 
00074  
00075              { 
00076  
00077                  D e l e t e ( ) ; 
00078  
00079  
00080  
00081                  i f ( w e a k < = 0 ) 
00082  
00083                      d e l e t e   t h i s ; 
00084  
00085  
00086  
00087                  r e t u r n   0 ; 
00088  
00089              } 
00090  
00091  
00092  
00093              r e t u r n   c o u n t ; 
00094  
00095          } 
00096  
00097  
00098  
00099          i n t   i n c _ r e f _ w e a k ( ) 
00100  
00101          { 
00102  
00103              r e t u r n   + + w e a k ; 
00104  
00105          } 
00106  
00107  
00108  
00109          i n t   u n r e f _ w e a k ( ) 
00110  
00111          { 
00112  
00113              w e a k - - ; 
00114  
00115  
00116  
00117              i f ( w e a k < = 0 ) 
00118  
00119              { 
00120  
00121                  i f ( c o u n t < = 0 ) 
00122  
00123                  { 
00124  
00125                      d e l e t e   t h i s ; 
00126  
00127                      r e t u r n   0 ; 
00128  
00129                  } 
00130  
00131              } 
00132  
00133  
00134  
00135              r e t u r n   w e a k ; 
00136  
00137          } 
00138  
00139      } ; / / s t r u c t   R e f C o u n t 
00140  
00141  
00142  
00143      t e m p l a t e < t y p e n a m e   T >   s t r u c t   S m a r t D a t a : p u b l i c   R e f C o u n t 
00144  
00145      { 
00146  
00147          T   * d a t a ; 
00148  
00149  
00150  
00151      p u b l i c : 
00152  
00153  
00154  
00155          S m a r t D a t a ( T   * p t r ) 
00156  
00157          { 
00158  
00159              d a t a = p t r ; 
00160  
00161          } 
00162  
00163  
00164  
00165          ~ S m a r t D a t a ( ) 
00166  
00167          { 
00168  
00169              D e l e t e ( ) ; 
00170  
00171          } 
00172  
00173  
00174  
00175          v o i d   D e l e t e ( ) 
00176  
00177          { 
00178  
00179              S A F E _ C L E A R ( d a t a ) ; 
00180  
00181          } 
00182  
00183      } ; / / s t r u c t   t e m p l a t e < t y p e n a m e   T >   s t r u c t   S m a r t D a t a 
00184  
00185  
00186  
00187      t e m p l a t e < t y p e n a m e   T >   s t r u c t   S m a r t A r r a y D a t a : p u b l i c   R e f C o u n t 
00188  
00189      { 
00190  
00191          T   * d a t a ; 
00192  
00193  
00194  
00195      p u b l i c : 
00196  
00197  
00198  
00199          S m a r t A r r a y D a t a ( T   * p t r ) 
00200  
00201          { 
00202  
00203              d a t a = p t r ; 
00204  
00205          } 
00206  
00207  
00208  
00209          ~ S m a r t A r r a y D a t a ( ) 
00210  
00211          { 
00212  
00213              D e l e t e ( ) ; 
00214  
00215          } 
00216  
00217  
00218  
00219          v o i d   D e l e t e ( ) 
00220  
00221          { 
00222  
00223              S A F E _ C L E A R _ A R R A Y ( d a t a ) ; 
00224  
00225          } 
00226  
00227      } ; / / s t r u c t   t e m p l a t e < t y p e n a m e   T >   s t r u c t   S m a r t A r r a y D a t a 
00228  
00229  
00230  
00231      t e m p l a t e < t y p e n a m e   S D , t y p e n a m e   T >   c l a s s   _ S m a r t 
00232  
00233      { 
00234  
00235      p r o t e c t e d : 
00236  
00237  
00238  
00239          t y p e d e f   _ S m a r t < S D , T >   S e l f C l a s s ; 
00240  
00241  
00242  
00243          S D   * s d ; 
00244  
00245  
00246  
00247      p u b l i c : 
00248  
00249  
00250  
00251          _ S m a r t ( ) 
00252  
00253          { 
00254  
00255              s d = 0 ; 
00256  
00257          } 
00258  
00259  
00260  
00261          _ S m a r t ( T   * p t r ) 
00262  
00263          { 
00264  
00265              s d = n e w   S D ( p t r ) ; 
00266  
00267          } 
00268  
00269  
00270  
00271          _ S m a r t ( c o n s t   S e l f C l a s s   & s t ) 
00272  
00273          { 
00274  
00275              s d = 0 ; 
00276  
00277  
00278  
00279              s e t ( s t ) ; 
00280  
00281          } 
00282  
00283  
00284  
00285          v i r t u a l   ~ _ S m a r t ( ) 
00286  
00287          { 
00288  
00289          } 
00290  
00291  
00292  
00293          T   * s e t ( T   * p t r ) 
00294  
00295          { 
00296  
00297              i f ( s d ) 
00298  
00299                  s d - > u n r e f ( ) ; 
00300  
00301  
00302  
00303              i f ( ! p t r ) 
00304  
00305              { 
00306  
00307                  s d = 0 ; 
00308  
00309                  r e t u r n ( 0 ) ; 
00310  
00311              } 
00312  
00313  
00314  
00315              s d = n e w   S D ( p t r ) ; 
00316  
00317  
00318  
00319              r e t u r n   p t r ; 
00320  
00321          } 
00322  
00323  
00324  
00325          v o i d   i n c _ r e f ( c o n s t   S e l f C l a s s   & s c ) 
00326  
00327          { 
00328  
00329              u n r e f ( ) ; 
00330  
00331  
00332  
00333              s d = s c . s d ; 
00334  
00335  
00336  
00337              i f ( s d ) 
00338  
00339                  s d - > i n c _ r e f ( ) ; 
00340  
00341          } 
00342  
00343  
00344  
00345          v o i d   u n r e f ( ) 
00346  
00347          { 
00348  
00349              i f ( s d ) 
00350  
00351              { 
00352  
00353                  s d - > u n r e f ( ) ; 
00354  
00355                  s d = 0 ; 
00356  
00357              } 
00358  
00359          } 
00360  
00361  
00362  
00363          v o i d   i n c _ r e f _ w e a k ( c o n s t   S e l f C l a s s   & s c ) 
00364  
00365          { 
00366  
00367              u n r e f ( ) ; 
00368  
00369  
00370  
00371              s d = s c . s d ; 
00372  
00373  
00374  
00375              i f ( s d ) 
00376  
00377                  s d - > i n c _ r e f _ w e a k ( ) ; 
00378  
00379          } 
00380  
00381  
00382  
00383          v o i d   u n r e f _ w e a k ( ) 
00384  
00385          { 
00386  
00387              i f ( s d ) 
00388  
00389              { 
00390  
00391                  s d - > u n r e f _ w e a k ( ) ; 
00392  
00393                  s d = 0 ; 
00394  
00395              } 
00396  
00397          } 
00398  
00399  
00400  
00401          T   * g e t ( ) c o n s t { r e t u r n   s d ? s d - > d a t a : 0 ; } 
00402  
00403          b o o l   v a l i d ( ) c o n s t { r e t u r n   s d ; } 
00404  
00405          i n t   u s e _ c o u n t ( ) c o n s t { r e t u r n   s d ? s d - > c o u n t : - 1 ; } 
00406  
00407          b o o l   o n l y ( ) c o n s t { r e t u r n   s d ? s d - > c o u n t = = 1 : t r u e ; } 
00408  
00409  
00410  
00411      p u b l i c : 
00412  
00413  
00414  
00415          T   & o p e r a t o r   * ( )   c o n s t   { r e t u r n   * ( s d - > d a t a ) ; } 
00416  
00417          b o o l   o p e r a t o r ! ( )   c o n s t     { r e t u r n   s d ? ! ( s d - > d a t a ) : t r u e ; } 
00418  
00419  
00420  
00421          o p e r a t o r   T   * ( ) c o n s t { r e t u r n ( s d ? s d - > d a t a : 0 ) ; } 
00422  
00423          T   * o p e r a t o r   - > ( ) c o n s t { r e t u r n ( s d ? s d - > d a t a : 0 ) ; } 
00424  
00425  
00426  
00427          b o o l   o p e r a t o r   = =   ( c o n s t   S e l f C l a s s   &   r p ) c o n s t { r e t u r n ( g e t ( ) = = r p . g e t ( ) ) ;   } 
00428  
00429          b o o l   o p e r a t o r   = =   ( c o n s t   T   *           r p ) c o n s t { r e t u r n ( g e t ( ) = = r p ) ;           } 
00430  
00431  
00432  
00433          b o o l   o p e r a t o r   ! =   ( c o n s t   S e l f C l a s s   &   r p ) c o n s t { r e t u r n   ! ( o p e r a t o r = = ( r p ) ) ;     } 
00434  
00435          b o o l   o p e r a t o r   ! =   ( c o n s t   T   *           r p ) c o n s t { r e t u r n   ! ( o p e r a t o r = = ( r p ) ) ;     } 
00436  
00437      } ; / / t e m p l a t e   < t y p e n a m e   T >   c l a s s   _ S m a r t 
00438  
00439  
00440  
00441      t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k P t r ; 
00442  
00443  
00444  
00445      / * * 
00446  
00447      *   qQNcpenc{|< b r > 
00448  
00449      *   (uNꁨRʑ>eQ\O(uWvc
00450  
00451      * / 
00452  
00453      t e m p l a t e < t y p e n a m e   T >   c l a s s   S h a r e d P t r : p u b l i c   _ S m a r t < S m a r t D a t a < T > , T >                                 / / / qQNcpenc{|
00454  
00455      { 
00456  
00457          f r i e n d   c l a s s   W e a k P t r < T > ; 
00458  
00459  
00460  
00461      p u b l i c : 
00462  
00463  
00464  
00465          t y p e d e f   _ S m a r t < S m a r t D a t a < T > , T >   S u p e r C l a s s ; 
00466  
00467          t y p e d e f   S h a r e d P t r < T >   S e l f C l a s s ; 
00468  
00469  
00470  
00471      p u b l i c : 
00472  
00473  
00474  
00475          S h a r e d P t r ( ) : S u p e r C l a s s ( ) { } 
00476  
00477          S h a r e d P t r ( T   * p t r ) : S u p e r C l a s s ( p t r ) { } 
00478  
00479          S h a r e d P t r ( c o n s t   S e l f C l a s s   & s p ) : S u p e r C l a s s ( ) 
00480  
00481          { 
00482  
00483              o p e r a t o r = ( s p ) ; 
00484  
00485          } 
00486  
00487  
00488  
00489          S h a r e d P t r ( c o n s t   W e a k P t r < T >   & w p ) : S u p e r C l a s s ( ) 
00490  
00491          { 
00492  
00493              o p e r a t o r = ( w p ) ; 
00494  
00495          } 
00496  
00497  
00498  
00499          ~ S h a r e d P t r ( ) 
00500  
00501          { 
00502  
00503              S u p e r C l a s s : : u n r e f ( ) ; 
00504  
00505          } 
00506  
00507  
00508  
00509          o p e r a t o r   T   * ( ) 
00510  
00511          { 
00512  
00513              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00514  
00515          } 
00516  
00517  
00518  
00519          o p e r a t o r   c o n s t   T   * ( ) c o n s t 
00520  
00521          { 
00522  
00523              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00524  
00525          } 
00526  
00527  
00528  
00529          T   * o p e r a t o r   = ( T   * p t r ) 
00530  
00531          { 
00532  
00533              r e t u r n   S u p e r C l a s s : : s e t ( p t r ) ; 
00534  
00535          } 
00536  
00537  
00538  
00539          S e l f C l a s s   & o p e r a t o r   = ( c o n s t   S e l f C l a s s   & s p ) 
00540  
00541          { 
00542  
00543              S u p e r C l a s s : : i n c _ r e f ( s p ) ; 
00544  
00545  
00546  
00547              r e t u r n ( * t h i s ) ; 
00548  
00549          } 
00550  
00551  
00552  
00553          S e l f C l a s s   & o p e r a t o r   = ( c o n s t   W e a k P t r < T >   & w p ) 
00554  
00555          { 
00556  
00557              S u p e r C l a s s : : i n c _ r e f ( w p ) ; 
00558  
00559  
00560  
00561              r e t u r n ( * t h i s ) ; 
00562  
00563          } 
00564  
00565      } ; / / t e m p l a t e   < t y p e n a m e   T >   c l a s s   S h a r e d P t r 
00566  
00567  
00568  
00569      t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k A r r a y ; 
00570  
00571  
00572  
00573      / * * 
00574  
00575      *   qQN5Rpenc{|[(WS h a r e d P t r vW@x
00576 NXRN[ ] d\O&{NS(W RdeO(ud e l e t e [ ] 
00577  
00578      * / 
00579  
00580      t e m p l a t e < t y p e n a m e   T >   c l a s s   S h a r e d A r r a y : p u b l i c   _ S m a r t < S m a r t A r r a y D a t a < T > , T >                       / / / qQN5Rpenc{|
00581  
00582      { 
00583  
00584          f r i e n d   c l a s s   W e a k A r r a y < T > ; 
00585  
00586  
00587  
00588      p u b l i c : 
00589  
00590  
00591  
00592          t y p e d e f   _ S m a r t < S m a r t A r r a y D a t a < T > , T >   S u p e r C l a s s ; 
00593  
00594          t y p e d e f   S h a r e d A r r a y < T >   S e l f C l a s s ; 
00595  
00596  
00597  
00598      p u b l i c : 
00599  
00600  
00601  
00602          S h a r e d A r r a y ( ) : S u p e r C l a s s ( ) { } 
00603  
00604          S h a r e d A r r a y ( T   * p t r ) : S u p e r C l a s s ( p t r ) { } 
00605  
00606          S h a r e d A r r a y ( c o n s t   S e l f C l a s s   & s a ) : S u p e r C l a s s ( ) 
00607  
00608          { 
00609  
00610              o p e r a t o r = ( s a ) ; 
00611  
00612          } 
00613  
00614  
00615  
00616          S h a r e d A r r a y ( c o n s t   W e a k A r r a y < T >   & w a ) : S u p e r C l a s s ( ) 
00617  
00618          { 
00619  
00620              o p e r a t o r = ( w a ) ; 
00621  
00622          } 
00623  
00624  
00625  
00626          ~ S h a r e d A r r a y ( ) 
00627  
00628          { 
00629  
00630              S u p e r C l a s s : : u n r e f ( ) ; 
00631  
00632          } 
00633  
00634  
00635  
00636          o p e r a t o r   T   * ( ) 
00637  
00638          { 
00639  
00640              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00641  
00642          } 
00643  
00644  
00645  
00646          o p e r a t o r   c o n s t   T   * ( ) c o n s t 
00647  
00648          { 
00649  
00650              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00651  
00652          } 
00653  
00654  
00655  
00656          T   & o p e r a t o r   [ ] ( i n t   n ) 
00657  
00658          { 
00659  
00660              r e t u r n   S u p e r C l a s s : : s d - > d a t a [ n ] ; 
00661  
00662          } 
00663  
00664  
00665  
00666          S e l f C l a s s   & o p e r a t o r   = ( c o n s t   S e l f C l a s s   & s a p ) 
00667  
00668          { 
00669  
00670              S u p e r C l a s s : : i n c _ r e f ( s a p ) ; 
00671  
00672  
00673  
00674              r e t u r n ( * t h i s ) ; 
00675  
00676          } 
00677  
00678  
00679  
00680          S e l f C l a s s   & o p e r a t o r   = ( c o n s t   W e a k P t r < T >   & w p ) 
00681  
00682          { 
00683  
00684              S u p e r C l a s s : : i n c _ r e f ( w p ) ; 
00685  
00686  
00687  
00688              r e t u r n ( * t h i s ) ; 
00689  
00690          } 
00691  
00692      } ; / / t e m p l a t e   < t y p e n a m e   T >   c l a s s   S h a r e d A r r a y 
00693  
00694  
00695  
00696      t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k P t r : p u b l i c   _ S m a r t < S m a r t D a t a < T > , T > 
00697  
00698      { 
00699  
00700          f r i e n d   c l a s s   S h a r e d P t r < T > ; 
00701  
00702  
00703  
00704      p u b l i c : 
00705  
00706  
00707  
00708          t y p e d e f   _ S m a r t < S m a r t D a t a < T > , T >   S u p e r C l a s s ; 
00709  
00710          t y p e d e f   W e a k P t r < T >   S e l f C l a s s ; 
00711  
00712  
00713  
00714      p u b l i c : 
00715  
00716  
00717  
00718          W e a k P t r ( ) : S u p e r C l a s s ( ) { } 
00719  
00720          W e a k P t r ( c o n s t   S h a r e d P t r < T >   & s p ) : S u p e r C l a s s ( ) 
00721  
00722          { 
00723  
00724              o p e r a t o r = ( s p ) ; 
00725  
00726          } 
00727  
00728  
00729  
00730          W e a k P t r ( c o n s t   S e l f C l a s s   & w p ) : S u p e r C l a s s ( ) 
00731  
00732          { 
00733  
00734              o p e r a t o r = ( w p ) ; 
00735  
00736          } 
00737  
00738  
00739  
00740          ~ W e a k P t r ( ) 
00741  
00742          { 
00743  
00744              S u p e r C l a s s : : u n r e f _ w e a k ( ) ; 
00745  
00746          } 
00747  
00748  
00749  
00750          o p e r a t o r   T   * ( ) 
00751  
00752          { 
00753  
00754              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00755  
00756          } 
00757  
00758  
00759  
00760          o p e r a t o r   c o n s t   T   * ( ) c o n s t 
00761  
00762          { 
00763  
00764              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00765  
00766          } 
00767  
00768  
00769  
00770          v i r t u a l   S u p e r C l a s s   & o p e r a t o r   = ( c o n s t   S h a r e d P t r < T >   & s p ) 
00771  
00772          { 
00773  
00774              S u p e r C l a s s : : i n c _ r e f _ w e a k ( s p ) ; 
00775  
00776  
00777  
00778              r e t u r n ( * t h i s ) ; 
00779  
00780          } 
00781  
00782  
00783  
00784          v i r t u a l   S e l f C l a s s   & o p e r a t o r   = ( c o n s t   S e l f C l a s s   & w p ) 
00785  
00786          { 
00787  
00788              S u p e r C l a s s : : i n c _ r e f _ w e a k ( w p ) ; 
00789  
00790  
00791  
00792              r e t u r n ( * t h i s ) ; 
00793  
00794          } 
00795  
00796      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k P t r 
00797  
00798  
00799  
00800      t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k A r r a y : p u b l i c   _ S m a r t < S m a r t A r r a y D a t a < T > , T > 
00801  
00802      { 
00803  
00804          f r i e n d   c l a s s   S h a r e d A r r a y < T > ; 
00805  
00806  
00807  
00808      p u b l i c : 
00809  
00810  
00811  
00812          t y p e d e f   _ S m a r t < S m a r t A r r a y D a t a < T > , T >   S u p e r C l a s s ; 
00813  
00814          t y p e d e f   W e a k A r r a y < T >   S e l f C l a s s ; 
00815  
00816  
00817  
00818      p u b l i c : 
00819  
00820  
00821  
00822          W e a k A r r a y ( ) : S u p e r C l a s s ( ) { } 
00823  
00824          W e a k A r r a y ( c o n s t   S h a r e d A r r a y < T >   & s a p ) : S u p e r C l a s s ( ) 
00825  
00826          { 
00827  
00828              o p e r a t o r = ( s a p ) ; 
00829  
00830          } 
00831  
00832  
00833  
00834          W e a k A r r a y ( c o n s t   W e a k A r r a y < T >   & w a p ) : S u p e r C l a s s ( ) 
00835  
00836          { 
00837  
00838              o p e r a t o r = ( w a p ) ; 
00839  
00840          } 
00841  
00842  
00843  
00844          ~ W e a k A r r a y ( ) 
00845  
00846          { 
00847  
00848              S u p e r C l a s s : : u n r e f _ w e a k ( ) ; 
00849  
00850          } 
00851  
00852  
00853  
00854          o p e r a t o r   T   * ( ) 
00855  
00856          { 
00857  
00858              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00859  
00860          } 
00861  
00862  
00863  
00864          o p e r a t o r   c o n s t   T   * ( ) c o n s t 
00865  
00866          { 
00867  
00868              r e t u r n   S u p e r C l a s s : : g e t ( ) ; 
00869  
00870          } 
00871  
00872  
00873  
00874          v i r t u a l   S u p e r C l a s s   & o p e r a t o r   = ( c o n s t   S h a r e d A r r a y < T >   & s a p ) 
00875  
00876          { 
00877  
00878              S u p e r C l a s s : : i n c _ r e f _ w e a k ( s a p ) ; 
00879  
00880  
00881  
00882              r e t u r n ( * t h i s ) ; 
00883  
00884          } 
00885  
00886  
00887  
00888          v i r t u a l   S e l f C l a s s   & o p e r a t o r   = ( c o n s t   S e l f C l a s s   & w a p ) 
00889  
00890          { 
00891  
00892              S u p e r C l a s s : : i n c _ r e f _ w e a k ( w a p ) ; 
00893  
00894  
00895  
00896              r e t u r n ( * t h i s ) ; 
00897  
00898          } 
00899  
00900      } ; / / t e m p l a t e < t y p e n a m e   T >   c l a s s   W e a k A r r a y 
00901  
00902  } / / n a m e s p a c e   h g l 
00903  
00904  # e n d i f / / H G L _ S M A R T _ I N C L U D E 
00905  
00906  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义