mem.h

00001 /***************************************************************************
00002     begin                : Thu Jul 31 2003
00003     copyright            : (C) 2003 - 2006 by Alper Akcan
00004     email                : distchx@yahoo.com
00005  ***************************************************************************/
00006 
00007 /***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU Lesser General Public License as        *
00011  *   published by the Free Software Foundation; either version 2.1 of the  *
00012  *   License, or (at your option) any later version.                       *
00013  *                                                                         *
00014  ***************************************************************************/
00015 
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019 
00020 #define memcpyloop1()\
00021         while (n--) {\
00022                 if (*m == id) {\
00023                         *d = *s;\
00024                 }\
00025                 d++;\
00026                 s++;\
00027                 m++;\
00028         }
00029 
00030 #define memcpyloop2()\
00031         while (n--) {\
00032                 if ((*m == id) && (*m_)) {\
00033                         *d = *s;\
00034                 }\
00035                 d++;\
00036                 s++;\
00037                 m++;\
00038                 m_++;\
00039         }
00040 
00041 #define memcpyloop3()\
00042         while (n--) {\
00043                 *d++ = *s++;\
00044         }
00045 
00046 #define memcpyloop4()\
00047         while (n--) {\
00048                 if (*m) {\
00049                         *d = *s;\
00050                 }\
00051                 d++;\
00052                 s++;\
00053                 m++;\
00054         }               
00055 
00056 #define memcpyloop5()\
00057         while (n--) {\
00058                 a = ~*m;\
00059                 if (a != 0xff) {\
00060                         if (a == 0x00) {\
00061                                 *d = *s;\
00062                         } else {\
00063                                 dr = (*d >> ro) << rl;\
00064                                 dg = (*d >> go) << gl;\
00065                                 db = (*d >> bo) << bl;\
00066                                 sr = (*s >> ro) << rl;\
00067                                 sg = (*s >> go) << gl;\
00068                                 sb = (*s >> bo) << bl;\
00069                                 dr  = (a * (dr - sr) >> 8) + sr;\
00070                                 dg  = (a * (dg - sg) >> 8) + sg;\
00071                                 db  = (a * (db - sb) >> 8) + sb;\
00072                                 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00073                         }\
00074                 }\
00075                 d++;\
00076                 s++;\
00077                 m++;\
00078         }               
00079 
00080 #define memcpyloop6()\
00081         while (n--) {\
00082                 a = ~*m_;\
00083                 if ((*m == id) && (a != 0xff)) {\
00084                         if (a == 0x00) {\
00085                                 *d = *s;\
00086                         } else {\
00087                                 dr = (*d >> ro) << rl;\
00088                                 dg = (*d >> go) << gl;\
00089                                 db = (*d >> bo) << bl;\
00090                                 sr = (*s >> ro) << rl;\
00091                                 sg = (*s >> go) << gl;\
00092                                 sb = (*s >> bo) << bl;\
00093                                 dr  = (a * (dr - sr) >> 8) + sr;\
00094                                 dg  = (a * (dg - sg) >> 8) + sg;\
00095                                 db  = (a * (db - sb) >> 8) + sb;\
00096                                 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00097                         }\
00098                 }\
00099                 d++;\
00100                 s++;\
00101                 m++;\
00102                 m_++;\
00103         }
00104 
00105 #define memcpyloop7()\
00106         while (n--) {\
00107                 dr = *s >> 0x18;\
00108                 dg = *s >> 0x10;\
00109                 db = *s >> 0x08;\
00110                 *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00111                 d++;\
00112                 s++;\
00113         }
00114 
00115 #define memcpyloop8()\
00116         while (n--) {\
00117                 if (*m == id) {\
00118                         dr = *s >> 0x18;\
00119                         dg = *s >> 0x10;\
00120                         db = *s >> 0x08;\
00121                         *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00122                 }\
00123                 d++;\
00124                 s++;\
00125                 m++;\
00126         }
00127 
00128 #define memcpyloop9()\
00129         while (n--) {\
00130                 a = *s;\
00131                 if (a != 0xff) {\
00132                         sr = *s >> 0x18;\
00133                         sg = *s >> 0x10;\
00134                         sb = *s >> 0x08;\
00135                         if (a == 0x00) {\
00136                                 dr = sr;\
00137                                 dg = sg;\
00138                                 db = sb;\
00139                         } else {\
00140                                 dr = (*d >> ro) << rl;\
00141                                 dg = (*d >> go) << gl;\
00142                                 db = (*d >> bo) << bl;\
00143                                 dr  = (a * (dr - sr) >> 8) + sr;\
00144                                 dg  = (a * (dg - sg) >> 8) + sg;\
00145                                 db  = (a * (db - sb) >> 8) + sb;\
00146                         }\
00147                         *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00148                 }\
00149                 d++;\
00150                 s++;\
00151         }
00152 
00153 #define memcpyloop10()\
00154         while (n--) {\
00155                 a = *s;\
00156                 if ((*m == id) && (a != 0xff)) {\
00157                         sr = *s >> 0x18;\
00158                         sg = *s >> 0x10;\
00159                         sb = *s >> 0x08;\
00160                         if (a == 0x00) {\
00161                                 dr = sr;\
00162                                 dg = sg;\
00163                                 db = sb;\
00164                         } else {\
00165                                 dr = (*d >> ro) << rl;\
00166                                 dg = (*d >> go) << gl;\
00167                                 db = (*d >> bo) << bl;\
00168                                 dr  = (a * (dr - sr) >> 8) + sr;\
00169                                 dg  = (a * (dg - sg) >> 8) + sg;\
00170                                 db  = (a * (db - sb) >> 8) + sb;\
00171                         }\
00172                         *d = ((dr >> rl) << ro) | ((dg >> gl) << go) | ((db >> bl) << bo);\
00173                 }\
00174                 d++;\
00175                 s++;\
00176                 m++;\
00177         }
00178 
00179 #define memsetloop1()\
00180         while (n--) {\
00181                 if (*m == id) {\
00182                         *d = dc;\
00183                 }\
00184                 d++;\
00185                 m++;\
00186         }
00187 
00188 #define memsetloop3()\
00189         while (n--) {\
00190                 *d++ = dc;\
00191         }
00192 
00193 static inline void s_memcpy1o (unsigned char *m, int id, void *dest, void *src, int n)
00194 {
00195         unsigned char *d = (unsigned char *) dest;
00196         unsigned char *s = (unsigned char *) src;
00197         memcpyloop1();
00198 }
00199 
00200 static inline void s_memcpy2o (unsigned char *m, int id, void *dest, void *src, int n)
00201 {
00202         unsigned short int *d = (unsigned short int *) dest;
00203         unsigned short int *s = (unsigned short int *) src;
00204         memcpyloop1();
00205 }
00206 
00207 static inline void s_memcpy4o (unsigned char *m, int id, void *dest, void *src, int n)
00208 {
00209         unsigned int *d = (unsigned int *) dest;
00210         unsigned int *s = (unsigned int *) src;
00211         memcpyloop1();
00212 }
00213 
00214 static inline void s_memcpy1om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00215 {
00216         unsigned char *d = (unsigned char *) dest;
00217         unsigned char *s = (unsigned char *) src;
00218         unsigned char *m_ = (unsigned char *) mask;
00219         memcpyloop2();
00220 }
00221 
00222 static inline void s_memcpy2om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00223 {
00224         unsigned short int *d = (unsigned short int *) dest;
00225         unsigned short int *s = (unsigned short int *) src;
00226         unsigned char *m_ = (unsigned char *) mask;
00227         memcpyloop2();
00228 }
00229 
00230 static inline void s_memcpy4om (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n)
00231 {
00232         unsigned int *d = (unsigned int *) dest;
00233         unsigned int *s = (unsigned int *) src;
00234         unsigned char *m_ = (unsigned char *) mask;
00235         memcpyloop2();
00236 }
00237 
00238 static inline void s_memcpy1oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00239 {
00240         unsigned char a;
00241         unsigned char sr;
00242         unsigned char sg;
00243         unsigned char sb;
00244         unsigned char dr;
00245         unsigned char dg;
00246         unsigned char db;
00247         unsigned char *d = (unsigned char *) dest;
00248         unsigned char *s = (unsigned char *) src;
00249         unsigned char *m_ = (unsigned char *) mask;
00250         rl = 8 - rl;
00251         gl = 8 - gl;
00252         bl = 8 - bl;
00253         memcpyloop6();
00254 }
00255 
00256 static inline void s_memcpy2oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00257 {
00258         unsigned char a;
00259         unsigned char sr;
00260         unsigned char sg;
00261         unsigned char sb;
00262         unsigned char dr;
00263         unsigned char dg;
00264         unsigned char db;
00265         unsigned short int *d = (unsigned short int *) dest;
00266         unsigned short int *s = (unsigned short int *) src;
00267         unsigned char *m_ = (unsigned char *) mask;
00268         rl = 8 - rl;
00269         gl = 8 - gl;
00270         bl = 8 - bl;
00271         memcpyloop6();
00272 }
00273 
00274 static inline void s_memcpy4oa (unsigned char *m, int id, void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00275 {
00276         unsigned char a;
00277         unsigned char sr;
00278         unsigned char sg;
00279         unsigned char sb;
00280         unsigned char dr;
00281         unsigned char dg;
00282         unsigned char db;
00283         unsigned int *d = (unsigned int *) dest;
00284         unsigned int *s = (unsigned int *) src;
00285         unsigned char *m_ = (unsigned char *) mask;
00286         rl = 8 - rl;
00287         gl = 8 - gl;
00288         bl = 8 - bl;
00289         memcpyloop6();
00290 }
00291 
00292 static inline void s_memcpy1orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00293 {
00294         unsigned char dr;
00295         unsigned char dg;
00296         unsigned char db;
00297         unsigned char *d = (unsigned char *) dest;
00298         unsigned int *s = (unsigned int *) rgb;
00299         rl = 8 - rl;
00300         gl = 8 - gl;
00301         bl = 8 - bl;
00302         memcpyloop8();
00303 }
00304 
00305 static inline void s_memcpy2orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00306 {
00307         unsigned char dr;
00308         unsigned char dg;
00309         unsigned char db;
00310         unsigned short int *d = (unsigned short int *) dest;
00311         unsigned int *s = (unsigned int *) rgb;
00312         rl = 8 - rl;
00313         gl = 8 - gl;
00314         bl = 8 - bl;
00315         memcpyloop8();
00316 }
00317 
00318 static inline void s_memcpy4orgb (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00319 {
00320         unsigned char dr;
00321         unsigned char dg;
00322         unsigned char db;
00323         unsigned int *d = (unsigned int *) dest;
00324         unsigned int *s = (unsigned int *) rgb;
00325         rl = 8 - rl;
00326         gl = 8 - gl;
00327         bl = 8 - bl;
00328         memcpyloop8();
00329 }
00330 
00331 static inline void s_memcpy1orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00332 {
00333         unsigned char a;
00334         unsigned char sr;
00335         unsigned char sg;
00336         unsigned char sb;
00337         unsigned char dr;
00338         unsigned char dg;
00339         unsigned char db;
00340         unsigned char *d = (unsigned char *) dest;
00341         unsigned int *s = (unsigned int *) rgb;
00342         rl = 8 - rl;
00343         gl = 8 - gl;
00344         bl = 8 - bl;
00345         memcpyloop10();
00346 }
00347 
00348 static inline void s_memcpy2orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00349 {
00350         unsigned char a;
00351         unsigned char sr;
00352         unsigned char sg;
00353         unsigned char sb;
00354         unsigned char dr;
00355         unsigned char dg;
00356         unsigned char db;
00357         unsigned short int *d = (unsigned short int *) dest;
00358         unsigned int *s = (unsigned int *) rgb;
00359         rl = 8 - rl;
00360         gl = 8 - gl;
00361         bl = 8 - bl;
00362         memcpyloop10();
00363 }
00364 
00365 static inline void s_memcpy4orgba (unsigned char *m, int id, void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00366 {
00367         unsigned char a;
00368         unsigned char sr;
00369         unsigned char sg;
00370         unsigned char sb;
00371         unsigned char dr;
00372         unsigned char dg;
00373         unsigned char db;
00374         unsigned int *d = (unsigned int *) dest;
00375         unsigned int *s = (unsigned int *) rgb;
00376         rl = 8 - rl;
00377         gl = 8 - gl;
00378         bl = 8 - bl;
00379         memcpyloop10();
00380 }
00381 
00382 static inline void s_memcpy1 (void *dest, void *src, int n)
00383 {
00384         unsigned char *d = (unsigned char *) dest;
00385         unsigned char *s = (unsigned char *) src;
00386         memcpyloop3();
00387 }
00388 
00389 static inline void s_memcpy2 (void *dest, void *src, int n)
00390 {
00391         unsigned short int *d = (unsigned short int *) dest;
00392         unsigned short int *s = (unsigned short int *) src;
00393         memcpyloop3();
00394 }
00395 
00396 static inline void s_memcpy4 (void *dest, void *src, int n)
00397 {
00398         unsigned int *d = (unsigned int *) dest;
00399         unsigned int *s = (unsigned int *) src;
00400         memcpyloop3();
00401 }
00402 
00403 static inline void s_memcpy1m (void *dest, void *src, unsigned char *mask, int n)
00404 {
00405         unsigned char *m = (unsigned char *) mask;
00406         unsigned char *d = (unsigned char *) dest;
00407         unsigned char *s = (unsigned char *) src;
00408         memcpyloop4();
00409 }
00410 
00411 static inline void s_memcpy2m (void *dest, void *src, unsigned char *mask, int n)
00412 {
00413         unsigned char *m = (unsigned char *) mask;
00414         unsigned short int *d = (unsigned short int *) dest;
00415         unsigned short int *s = (unsigned short int *) src;
00416         memcpyloop4();
00417 }
00418 
00419 static inline void s_memcpy4m (void *dest, void *src, unsigned char *mask, int n)
00420 {
00421         unsigned char *m = (unsigned char *) mask;
00422         unsigned int *d = (unsigned int *) dest;
00423         unsigned int *s = (unsigned int *) src;
00424         memcpyloop4();
00425 }
00426 
00427 static inline void s_memcpy1a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00428 {
00429         unsigned char a;
00430         unsigned char sr;
00431         unsigned char sg;
00432         unsigned char sb;
00433         unsigned char dr;
00434         unsigned char dg;
00435         unsigned char db;
00436         unsigned char *m = (unsigned char *) mask;
00437         unsigned char *d = (unsigned char *) dest;
00438         unsigned char *s = (unsigned char *) src;
00439         rl = 8 - rl;
00440         gl = 8 - gl;
00441         bl = 8 - bl;
00442         memcpyloop5();
00443 }
00444 
00445 static inline void s_memcpy2a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00446 {
00447         unsigned char a;
00448         unsigned char sr;
00449         unsigned char sg;
00450         unsigned char sb;
00451         unsigned char dr;
00452         unsigned char dg;
00453         unsigned char db;
00454         unsigned char *m = (unsigned char *) mask;
00455         unsigned short int *d = (unsigned short int *) dest;
00456         unsigned short int *s = (unsigned short int *) src;
00457         rl = 8 - rl;
00458         gl = 8 - gl;
00459         bl = 8 - bl;
00460         memcpyloop5();
00461 }
00462 
00463 static inline void s_memcpy4a (void *dest, void *src, unsigned char *mask, int n, int rl, int gl, int bl, int ro, int go, int bo)
00464 {
00465         unsigned char a;
00466         unsigned char sr;
00467         unsigned char sg;
00468         unsigned char sb;
00469         unsigned char dr;
00470         unsigned char dg;
00471         unsigned char db;
00472         unsigned char *m = (unsigned char *) mask;
00473         unsigned int *d = (unsigned int *) dest;
00474         unsigned int *s = (unsigned int *) src;
00475         rl = 8 - rl;
00476         gl = 8 - gl;
00477         bl = 8 - bl;
00478         memcpyloop5();
00479 }
00480 
00481 static inline void s_memcpy1rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00482 {
00483         unsigned char dr;
00484         unsigned char dg;
00485         unsigned char db;
00486         unsigned char *d = (unsigned char *) dest;
00487         unsigned int *s = (unsigned int *) rgb;
00488         rl = 8 - rl;
00489         gl = 8 - gl;
00490         bl = 8 - bl;
00491         memcpyloop7();
00492 }
00493 
00494 static inline void s_memcpy2rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00495 {
00496         unsigned char dr;
00497         unsigned char dg;
00498         unsigned char db;
00499         unsigned short int *d = (unsigned short int *) dest;
00500         unsigned int *s = (unsigned int *) rgb;
00501         rl = 8 - rl;
00502         gl = 8 - gl;
00503         bl = 8 - bl;
00504         memcpyloop7();
00505 }
00506 
00507 static inline void s_memcpy4rgb (void *dest, unsigned int *rgb, int n, int rl, int gl, int bl, int ro, int go, int bo)
00508 {
00509         unsigned char dr;
00510         unsigned char dg;
00511         unsigned char db;
00512         unsigned int *d = (unsigned int *) dest;
00513         unsigned int *s = (unsigned int *) rgb;
00514         rl = 8 - rl;
00515         gl = 8 - gl;
00516         bl = 8 - bl;
00517         memcpyloop7();
00518 }
00519 
00520 static inline void s_memcpy1rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00521 {
00522         unsigned char a;
00523         unsigned char sr;
00524         unsigned char sg;
00525         unsigned char sb;
00526         unsigned char dr;
00527         unsigned char dg;
00528         unsigned char db;
00529         unsigned char *d = (unsigned char *) dest;
00530         unsigned int *s = (unsigned int *) rgba;
00531         rl = 8 - rl;
00532         gl = 8 - gl;
00533         bl = 8 - bl;
00534         memcpyloop9();
00535 }
00536 
00537 static inline void s_memcpy2rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00538 {
00539         unsigned char a;
00540         unsigned char sr;
00541         unsigned char sg;
00542         unsigned char sb;
00543         unsigned char dr;
00544         unsigned char dg;
00545         unsigned char db;
00546         unsigned short int *d = (unsigned short int *) dest;
00547         unsigned int *s = (unsigned int *) rgba;
00548         rl = 8 - rl;
00549         gl = 8 - gl;
00550         bl = 8 - bl;
00551         memcpyloop9();
00552 }
00553 
00554 static inline void s_memcpy4rgba (void *dest, unsigned int *rgba, int n, int rl, int gl, int bl, int ro, int go, int bo)
00555 {
00556         unsigned char a;
00557         unsigned char sr;
00558         unsigned char sg;
00559         unsigned char sb;
00560         unsigned char dr;
00561         unsigned char dg;
00562         unsigned char db;
00563         unsigned int *d = (unsigned int *) dest;
00564         unsigned int *s = (unsigned int *) rgba;
00565         rl = 8 - rl;
00566         gl = 8 - gl;
00567         bl = 8 - bl;
00568         memcpyloop9();
00569 }
00570 
00571 static inline void s_memset1o (unsigned char *m, int id, void *dest, int c, int n)
00572 {
00573         unsigned char dc = (unsigned char) c;
00574         unsigned char *d = (unsigned char *) dest;
00575         memsetloop1();
00576 }
00577 
00578 static inline void s_memset2o (unsigned char *m, int id, void *dest, int c, int n)
00579 {
00580         unsigned short int dc = (unsigned short int) c;
00581         unsigned short int *d = (unsigned short int *) dest;
00582         memsetloop1();
00583 }
00584 
00585 static inline void s_memset4o (unsigned char *m, int id, void *dest, int c, int n)
00586 {
00587         unsigned int dc = (unsigned int) c;
00588         unsigned int *d = (unsigned int *) dest;
00589         memsetloop1();
00590 }
00591 
00592 static inline void s_memset1 (void *dest, int c, int n)
00593 {
00594         unsigned char dc = (unsigned char) c;
00595         unsigned char *d = (unsigned char *) dest;
00596         memsetloop3();
00597 }
00598 
00599 static inline void s_memset2 (void *dest, int c, int n)
00600 {
00601         unsigned short int dc = (unsigned short int) c;
00602         unsigned short int *d = (unsigned short int *) dest;
00603         memsetloop3();
00604 }
00605 
00606 static inline void s_memset4 (void *dest, int c, int n)
00607 {
00608         unsigned int dc = (unsigned int) c;
00609         unsigned int *d = (unsigned int *) dest;
00610         memsetloop3();
00611 }
00612 
00613 #ifdef __cplusplus
00614 }
00615 #endif

Generated on Wed Dec 27 17:53:06 2006 for xynth-0.8.40 by  doxygen 1.4.7