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