LCOV - code coverage report
Current view: directory - frmts/gtiff/libtiff - tif_swab.c (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 88 49 55.7 %
Date: 2011-12-18 Functions: 13 8 61.5 %

       1                 : /* $Id: tif_swab.c,v 1.13 2010-03-10 18:56:49 bfriesen Exp $ */
       2                 : 
       3                 : /*
       4                 :  * Copyright (c) 1988-1997 Sam Leffler
       5                 :  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
       6                 :  *
       7                 :  * Permission to use, copy, modify, distribute, and sell this software and 
       8                 :  * its documentation for any purpose is hereby granted without fee, provided
       9                 :  * that (i) the above copyright notices and this permission notice appear in
      10                 :  * all copies of the software and related documentation, and (ii) the names of
      11                 :  * Sam Leffler and Silicon Graphics may not be used in any advertising or
      12                 :  * publicity relating to the software without the specific, prior written
      13                 :  * permission of Sam Leffler and Silicon Graphics.
      14                 :  * 
      15                 :  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
      16                 :  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
      17                 :  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
      18                 :  * 
      19                 :  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
      20                 :  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
      21                 :  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
      22                 :  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
      23                 :  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
      24                 :  * OF THIS SOFTWARE.
      25                 :  */
      26                 : 
      27                 : /*
      28                 :  * TIFF Library Bit & Byte Swapping Support.
      29                 :  *
      30                 :  * XXX We assume short = 16-bits and long = 32-bits XXX
      31                 :  */
      32                 : #include "tiffiop.h"
      33                 : 
      34                 : #ifndef TIFFSwabShort
      35                 : void
      36           13900 : TIFFSwabShort(uint16* wp)
      37                 : {
      38           13900 :   register unsigned char* cp = (unsigned char*) wp;
      39                 :   unsigned char t;
      40                 :   assert(sizeof(uint16)==2);
      41           13900 :   t = cp[1]; cp[1] = cp[0]; cp[0] = t;
      42           13900 : }
      43                 : #endif
      44                 : 
      45                 : #ifndef TIFFSwabLong
      46                 : void
      47            6865 : TIFFSwabLong(uint32* lp)
      48                 : {
      49            6865 :   register unsigned char* cp = (unsigned char*) lp;
      50                 :   unsigned char t;
      51                 :   assert(sizeof(uint32)==4);
      52            6865 :   t = cp[3]; cp[3] = cp[0]; cp[0] = t;
      53            6865 :   t = cp[2]; cp[2] = cp[1]; cp[1] = t;
      54            6865 : }
      55                 : #endif
      56                 : 
      57                 : #ifndef TIFFSwabLong8
      58                 : void
      59             228 : TIFFSwabLong8(uint64* lp)
      60                 : {
      61             228 :   register unsigned char* cp = (unsigned char*) lp;
      62                 :   unsigned char t;
      63                 :   assert(sizeof(uint64)==8);
      64             228 :   t = cp[7]; cp[7] = cp[0]; cp[0] = t;
      65             228 :   t = cp[6]; cp[6] = cp[1]; cp[1] = t;
      66             228 :   t = cp[5]; cp[5] = cp[2]; cp[2] = t;
      67             228 :   t = cp[4]; cp[4] = cp[3]; cp[3] = t;
      68             228 : }
      69                 : #endif
      70                 : 
      71                 : #ifndef TIFFSwabArrayOfShort
      72                 : void
      73             610 : TIFFSwabArrayOfShort(register uint16* wp, tmsize_t n)
      74                 : {
      75                 :   register unsigned char* cp;
      76                 :   register unsigned char t;
      77                 :   assert(sizeof(uint16)==2);
      78                 :   /* XXX unroll loop some */
      79           70762 :   while (n-- > 0) {
      80           69542 :     cp = (unsigned char*) wp;
      81           69542 :     t = cp[1]; cp[1] = cp[0]; cp[0] = t;
      82           69542 :     wp++;
      83                 :   }
      84             610 : }
      85                 : #endif
      86                 : 
      87                 : #ifndef TIFFSwabArrayOfTriples
      88                 : void
      89               0 : TIFFSwabArrayOfTriples(register uint8* tp, tmsize_t n)
      90                 : {
      91                 :   unsigned char* cp;
      92                 :   unsigned char t;
      93                 : 
      94                 :   /* XXX unroll loop some */
      95               0 :   while (n-- > 0) {
      96               0 :     cp = (unsigned char*) tp;
      97               0 :     t = cp[2]; cp[2] = cp[0]; cp[0] = t;
      98               0 :     tp += 3;
      99                 :   }
     100               0 : }
     101                 : #endif
     102                 : 
     103                 : #ifndef TIFFSwabArrayOfLong
     104                 : void
     105             205 : TIFFSwabArrayOfLong(register uint32* lp, tmsize_t n)
     106                 : {
     107                 :   register unsigned char *cp;
     108                 :   register unsigned char t;
     109                 :   assert(sizeof(uint32)==4);
     110                 :   /* XXX unroll loop some */
     111          398070 :   while (n-- > 0) {
     112          397660 :     cp = (unsigned char *)lp;
     113          397660 :     t = cp[3]; cp[3] = cp[0]; cp[0] = t;
     114          397660 :     t = cp[2]; cp[2] = cp[1]; cp[1] = t;
     115          397660 :     lp++;
     116                 :   }
     117             205 : }
     118                 : #endif
     119                 : 
     120                 : #ifndef TIFFSwabArrayOfLong8
     121                 : void
     122             115 : TIFFSwabArrayOfLong8(register uint64* lp, tmsize_t n)
     123                 : {
     124                 :   register unsigned char *cp;
     125                 :   register unsigned char t;
     126                 :   assert(sizeof(uint64)==8);
     127                 :   /* XXX unroll loop some */
     128          800679 :   while (n-- > 0) {
     129          800449 :     cp = (unsigned char *)lp;
     130          800449 :     t = cp[7]; cp[7] = cp[0]; cp[0] = t;
     131          800449 :     t = cp[6]; cp[6] = cp[1]; cp[1] = t;
     132          800449 :     t = cp[5]; cp[5] = cp[2]; cp[2] = t;
     133          800449 :     t = cp[4]; cp[4] = cp[3]; cp[3] = t;
     134          800449 :     lp++;
     135                 :   }
     136             115 : }
     137                 : #endif
     138                 : 
     139                 : #ifndef TIFFSwabFloat
     140                 : void
     141               0 : TIFFSwabFloat(float* fp)
     142                 : {
     143               0 :   register unsigned char* cp = (unsigned char*) fp;
     144                 :   unsigned char t;
     145                 :   assert(sizeof(float)==4);
     146               0 :   t = cp[3]; cp[3] = cp[0]; cp[0] = t;
     147               0 :   t = cp[2]; cp[2] = cp[1]; cp[1] = t;
     148               0 : }
     149                 : #endif
     150                 : 
     151                 : #ifndef TIFFSwabArrayOfFloat
     152                 : void
     153               0 : TIFFSwabArrayOfFloat(register float* fp, tmsize_t n)
     154                 : {
     155                 :   register unsigned char *cp;
     156                 :   register unsigned char t;
     157                 :   assert(sizeof(float)==4);
     158                 :   /* XXX unroll loop some */
     159               0 :   while (n-- > 0) {
     160               0 :     cp = (unsigned char *)fp;
     161               0 :     t = cp[3]; cp[3] = cp[0]; cp[0] = t;
     162               0 :     t = cp[2]; cp[2] = cp[1]; cp[1] = t;
     163               0 :     fp++;
     164                 :   }
     165               0 : }
     166                 : #endif
     167                 : 
     168                 : #ifndef TIFFSwabDouble
     169                 : void
     170               0 : TIFFSwabDouble(double *dp)
     171                 : {
     172               0 :   register unsigned char* cp = (unsigned char*) dp;
     173                 :   unsigned char t;
     174                 :   assert(sizeof(double)==8);
     175               0 :   t = cp[7]; cp[7] = cp[0]; cp[0] = t;
     176               0 :   t = cp[6]; cp[6] = cp[1]; cp[1] = t;
     177               0 :   t = cp[5]; cp[5] = cp[2]; cp[2] = t;
     178               0 :   t = cp[4]; cp[4] = cp[3]; cp[3] = t;
     179               0 : }
     180                 : #endif
     181                 : 
     182                 : #ifndef TIFFSwabArrayOfDouble
     183                 : void
     184              22 : TIFFSwabArrayOfDouble(double* dp, tmsize_t n)
     185                 : {
     186                 :   register unsigned char *cp;
     187                 :   register unsigned char t;
     188                 :   assert(sizeof(double)==8);
     189                 :   /* XXX unroll loop some */
     190             133 :   while (n-- > 0) {
     191              89 :     cp = (unsigned char *)dp;
     192              89 :     t = cp[7]; cp[7] = cp[0]; cp[0] = t;
     193              89 :     t = cp[6]; cp[6] = cp[1]; cp[1] = t;
     194              89 :     t = cp[5]; cp[5] = cp[2]; cp[2] = t;
     195              89 :     t = cp[4]; cp[4] = cp[3]; cp[3] = t;
     196              89 :     dp++;
     197                 :   }
     198              22 : }
     199                 : #endif
     200                 : 
     201                 : /*
     202                 :  * Bit reversal tables.  TIFFBitRevTable[<byte>] gives
     203                 :  * the bit reversed value of <byte>.  Used in various
     204                 :  * places in the library when the FillOrder requires
     205                 :  * bit reversal of byte values (e.g. CCITT Fax 3
     206                 :  * encoding/decoding).  TIFFNoBitRevTable is provided
     207                 :  * for algorithms that want an equivalent table that
     208                 :  * do not reverse bit values.
     209                 :  */
     210                 : static const unsigned char TIFFBitRevTable[256] = {
     211                 :     0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
     212                 :     0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
     213                 :     0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
     214                 :     0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
     215                 :     0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
     216                 :     0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
     217                 :     0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
     218                 :     0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
     219                 :     0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
     220                 :     0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
     221                 :     0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
     222                 :     0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
     223                 :     0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
     224                 :     0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
     225                 :     0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
     226                 :     0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
     227                 :     0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
     228                 :     0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
     229                 :     0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
     230                 :     0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
     231                 :     0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
     232                 :     0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
     233                 :     0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
     234                 :     0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
     235                 :     0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
     236                 :     0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
     237                 :     0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
     238                 :     0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
     239                 :     0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
     240                 :     0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
     241                 :     0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
     242                 :     0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
     243                 : };
     244                 : static const unsigned char TIFFNoBitRevTable[256] = {
     245                 :     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
     246                 :     0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 
     247                 :     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
     248                 :     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 
     249                 :     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 
     250                 :     0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 
     251                 :     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
     252                 :     0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 
     253                 :     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
     254                 :     0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 
     255                 :     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 
     256                 :     0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 
     257                 :     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 
     258                 :     0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 
     259                 :     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 
     260                 :     0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 
     261                 :     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 
     262                 :     0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 
     263                 :     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 
     264                 :     0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
     265                 :     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
     266                 :     0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
     267                 :     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
     268                 :     0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
     269                 :     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
     270                 :     0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
     271                 :     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
     272                 :     0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
     273                 :     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
     274                 :     0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
     275                 :     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
     276                 :     0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 
     277                 : };
     278                 : 
     279                 : const unsigned char*
     280               6 : TIFFGetBitRevTable(int reversed)
     281                 : {
     282               6 :   return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
     283                 : }
     284                 : 
     285                 : void
     286               0 : TIFFReverseBits(uint8* cp, tmsize_t n)  
     287                 : {
     288               0 :   for (; n > 8; n -= 8) {
     289               0 :     cp[0] = TIFFBitRevTable[cp[0]];
     290               0 :     cp[1] = TIFFBitRevTable[cp[1]];
     291               0 :     cp[2] = TIFFBitRevTable[cp[2]];
     292               0 :     cp[3] = TIFFBitRevTable[cp[3]];
     293               0 :     cp[4] = TIFFBitRevTable[cp[4]];
     294               0 :     cp[5] = TIFFBitRevTable[cp[5]];
     295               0 :     cp[6] = TIFFBitRevTable[cp[6]];
     296               0 :     cp[7] = TIFFBitRevTable[cp[7]];
     297               0 :     cp += 8;
     298                 :   }
     299               0 :   while (n-- > 0)
     300               0 :     *cp = TIFFBitRevTable[*cp], cp++;
     301               0 : }
     302                 : 
     303                 : /* vim: set ts=8 sts=8 sw=8 noet: */
     304                 : /*
     305                 :  * Local Variables:
     306                 :  * mode: c
     307                 :  * c-basic-offset: 8
     308                 :  * fill-column: 78
     309                 :  * End:
     310                 :  */

Generated by: LCOV version 1.7