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 _ m y _ b i t m a p _ h _ 00024 00025 # d e f i n e _ m y _ b i t m a p _ h _ 00026 00027 # d e f i n e M Y _ B I T _ N O N E ( ~ ( u i n t ) 0 ) 00028 00029 # i n c l u d e < m _ s t r i n g . h > 00030 00031 t y p e d e f u i n t 3 2 m y _ b i t m a p _ m a p ; 00032 00033 t y p e d e f s t r u c t s t _ b i t m a p 00034 00035 { 00036 00037 m y _ b i t m a p _ m a p * b i t m a p ; 00038 00039 u i n t n _ b i t s ; / * n u m b e r o f b i t s o c c u p i e d b y t h e a b o v e * / 00040 00041 m y _ b i t m a p _ m a p l a s t _ w o r d _ m a s k ; 00042 00043 m y _ b i t m a p _ m a p * l a s t _ w o r d _ p t r ; 00044 00045 / * 00046 00047 m u t e x w i l l b e a c q u i r e d f o r t h e d u r a t i o n o f e a c h b i t m a p o p e r a t i o n i f 00048 00049 t h r e a d _ s a f e f l a g i n b i t m a p _ i n i t w a s s e t . O t h e r w i s e , w e o p t i m i z e b y n o t 00050 00051 a c q u i r i n g t h e m u t e x 00052 00053 * / 00054 00055 # i f d e f T H R E A D 00056 00057 p t h r e a d _ m u t e x _ t * m u t e x ; 00058 00059 # e n d i f 00060 00061 } M Y _ B I T M A P ; 00062 00063 # i f d e f _ _ c p l u s p l u s 00064 00065 e x t e r n " C " { 00066 00067 # e n d i f 00068 00069 e x t e r n v o i d c r e a t e _ l a s t _ w o r d _ m a s k ( M Y _ B I T M A P * m a p ) ; 00070 00071 e x t e r n m y _ b o o l b i t m a p _ i n i t ( M Y _ B I T M A P * m a p , m y _ b i t m a p _ m a p * b u f , u i n t n _ b i t s , 00072 00073 m y _ b o o l t h r e a d _ s a f e ) ; 00074 00075 e x t e r n m y _ b o o l b i t m a p _ i s _ c l e a r _ a l l ( c o n s t M Y _ B I T M A P * m a p ) ; 00076 00077 e x t e r n m y _ b o o l b i t m a p _ i s _ p r e f i x ( c o n s t M Y _ B I T M A P * m a p , u i n t p r e f i x _ s i z e ) ; 00078 00079 e x t e r n m y _ b o o l b i t m a p _ i s _ s e t _ a l l ( c o n s t M Y _ B I T M A P * m a p ) ; 00080 00081 e x t e r n m y _ b o o l b i t m a p _ i s _ s u b s e t ( c o n s t M Y _ B I T M A P * m a p 1 , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00082 00083 e x t e r n m y _ b o o l b i t m a p _ i s _ o v e r l a p p i n g ( c o n s t M Y _ B I T M A P * m a p 1 , 00084 00085 c o n s t M Y _ B I T M A P * m a p 2 ) ; 00086 00087 e x t e r n m y _ b o o l b i t m a p _ t e s t _ a n d _ s e t ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00088 00089 e x t e r n m y _ b o o l b i t m a p _ t e s t _ a n d _ c l e a r ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00090 00091 e x t e r n m y _ b o o l b i t m a p _ f a s t _ t e s t _ a n d _ s e t ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00092 00093 e x t e r n u i n t b i t m a p _ s e t _ n e x t ( M Y _ B I T M A P * m a p ) ; 00094 00095 e x t e r n u i n t b i t m a p _ g e t _ f i r s t ( c o n s t M Y _ B I T M A P * m a p ) ; 00096 00097 e x t e r n u i n t b i t m a p _ g e t _ f i r s t _ s e t ( c o n s t M Y _ B I T M A P * m a p ) ; 00098 00099 e x t e r n u i n t b i t m a p _ b i t s _ s e t ( c o n s t M Y _ B I T M A P * m a p ) ; 00100 00101 e x t e r n v o i d b i t m a p _ f r e e ( M Y _ B I T M A P * m a p ) ; 00102 00103 e x t e r n v o i d b i t m a p _ s e t _ a b o v e ( M Y _ B I T M A P * m a p , u i n t f r o m _ b y t e , u i n t u s e _ b i t ) ; 00104 00105 e x t e r n v o i d b i t m a p _ s e t _ p r e f i x ( M Y _ B I T M A P * m a p , u i n t p r e f i x _ s i z e ) ; 00106 00107 e x t e r n v o i d b i t m a p _ i n t e r s e c t ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00108 00109 e x t e r n v o i d b i t m a p _ s u b t r a c t ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00110 00111 e x t e r n v o i d b i t m a p _ u n i o n ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00112 00113 e x t e r n v o i d b i t m a p _ x o r ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00114 00115 e x t e r n v o i d b i t m a p _ i n v e r t ( M Y _ B I T M A P * m a p ) ; 00116 00117 e x t e r n v o i d b i t m a p _ c o p y ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00118 00119 e x t e r n u i n t b i t m a p _ l o c k _ s e t _ n e x t ( M Y _ B I T M A P * m a p ) ; 00120 00121 e x t e r n v o i d b i t m a p _ l o c k _ c l e a r _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00122 00123 # i f d e f N O T _ U S E D 00124 00125 e x t e r n u i n t b i t m a p _ l o c k _ b i t s _ s e t ( c o n s t M Y _ B I T M A P * m a p ) ; 00126 00127 e x t e r n m y _ b o o l b i t m a p _ l o c k _ i s _ s e t _ a l l ( c o n s t M Y _ B I T M A P * m a p ) ; 00128 00129 e x t e r n u i n t b i t m a p _ l o c k _ g e t _ f i r s t ( c o n s t M Y _ B I T M A P * m a p ) ; 00130 00131 e x t e r n u i n t b i t m a p _ l o c k _ g e t _ f i r s t _ s e t ( c o n s t M Y _ B I T M A P * m a p ) ; 00132 00133 e x t e r n m y _ b o o l b i t m a p _ l o c k _ i s _ s u b s e t ( c o n s t M Y _ B I T M A P * m a p 1 , 00134 00135 c o n s t M Y _ B I T M A P * m a p 2 ) ; 00136 00137 e x t e r n m y _ b o o l b i t m a p _ l o c k _ i s _ p r e f i x ( c o n s t M Y _ B I T M A P * m a p , u i n t p r e f i x _ s i z e ) ; 00138 00139 e x t e r n m y _ b o o l b i t m a p _ l o c k _ i s _ s e t ( c o n s t M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00140 00141 e x t e r n m y _ b o o l b i t m a p _ l o c k _ i s _ c l e a r _ a l l ( c o n s t M Y _ B I T M A P * m a p ) ; 00142 00143 e x t e r n m y _ b o o l b i t m a p _ l o c k _ c m p ( c o n s t M Y _ B I T M A P * m a p 1 , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00144 00145 e x t e r n v o i d b i t m a p _ l o c k _ s e t _ a l l ( M Y _ B I T M A P * m a p ) ; 00146 00147 e x t e r n v o i d b i t m a p _ l o c k _ c l e a r _ a l l ( M Y _ B I T M A P * m a p ) ; 00148 00149 e x t e r n v o i d b i t m a p _ l o c k _ s e t _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00150 00151 e x t e r n v o i d b i t m a p _ l o c k _ f l i p _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t m a p _ b i t ) ; 00152 00153 e x t e r n v o i d b i t m a p _ l o c k _ s e t _ p r e f i x ( M Y _ B I T M A P * m a p , u i n t p r e f i x _ s i z e ) ; 00154 00155 e x t e r n v o i d b i t m a p _ l o c k _ i n t e r s e c t ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00156 00157 e x t e r n v o i d b i t m a p _ l o c k _ s u b t r a c t ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00158 00159 e x t e r n v o i d b i t m a p _ l o c k _ u n i o n ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00160 00161 e x t e r n v o i d b i t m a p _ l o c k _ x o r ( M Y _ B I T M A P * m a p , c o n s t M Y _ B I T M A P * m a p 2 ) ; 00162 00163 e x t e r n v o i d b i t m a p _ l o c k _ i n v e r t ( M Y _ B I T M A P * m a p ) ; 00164 00165 # e n d i f 00166 00167 / * F a s t , n o t t h r e a d s a f e , b i t m a p f u n c t i o n s * / 00168 00169 # d e f i n e b i t m a p _ b u f f e r _ s i z e ( b i t s ) ( ( ( b i t s ) + 3 1 ) / 3 2 ) * 4 00170 00171 # d e f i n e n o _ b y t e s _ i n _ m a p ( m a p ) ( ( ( m a p ) - > n _ b i t s + 7 ) / 8 ) 00172 00173 # d e f i n e n o _ w o r d s _ i n _ m a p ( m a p ) ( ( ( m a p ) - > n _ b i t s + 3 1 ) / 3 2 ) 00174 00175 # d e f i n e b y t e s _ w o r d _ a l i g n e d ( b y t e s ) ( 4 * ( ( b y t e s + 3 ) / 4 ) ) 00176 00177 # d e f i n e _ b i t m a p _ s e t _ b i t ( M A P , B I T ) ( ( ( u c h a r * ) ( M A P ) - > b i t m a p ) [ ( B I T ) / 8 ] \ 00178 00179 | = ( 1 < < ( ( B I T ) & 7 ) ) ) 00180 00181 # d e f i n e _ b i t m a p _ f l i p _ b i t ( M A P , B I T ) ( ( ( u c h a r * ) ( M A P ) - > b i t m a p ) [ ( B I T ) / 8 ] \ 00182 00183 ^ = ( 1 < < ( ( B I T ) & 7 ) ) ) 00184 00185 # d e f i n e _ b i t m a p _ c l e a r _ b i t ( M A P , B I T ) ( ( ( u c h a r * ) ( M A P ) - > b i t m a p ) [ ( B I T ) / 8 ] \ 00186 00187 & = ~ ( 1 < < ( ( B I T ) & 7 ) ) ) 00188 00189 # d e f i n e _ b i t m a p _ i s _ s e t ( M A P , B I T ) ( u i n t ) ( ( ( u c h a r * ) ( M A P ) - > b i t m a p ) [ ( B I T ) / 8 ] \ 00190 00191 & ( 1 < < ( ( B I T ) & 7 ) ) ) 00192 00193 / * 00194 00195 W A R N I N G ! 00196 00197 T h e b e l o w s y m b o l s a r e i n l i n e f u n c t i o n s i n D E B U G b u i l d s a n d m a c r o s i n 00198 00199 n o n - D E B U G b u i l d s . T h e l a t t e r e v a l u a t e t h e i r ' b i t ' a r g u m e n t t w i c e . 00200 00201 N E V E R u s e a n i n c r e m e n t / d e c r e m e n t o p e r a t o r w i t h t h e ' b i t ' a r g u m e n t . 00202 00203 I t w o u l d w o r k w i t h D E B U G b u i l d s , b u t f a i l s l a t e r i n p r o d u c t i o n b u i l d s ! 00204 00205 F O R B I D D E N : b i t m a p _ s e t _ b i t ( $ m y _ b i t m a p , ( f i e l d + + ) - > f i e l d _ i n d e x ) ; 00206 00207 * / 00208 00209 # i f n d e f D B U G _ O F F 00210 00211 s t a t i c i n l i n e v o i d 00212 00213 b i t m a p _ s e t _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t ) 00214 00215 { 00216 00217 D B U G _ A S S E R T ( b i t < ( m a p ) - > n _ b i t s ) ; 00218 00219 _ b i t m a p _ s e t _ b i t ( m a p , b i t ) ; 00220 00221 } 00222 00223 s t a t i c i n l i n e v o i d 00224 00225 b i t m a p _ f l i p _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t ) 00226 00227 { 00228 00229 D B U G _ A S S E R T ( b i t < ( m a p ) - > n _ b i t s ) ; 00230 00231 _ b i t m a p _ f l i p _ b i t ( m a p , b i t ) ; 00232 00233 } 00234 00235 s t a t i c i n l i n e v o i d 00236 00237 b i t m a p _ c l e a r _ b i t ( M Y _ B I T M A P * m a p , u i n t b i t ) 00238 00239 { 00240 00241 D B U G _ A S S E R T ( b i t < ( m a p ) - > n _ b i t s ) ; 00242 00243 _ b i t m a p _ c l e a r _ b i t ( m a p , b i t ) ; 00244 00245 } 00246 00247 s t a t i c i n l i n e u i n t 00248 00249 b i t m a p _ i s _ s e t ( c o n s t M Y _ B I T M A P * m a p , u i n t b i t ) 00250 00251 { 00252 00253 D B U G _ A S S E R T ( b i t < ( m a p ) - > n _ b i t s ) ; 00254 00255 r e t u r n _ b i t m a p _ i s _ s e t ( m a p , b i t ) ; 00256 00257 } 00258 00259 # e l s e 00260 00261 # d e f i n e b i t m a p _ s e t _ b i t ( M A P , B I T ) _ b i t m a p _ s e t _ b i t ( M A P , B I T ) 00262 00263 # d e f i n e b i t m a p _ f l i p _ b i t ( M A P , B I T ) _ b i t m a p _ f l i p _ b i t ( M A P , B I T ) 00264 00265 # d e f i n e b i t m a p _ c l e a r _ b i t ( M A P , B I T ) _ b i t m a p _ c l e a r _ b i t ( M A P , B I T ) 00266 00267 # d e f i n e b i t m a p _ i s _ s e t ( M A P , B I T ) _ b i t m a p _ i s _ s e t ( M A P , B I T ) 00268 00269 # e n d i f 00270 00271 s t a t i c i n l i n e m y _ b o o l b i t m a p _ c m p ( c o n s t M Y _ B I T M A P * m a p 1 , c o n s t M Y _ B I T M A P * m a p 2 ) 00272 00273 { 00274 00275 * ( m a p 1 ) - > l a s t _ w o r d _ p t r | = ( m a p 1 ) - > l a s t _ w o r d _ m a s k ; 00276 00277 * ( m a p 2 ) - > l a s t _ w o r d _ p t r | = ( m a p 2 ) - > l a s t _ w o r d _ m a s k ; 00278 00279 r e t u r n m e m c m p ( ( m a p 1 ) - > b i t m a p , ( m a p 2 ) - > b i t m a p , 4 * n o _ w o r d s _ i n _ m a p ( ( m a p 1 ) ) ) = = 0 ; 00280 00281 } 00282 00283 # d e f i n e b i t m a p _ c l e a r _ a l l ( M A P ) \ 00284 00285 { m e m s e t ( ( M A P ) - > b i t m a p , 0 , 4 * n o _ w o r d s _ i n _ m a p ( ( M A P ) ) ) ; } 00286 00287 # d e f i n e b i t m a p _ s e t _ a l l ( M A P ) \ 00288 00289 ( m e m s e t ( ( M A P ) - > b i t m a p , 0 x F F , 4 * n o _ w o r d s _ i n _ m a p ( ( M A P ) ) ) ) 00290 00291 / * * 00292 00293 c h e c k , s e t a n d c l e a r a b i t o f i n t e r e s t o f a n i n t e g e r . 00294 00295 I f t h e b i t i s o u t o f r a n g e @ r e t v a l - 1 . O t h e r w i s e 00296 00297 b i t _ i s _ s e t @ r e t u r n 0 o r 1 r e f l e c t i n g t h e b i t i s s e t o r n o t ; 00298 00299 b i t _ d o _ s e t @ r e t u r n 1 ( b i t i s s e t 1 ) 00300 00301 b i t _ d o _ c l e a r @ r e t u r n 0 ( b i t i s c l e a r e d t o 0 ) 00302 00303 * / 00304 00305 # d e f i n e b i t _ i s _ s e t ( I , B ) ( s i z e o f ( I ) * C H A R _ B I T > ( B ) ? \ 00306 00307 ( ( ( I ) & ( 1 U L L < < ( B ) ) ) = = 0 ? 0 : 1 ) : - 1 ) 00308 00309 # d e f i n e b i t _ d o _ s e t ( I , B ) ( s i z e o f ( I ) * C H A R _ B I T > ( B ) ? \ 00310 00311 ( ( I ) | = ( 1 U L L < < ( B ) ) , 1 ) : - 1 ) 00312 00313 # d e f i n e b i t _ d o _ c l e a r ( I , B ) ( s i z e o f ( I ) * C H A R _ B I T > ( B ) ? \ 00314 00315 ( ( I ) & = ~ ( 1 U L L < < ( B ) ) , 0 ) : - 1 ) 00316 00317 # i f d e f _ _ c p l u s p l u s 00318 00319 } 00320 00321 # e n d i f 00322 00323 # e n d i f / * _ m y _ b i t m a p _ h _ * / 00324 00325