CMGDK r49-rc2
K:/CMGDKv18/SDK/Source/SQL/MySQL/include/my_tree.h
浏览该文件的文档。
00001 / *   C o p y r i g h t   ( C )   2 0 0 0   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 e e _ h 
00024  
00025  # d e f i n e   _ t r e 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  # i n c l u d e   " m y _ b a s e . h "         / *   g e t   ' e n u m   h a _ r k e y _ f u n c t i o n '   * / 
00034  
00035  / *   W o r s t   c a s e   t r e e   i s   h a l f   f u l l .   T h i s   g i v e s   u s e   2 ^ ( M A X _ T R E E _ H E I G H T / 2 )   l e a f s   * / 
00036  
00037  # d e f i n e   M A X _ T R E E _ H E I G H T   6 4 
00038  
00039  # d e f i n e   E L E M E N T _ K E Y ( t r e e , e l e m e n t ) \ 
00040  
00041  ( t r e e - > o f f s e t _ t o _ k e y   ?   ( v o i d * ) ( ( u c h a r * )   e l e m e n t + t r e e - > o f f s e t _ t o _ k e y )   : \ 
00042  
00043              * ( ( v o i d * * )   ( e l e m e n t + 1 ) ) ) 
00044  
00045  # d e f i n e   t r e e _ s e t _ p o i n t e r ( e l e m e n t , p t r )   * ( ( u c h a r   * * )   ( e l e m e n t + 1 ) ) = ( ( u c h a r * )   ( p t r ) ) 
00046  
00047  # d e f i n e   T R E E _ N O _ D U P S   1 
00048  
00049  t y p e d e f   e n u m   {   l e f t _ r o o t _ r i g h t ,   r i g h t _ r o o t _ l e f t   }   T R E E _ W A L K ; 
00050  
00051  t y p e d e f   u i n t 3 2   e l e m e n t _ c o u n t ; 
00052  
00053  t y p e d e f   i n t   ( * t r e e _ w a l k _ a c t i o n ) ( v o i d   * , e l e m e n t _ c o u n t , v o i d   * ) ; 
00054  
00055  t y p e d e f   e n u m   {   f r e e _ i n i t ,   f r e e _ f r e e ,   f r e e _ e n d   }   T R E E _ F R E E ; 
00056  
00057  t y p e d e f   v o i d   ( * t r e e _ e l e m e n t _ f r e e ) ( v o i d * ,   T R E E _ F R E E ,   v o i d   * ) ; 
00058  
00059  t y p e d e f   s t r u c t   s t _ t r e e _ e l e m e n t   { 
00060  
00061      s t r u c t   s t _ t r e e _ e l e m e n t   * l e f t , * r i g h t ; 
00062  
00063      u i n t 3 2   c o u n t : 3 1 , 
00064  
00065        c o l o u r : 1 ;             / *   b l a c k   i s   m a r k e d   a s   1   * / 
00066  
00067  }   T R E E _ E L E M E N T ; 
00068  
00069  # d e f i n e   E L E M E N T _ C H I L D ( e l e m e n t ,   o f f s )   ( * ( T R E E _ E L E M E N T * * ) ( ( c h a r * ) e l e m e n t   +   o f f s ) ) 
00070  
00071  t y p e d e f   s t r u c t   s t _ t r e e   { 
00072  
00073      T R E E _ E L E M E N T   * r o o t , n u l l _ e l e m e n t ; 
00074  
00075      T R E E _ E L E M E N T   * * p a r e n t s [ M A X _ T R E E _ H E I G H T ] ; 
00076  
00077      u i n t   o f f s e t _ t o _ k e y , e l e m e n t s _ i n _ t r e e , s i z e _ o f _ e l e m e n t ; 
00078  
00079      u l o n g   m e m o r y _ l i m i t ,   a l l o c a t e d ; 
00080  
00081      q s o r t _ c m p 2   c o m p a r e ; 
00082  
00083      v o i d   * c u s t o m _ a r g ; 
00084  
00085      M E M _ R O O T   m e m _ r o o t ; 
00086  
00087      m y _ b o o l   w i t h _ d e l e t e ; 
00088  
00089      t r e e _ e l e m e n t _ f r e e   f r e e ; 
00090  
00091      u i n t   f l a g ; 
00092  
00093  }   T R E E ; 
00094  
00095      / *   F u n c t i o n s   o n   w h o l e   t r e e   * / 
00096  
00097  v o i d   i n i t _ t r e e ( T R E E   * t r e e ,   u l o n g   d e f a u l t _ a l l o c _ s i z e ,   u l o n g   m e m o r y _ l i m i t , 
00098  
00099                                i n t   s i z e ,   q s o r t _ c m p 2   c o m p a r e ,   m y _ b o o l   w i t h _ d e l e t e , 
00100  
00101                    t r e e _ e l e m e n t _ f r e e   f r e e _ e l e m e n t ,   v o i d   * c u s t o m _ a r g ) ; 
00102  
00103  v o i d   d e l e t e _ t r e e ( T R E E * ) ; 
00104  
00105  v o i d   r e s e t _ t r e e ( T R E E * ) ; 
00106  
00107      / *   s i m i l a r   t o   d e l e t e   t r e e ,   e x c e p t   w e   d o   n o t   m y _ f r e e ( )   b l o c k s   i n   m e m _ r o o t   * / 
00108  
00109  # d e f i n e   i s _ t r e e _ i n i t e d ( t r e e )   ( ( t r e e ) - > r o o t   ! =   0 ) 
00110  
00111      / *   F u n c t i o n s   o n   l e a f s   * / 
00112  
00113  T R E E _ E L E M E N T   * t r e e _ i n s e r t ( T R E E   * t r e e , v o i d   * k e y ,   u i n t   k e y _ s i z e ,   
00114  
00115                                                      v o i d   * c u s t o m _ a r g ) ; 
00116  
00117  v o i d   * t r e e _ s e a r c h ( T R E E   * t r e e ,   v o i d   * k e y ,   v o i d   * c u s t o m _ a r g ) ; 
00118  
00119  i n t   t r e e _ w a l k ( T R E E   * t r e e , t r e e _ w a l k _ a c t i o n   a c t i o n , 
00120  
00121                  v o i d   * a r g u m e n t ,   T R E E _ W A L K   v i s i t ) ; 
00122  
00123  i n t   t r e e _ d e l e t e ( T R E E   * t r e e ,   v o i d   * k e y ,   u i n t   k e y _ s i z e ,   v o i d   * c u s t o m _ a r g ) ; 
00124  
00125  v o i d   * t r e e _ s e a r c h _ k e y ( T R E E   * t r e e ,   c o n s t   v o i d   * k e y ,   
00126  
00127                                              T R E E _ E L E M E N T   * * p a r e n t s ,   T R E E _ E L E M E N T   * * * l a s t _ p o s , 
00128  
00129                                              e n u m   h a _ r k e y _ f u n c t i o n   f l a g ,   v o i d   * c u s t o m _ a r g ) ; 
00130  
00131  v o i d   * t r e e _ s e a r c h _ e d g e ( T R E E   * t r e e ,   T R E E _ E L E M E N T   * * p a r e n t s ,   
00132  
00133                                                  T R E E _ E L E M E N T   * * * l a s t _ p o s ,   i n t   c h i l d _ o f f s ) ; 
00134  
00135  v o i d   * t r e e _ s e a r c h _ n e x t ( T R E E   * t r e e ,   T R E E _ E L E M E N T   * * * l a s t _ p o s ,   i n t   l _ o f f s ,   
00136  
00137                                                i n t   r _ o f f s ) ; 
00138  
00139  h a _ r o w s   t r e e _ r e c o r d _ p o s ( T R E E   * t r e e ,   c o n s t   v o i d   * k e y ,   
00140  
00141                                            e n u m   h a _ r k e y _ f u n c t i o n   s e a r c h _ f l a g ,   v o i d   * c u s t o m _ a r g ) ; 
00142  
00143  # d e f i n e   r e s e t _ f r e e _ e l e m e n t ( t r e e )   ( t r e e ) - > f r e e =   0 
00144  
00145  # d e f i n e   T R E E _ E L E M E N T _ E X T R A _ S I Z E   ( s i z e o f ( T R E E _ E L E M E N T )   +   s i z e o f ( v o i d * ) ) 
00146  
00147  # i f d e f     _ _ c p l u s p l u s 
00148  
00149  } 
00150  
00151  # e n d i f 
00152  
00153  # e n d i f 
00154  
00155  
 全部  名字空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义