CMGDK r49-rc2
K:/CMGDKv18/SDK/Source/SQL/MySQL/include/my_trie.h
浏览该文件的文档。
00001 / *   C o p y r i g h t   ( C )   2 0 0 5   M y S Q L   A B 
00002  
00003        T h i s   p r o g r a m   i s   f r e e   s o f t w a r e ;   y o u   c a n   r e d i s t r i b u t e   i t   a n d / o r   m o d i f y 
00004  
00005        i t   u n d e r   t h e   t e r m s   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e   a s   p u b l i s h e d   b y 
00006  
00007        t h e   F r e e   S o f t w a r e   F o u n d a t i o n ;   v e r s i o n   2   o f   t h e   L i c e n s e . 
00008  
00009        T h i s   p r o g r a m   i s   d i s t r i b u t e d   i n   t h e   h o p e   t h a t   i t   w i l l   b e   u s e f u l , 
00010  
00011        b u t   W I T H O U T   A N Y   W A R R A N T Y ;   w i t h o u t   e v e n   t h e   i m p l i e d   w a r r a n t y   o f 
00012  
00013        M E R C H A N T A B I L I T Y   o r   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E .     S e e   t h e 
00014  
00015        G N U   G e n e r a l   P u b l i c   L i c e n s e   f o r   m o r e   d e t a i l s . 
00016  
00017        Y o u   s h o u l d   h a v e   r e c e i v e d   a   c o p y   o f   t h e   G N U   G e n e r a l   P u b l i c   L i c e n s e 
00018  
00019        a l o n g   w i t h   t h i s   p r o g r a m ;   i f   n o t ,   w r i t e   t o   t h e   F r e e   S o f t w a r e 
00020  
00021        F o u n d a t i o n ,   I n c . ,   5 9   T e m p l e   P l a c e ,   S u i t e   3 3 0 ,   B o s t o n ,   M A     0 2 1 1 1 - 1 3 0 7     U S A   * / 
00022  
00023  # i f n d e f   _ t r i e _ h 
00024  
00025  # d e f i n e   _ t r i e _ h 
00026  
00027  # i f d e f     _ _ c p l u s p l u s 
00028  
00029  e x t e r n   " C "   { 
00030  
00031  # e n d i f 
00032  
00033  t y p e d e f   s t r u c t   s t _ t r i e _ n o d e 
00034  
00035  { 
00036  
00037      u i n t 1 6   l e a f ;                                 / *   D e p t h   f r o m   r o o t   n o d e   i f   m a t c h ,   0   e l s e   * / 
00038  
00039      u c h a r   c ;                                         / *   L a b e l   o n   t h i s   e d g e   * / 
00040  
00041      s t r u c t   s t _ t r i e _ n o d e   * n e x t ;     / *   N e x t   l a b e l   * / 
00042  
00043      s t r u c t   s t _ t r i e _ n o d e   * l i n k s ;   / *   A r r a y   o f   e d g e s   l e a v i n g   t h i s   n o d e   * / 
00044  
00045      s t r u c t   s t _ t r i e _ n o d e   * f a i l ;     / *   A C   f a i l u r e   f u n c t i o n   * / 
00046  
00047  }   T R I E _ N O D E ; 
00048  
00049  t y p e d e f   s t r u c t   s t _ t r i e 
00050  
00051  { 
00052  
00053      T R I E _ N O D E   r o o t ; 
00054  
00055      M E M _ R O O T   m e m _ r o o t ; 
00056  
00057      C H A R S E T _ I N F O   * c h a r s e t ; 
00058  
00059      u i n t 3 2   n n o d e s ; 
00060  
00061      u i n t 3 2   n w o r d s ; 
00062  
00063  }   T R I E ; 
00064  
00065  t y p e d e f   s t r u c t   s t _ a c _ t r i e _ s t a t e 
00066  
00067  { 
00068  
00069      T R I E   * t r i e ; 
00070  
00071      T R I E _ N O D E   * n o d e ; 
00072  
00073  }   A C _ T R I E _ S T A T E ; 
00074  
00075  e x t e r n   T R I E   * t r i e _ i n i t   ( T R I E   * t r i e ,   C H A R S E T _ I N F O   * c h a r s e t ) ; 
00076  
00077  e x t e r n   v o i d   t r i e _ f r e e   ( T R I E   * t r i e ) ; 
00078  
00079  e x t e r n   m y _ b o o l   t r i e _ i n s e r t   ( T R I E   * t r i e ,   c o n s t   u c h a r   * k e y ,   u i n t   k e y l e n ) ; 
00080  
00081  e x t e r n   m y _ b o o l   a c _ t r i e _ p r e p a r e   ( T R I E   * t r i e ) ; 
00082  
00083  e x t e r n   v o i d   a c _ t r i e _ i n i t   ( T R I E   * t r i e ,   A C _ T R I E _ S T A T E   * s t a t e ) ; 
00084  
00085  
00086  
00087  / *   ` t r i e _ g o t o '   i s   i n t e r n a l   f u n c t i o n   a n d   s h o u l d n ' t   b e   u s e d .   * / 
00088  
00089  s t a t i c   i n l i n e   T R I E _ N O D E   * t r i e _ g o t o   ( T R I E _ N O D E   * r o o t ,   T R I E _ N O D E   * n o d e ,   u c h a r   c ) 
00090  
00091  { 
00092  
00093      T R I E _ N O D E   * n e x t ; 
00094  
00095      D B U G _ E N T E R ( " t r i e _ g o t o " ) ; 
00096  
00097      f o r   ( n e x t =   n o d e - > l i n k s ;   n e x t ;   n e x t =   n e x t - > n e x t ) 
00098  
00099          i f   ( n e x t - > c   = =   c ) 
00100  
00101              D B U G _ R E T U R N ( n e x t ) ; 
00102  
00103      i f   ( r o o t   = =   n o d e ) 
00104  
00105          D B U G _ R E T U R N ( r o o t ) ; 
00106  
00107      D B U G _ R E T U R N ( N U L L ) ; 
00108  
00109  } 
00110  
00111  
00112  
00113  / * 
00114  
00115      S Y N O P S I S 
00116  
00117          i n t   a c _ t r i e _ n e x t   ( A C _ T R I E _ S T A T E   * s t a t e ,   u c h a r   * c ) ; 
00118  
00119          s t a t e   -   v a l i d   p o i n t e r   t o   ` A C _ T R I E _ S T A T E ' 
00120  
00121          c   -   c h a r a c t e r   t o   l o o k u p 
00122  
00123      D E S C R I P T I O N 
00124  
00125          I m p l e m e n t a t i o n   o f   s e a r c h   u s i n g   A h o - C o r a s i c k   a u t o m a t o n . 
00126  
00127          P e r f o r m s   c h a r - b y - c h a r   s e a r c h . 
00128  
00129      R E T U R N   V A L U E 
00130  
00131          ` a c _ t r i e _ n e x t '   r e t u r n s   l e n g t h   o f   m a t c h e d   w o r d   o r   0 . 
00132  
00133  * / 
00134  
00135  s t a t i c   i n l i n e   i n t   a c _ t r i e _ n e x t   ( A C _ T R I E _ S T A T E   * s t a t e ,   u c h a r   * c ) 
00136  
00137  { 
00138  
00139      T R I E _ N O D E   * r o o t ,   * n o d e ; 
00140  
00141      D B U G _ E N T E R ( " a c _ t r i e _ n e x t " ) ; 
00142  
00143      D B U G _ A S S E R T ( s t a t e   & &   c ) ; 
00144  
00145      r o o t =   & s t a t e - > t r i e - > r o o t ; 
00146  
00147      n o d e =   s t a t e - > n o d e ; 
00148  
00149      w h i l e   ( !   ( s t a t e - > n o d e =   t r i e _ g o t o ( r o o t ,   n o d e ,   * c ) ) ) 
00150  
00151          n o d e =   n o d e - > f a i l ; 
00152  
00153      D B U G _ R E T U R N ( s t a t e - > n o d e - > l e a f ) ; 
00154  
00155  } 
00156  
00157  
00158  
00159  / * 
00160  
00161      S Y N O P S I S 
00162  
00163          m y _ b o o l   t r i e _ s e a r c h   ( T R I E   * t r i e ,   c o n s t   u c h a r   * k e y ,   u i n t   k e y l e n ) ; 
00164  
00165          t r i e   -   v a l i d   p o i n t e r   t o   ` T R I E ' 
00166  
00167          k e y   -   v a l i d   p o i n t e r   t o   k e y   t o   i n s e r t 
00168  
00169          k e y l e n   -   n o n - 0   k e y   l e n g t h 
00170  
00171      D E S C R I P T I O N 
00172  
00173          P e r f o r m s   k e y   l o o k u p   i n   t r i e . 
00174  
00175      R E T U R N   V A L U E 
00176  
00177          ` t r i e _ s e a r c h '   r e t u r n s   ` t r u e '   i f   k e y   i s   i n   ` t r i e ' .   O t h e r w i s e , 
00178  
00179          ` f a l s e '   i s   r e t u r n e d . 
00180  
00181      N O T E S 
00182  
00183          C o n s e c u t i v e   s e a r c h   h e r e   i s   " b e s t   b y   t e s t " .   a r r a y s   a r e   v e r y   s h o r t ,   s o 
00184  
00185          b i n a r y   s e a r c h   o r   h a s h i n g   w o u l d   a d d   t o o   m u c h   c o m p l e x i t y   t h a t   w o u l d 
00186  
00187          o v e r w e i g h t   s p e e d   g a i n .   E s p e c i a l l y   b e c a u s e   c o m p i l e r   c a n   o p t i m i z e   s i m p l e 
00188  
00189          c o n s e c u t i v e   l o o p   b e t t e r   ( t e s t e d ) 
00190  
00191  * / 
00192  
00193  s t a t i c   i n l i n e   m y _ b o o l   t r i e _ s e a r c h   ( T R I E   * t r i e ,   c o n s t   u c h a r   * k e y ,   u i n t   k e y l e n ) 
00194  
00195  { 
00196  
00197      T R I E _ N O D E   * n o d e ; 
00198  
00199      u i n t   k ; 
00200  
00201      D B U G _ E N T E R ( " t r i e _ s e a r c h " ) ; 
00202  
00203      D B U G _ A S S E R T ( t r i e   & &   k e y   & &   k e y l e n ) ; 
00204  
00205      n o d e =   & t r i e - > r o o t ; 
00206  
00207      f o r   ( k =   0 ;   k   <   k e y l e n ;   k + + ) 
00208  
00209      { 
00210  
00211          u c h a r   p ; 
00212  
00213          i f   ( !   ( n o d e =   n o d e - > l i n k s ) ) 
00214  
00215              D B U G _ R E T U R N ( F A L S E ) ; 
00216  
00217          p =   k e y [ k ] ; 
00218  
00219          w h i l e   ( p   ! =   n o d e - > c ) 
00220  
00221              i f   ( !   ( n o d e =   n o d e - > n e x t ) ) 
00222  
00223                  D B U G _ R E T U R N ( F A L S E ) ; 
00224  
00225      } 
00226  
00227      D B U G _ R E T U R N ( n o d e - > l e a f   >   0 ) ; 
00228  
00229  } 
00230  
00231  # i f d e f     _ _ c p l u s p l u s 
00232  
00233  } 
00234  
00235  # e n d i f 
00236  
00237  # e n d i f 
00238  
00239  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义