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 / * 00024 00025 C o d e f o r g e n e r e l l h a n d l i n g o f p r i o r i t y Q u e u e s . 00026 00027 I m p l e m e n t i o n o f q u e u e s f r o m " A l g o r i t m s i n C " b y R o b e r t S e d g e w i c k . 00028 00029 C o p y r i g h t M o n t y P r o g r a m K B . 00030 00031 B y m o n t y . 00032 00033 * / 00034 00035 # i f n d e f _ q u e u e s _ h 00036 00037 # d e f i n e _ q u e u e s _ h 00038 00039 # i f d e f _ _ c p l u s p l u s 00040 00041 e x t e r n " C " { 00042 00043 # e n d i f 00044 00045 t y p e d e f s t r u c t s t _ q u e u e { 00046 00047 u c h a r * * r o o t ; 00048 00049 v o i d * f i r s t _ c m p _ a r g ; 00050 00051 u i n t e l e m e n t s ; 00052 00053 u i n t m a x _ e l e m e n t s ; 00054 00055 u i n t o f f s e t _ t o _ k e y ; / * c o m p a r e i s d o n e o n e l e m e n t + o f f s e t * / 00056 00057 i n t m a x _ a t _ t o p ; / * N o r m a l l y 1 , s e t t o - 1 i f q u e u e _ t o p g i v e s m a x * / 00058 00059 i n t ( * c o m p a r e ) ( v o i d * , u c h a r * , u c h a r * ) ; 00060 00061 u i n t a u t o _ e x t e n t ; 00062 00063 } Q U E U E ; 00064 00065 # d e f i n e q u e u e _ t o p ( q u e u e ) ( ( q u e u e ) - > r o o t [ 1 ] ) 00066 00067 # d e f i n e q u e u e _ e l e m e n t ( q u e u e , i n d e x ) ( ( q u e u e ) - > r o o t [ i n d e x + 1 ] ) 00068 00069 # d e f i n e q u e u e _ e n d ( q u e u e ) ( ( q u e u e ) - > r o o t [ ( q u e u e ) - > e l e m e n t s ] ) 00070 00071 # d e f i n e q u e u e _ r e p l a c e d ( q u e u e ) _ d o w n h e a p ( q u e u e , 1 ) 00072 00073 # d e f i n e q u e u e _ s e t _ c m p _ a r g ( q u e u e , s e t _ a r g ) ( q u e u e ) - > f i r s t _ c m p _ a r g = s e t _ a r g 00074 00075 # d e f i n e q u e u e _ s e t _ m a x _ a t _ t o p ( q u e u e , s e t _ a r g ) \ 00076 00077 ( q u e u e ) - > m a x _ a t _ t o p = s e t _ a r g ? - 1 : 1 00078 00079 t y p e d e f i n t ( * q u e u e _ c o m p a r e ) ( v o i d * , u c h a r * , u c h a r * ) ; 00080 00081 i n t i n i t _ q u e u e ( Q U E U E * q u e u e , u i n t m a x _ e l e m e n t s , u i n t o f f s e t _ t o _ k e y , 00082 00083 p b o o l m a x _ a t _ t o p , q u e u e _ c o m p a r e c o m p a r e , 00084 00085 v o i d * f i r s t _ c m p _ a r g ) ; 00086 00087 i n t i n i t _ q u e u e _ e x ( Q U E U E * q u e u e , u i n t m a x _ e l e m e n t s , u i n t o f f s e t _ t o _ k e y , 00088 00089 p b o o l m a x _ a t _ t o p , q u e u e _ c o m p a r e c o m p a r e , 00090 00091 v o i d * f i r s t _ c m p _ a r g , u i n t a u t o _ e x t e n t ) ; 00092 00093 i n t r e i n i t _ q u e u e ( Q U E U E * q u e u e , u i n t m a x _ e l e m e n t s , u i n t o f f s e t _ t o _ k e y , 00094 00095 p b o o l m a x _ a t _ t o p , q u e u e _ c o m p a r e c o m p a r e , 00096 00097 v o i d * f i r s t _ c m p _ a r g ) ; 00098 00099 i n t r e s i z e _ q u e u e ( Q U E U E * q u e u e , u i n t m a x _ e l e m e n t s ) ; 00100 00101 v o i d d e l e t e _ q u e u e ( Q U E U E * q u e u e ) ; 00102 00103 v o i d q u e u e _ i n s e r t ( Q U E U E * q u e u e , u c h a r * e l e m e n t ) ; 00104 00105 i n t q u e u e _ i n s e r t _ s a f e ( Q U E U E * q u e u e , u c h a r * e l e m e n t ) ; 00106 00107 u c h a r * q u e u e _ r e m o v e ( Q U E U E * q u e u e , u i n t i d x ) ; 00108 00109 # d e f i n e q u e u e _ r e m o v e _ a l l ( q u e u e ) { ( q u e u e ) - > e l e m e n t s = 0 ; } 00110 00111 # d e f i n e q u e u e _ i s _ f u l l ( q u e u e ) ( q u e u e - > e l e m e n t s = = q u e u e - > m a x _ e l e m e n t s ) 00112 00113 v o i d _ d o w n h e a p ( Q U E U E * q u e u e , u i n t i d x ) ; 00114 00115 v o i d q u e u e _ f i x ( Q U E U E * q u e u e ) ; 00116 00117 # d e f i n e i s _ q u e u e _ i n i t e d ( q u e u e ) ( ( q u e u e ) - > r o o t ! = 0 ) 00118 00119 # i f d e f _ _ c p l u s p l u s 00120 00121 } 00122 00123 # e n d i f 00124 00125 # e n d i f 00126 00127