LCOV - code coverage report
Current view: directory - frmts/mrsid - mrsidstream.cpp (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 89 59 66.3 %
Date: 2011-12-18 Functions: 18 10 55.6 %

       1                 : /******************************************************************************
       2                 :  * $Id: mrsidstream.cpp 20996 2010-10-28 18:38:15Z rouault $
       3                 :  *
       4                 :  * Project:  Multi-resolution Seamless Image Database (MrSID)
       5                 :  * Purpose:  Input/output stream wrapper for usage with LizardTech's
       6                 :  *           MrSID SDK, implemenattion of the wrapper class methods.
       7                 :  * Author:   Andrey Kiselev, dron@ak4719.spb.edu
       8                 :  *
       9                 :  ******************************************************************************
      10                 :  * Copyright (c) 2008, Andrey Kiselev <dron@ak4719.spb.edu>
      11                 :  *
      12                 :  * Permission is hereby granted, free of charge, to any person obtaining a
      13                 :  * copy of this software and associated documentation files (the "Software"),
      14                 :  * to deal in the Software without restriction, including without limitation
      15                 :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      16                 :  * and/or sell copies of the Software, and to permit persons to whom the
      17                 :  * Software is furnished to do so, subject to the following conditions:
      18                 :  *
      19                 :  * The above copyright notice and this permission notice shall be included
      20                 :  * in all copies or substantial portions of the Software.
      21                 :  *
      22                 :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      23                 :  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      24                 :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
      25                 :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      26                 :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      27                 :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      28                 :  * DEALINGS IN THE SOFTWARE.
      29                 :  ****************************************************************************/
      30                 : 
      31                 : #include "cpl_error.h"
      32                 : #include "mrsidstream.h"
      33                 : 
      34                 : CPL_CVSID("$Id: mrsidstream.cpp 20996 2010-10-28 18:38:15Z rouault $");
      35                 : 
      36                 : LT_USE_NAMESPACE(LizardTech)
      37                 : 
      38                 : /************************************************************************/
      39                 : /* ==================================================================== */
      40                 : /*                              LTIVSIStream                             */
      41                 : /* ==================================================================== */
      42                 : /************************************************************************/
      43                 : 
      44             130 : LTIVSIStream::LTIVSIStream() : poFileHandle(NULL), nError(0), pnRefCount(NULL), 
      45             130 : bIsOpen(FALSE)
      46                 : {
      47             130 : }
      48                 : 
      49                 : /************************************************************************/
      50                 : /*                             ~LTIVSIStream()                           */
      51                 : /************************************************************************/
      52                 : 
      53             130 : LTIVSIStream::~LTIVSIStream()
      54                 : {
      55             130 :     if ( poFileHandle)
      56                 :     {
      57               6 :         (*pnRefCount)--;
      58               6 :         if (*pnRefCount == 0)
      59                 :         {
      60               6 :             VSIFCloseL( (VSILFILE *)poFileHandle );
      61               6 :             nError = errno;
      62               6 :             delete pnRefCount;
      63                 :         }
      64                 :     }
      65             130 : }
      66                 : 
      67                 : /************************************************************************/
      68                 : /*                              initialize()                            */
      69                 : /************************************************************************/
      70                 : 
      71               6 : LT_STATUS LTIVSIStream::initialize( const char *pszFilename,
      72                 :                                     const char *pszAccess )
      73                 : {
      74               6 :     CPLAssert(poFileHandle == NULL);
      75                 : 
      76               6 :     errno = 0;
      77               6 :     poFileHandle = (VSIVirtualHandle *)VSIFOpenL( pszFilename, pszAccess );
      78               6 :     if (poFileHandle)
      79                 :     {
      80               6 :         pnRefCount = new int;
      81               6 :         *pnRefCount = 1;
      82                 :     }
      83               6 :     nError = errno;
      84                 : 
      85               6 :     return poFileHandle ? LT_STS_Success : LT_STS_Failure;
      86                 : }
      87                 : 
      88                 : /************************************************************************/
      89                 : /*                              initialize()                            */
      90                 : /************************************************************************/
      91                 : 
      92               0 : LT_STATUS LTIVSIStream::initialize( LTIVSIStream* ltiVSIStream )
      93                 : {
      94               0 :     CPLAssert(poFileHandle == NULL);
      95                 : 
      96               0 :     poFileHandle = ltiVSIStream->poFileHandle;
      97               0 :     if (poFileHandle)
      98                 :     {
      99               0 :         pnRefCount = ltiVSIStream->pnRefCount;
     100               0 :         (*pnRefCount) ++;
     101                 :     }
     102                 : 
     103               0 :     return poFileHandle ? LT_STS_Success : LT_STS_Failure;
     104                 : }
     105                 : 
     106                 : /************************************************************************/
     107                 : /*                                 isEOF()                              */
     108                 : /************************************************************************/
     109                 : 
     110               0 : bool LTIVSIStream::isEOF()
     111                 : {
     112               0 :     CPLAssert(poFileHandle);
     113                 : 
     114               0 :     errno = 0;
     115               0 :     bool    bIsEOF = (0 != poFileHandle->Eof());
     116               0 :     nError = errno;
     117                 : 
     118               0 :     return bIsEOF;
     119                 : }
     120                 : 
     121                 : /************************************************************************/
     122                 : /*                                 isOpen()                             */
     123                 : /************************************************************************/
     124                 : 
     125             208 : bool LTIVSIStream::isOpen()
     126                 : {
     127             208 :     return  poFileHandle != NULL && bIsOpen;
     128                 : }
     129                 : 
     130                 : /************************************************************************/
     131                 : /*                                  open()                              */
     132                 : /************************************************************************/
     133                 : 
     134             102 : LT_STATUS LTIVSIStream::open()
     135                 : {
     136             102 :     bIsOpen = poFileHandle != NULL;
     137             102 :     return poFileHandle ? LT_STS_Success : LT_STS_Failure;
     138                 : }
     139                 : 
     140                 : /************************************************************************/
     141                 : /*                                  close()                             */
     142                 : /************************************************************************/
     143                 : 
     144             102 : LT_STATUS LTIVSIStream::close()
     145                 : {
     146             102 :     CPLAssert(poFileHandle);
     147                 : 
     148             102 :     bIsOpen = FALSE;
     149             102 :     errno = 0;
     150             102 :     if ( poFileHandle->Seek( 0, SEEK_SET ) == 0 )
     151             102 :         return LT_STS_Success;
     152                 :     else
     153                 :     {
     154               0 :         nError = errno;
     155               0 :         return LT_STS_Failure;
     156                 :     }
     157                 : }
     158                 : 
     159                 : /************************************************************************/
     160                 : /*                                   read()                             */
     161                 : /************************************************************************/
     162                 : 
     163            4113 : lt_uint32 LTIVSIStream::read( lt_uint8 *pDest, lt_uint32 nBytes )
     164                 : {
     165            4113 :     CPLAssert(poFileHandle);
     166                 : 
     167            4113 :     errno = 0;
     168                 :     lt_uint32   nBytesRead =
     169            4113 :         (lt_uint32)poFileHandle->Read( pDest, 1, nBytes );
     170            4113 :     nError = errno;
     171                 : 
     172            4113 :     return nBytesRead;
     173                 : }
     174                 : 
     175                 : /************************************************************************/
     176                 : /*                                  write()                             */
     177                 : /************************************************************************/
     178                 : 
     179               0 : lt_uint32 LTIVSIStream::write( const lt_uint8 *pSrc, lt_uint32 nBytes )
     180                 : {
     181               0 :     CPLAssert(poFileHandle);
     182                 : 
     183               0 :     errno = 0;
     184                 :     lt_uint32   nBytesWritten =
     185               0 :         (lt_uint32)poFileHandle->Write( pSrc, 1, nBytes );
     186               0 :     nError = errno;
     187                 : 
     188               0 :     return nBytesWritten;
     189                 : }
     190                 : 
     191                 : /************************************************************************/
     192                 : /*                                   seek()                             */
     193                 : /************************************************************************/
     194                 : 
     195             191 : LT_STATUS LTIVSIStream::seek( lt_int64 nOffset, LTIOSeekDir nOrigin )
     196                 : {
     197             191 :     CPLAssert(poFileHandle);
     198                 : 
     199                 :     int nWhence;
     200             191 :     switch (nOrigin)
     201                 :     {
     202                 :         case (LTIO_SEEK_DIR_BEG):
     203             177 :             nWhence = SEEK_SET;
     204             177 :             break;
     205                 :       
     206                 :         case (LTIO_SEEK_DIR_CUR):
     207                 :         {
     208               8 :             nWhence =  SEEK_CUR;
     209               8 :             if( nOffset < 0 )
     210                 :             {
     211               8 :                 nWhence = SEEK_SET;
     212               8 :                 nOffset += (lt_int64)poFileHandle->Tell();
     213                 :             }
     214               8 :             break;
     215                 :         }
     216                 :       
     217                 :         case (LTIO_SEEK_DIR_END):
     218               6 :             nWhence = SEEK_END;
     219               6 :             break;
     220                 :       
     221                 :         default:
     222               0 :             return LT_STS_Failure;
     223                 :     }
     224                 : 
     225             191 :     if ( poFileHandle->Seek( (vsi_l_offset)nOffset, nWhence ) == 0 )
     226             191 :         return LT_STS_Success;
     227                 :     else
     228                 :     {
     229               0 :         nError = errno;
     230               0 :         return LT_STS_Failure;
     231                 :     }
     232                 : }
     233                 : 
     234                 : /************************************************************************/
     235                 : /*                               tell()                                 */
     236                 : /************************************************************************/
     237                 : 
     238             111 : lt_int64 LTIVSIStream::tell()
     239                 : {
     240             111 :     CPLAssert(poFileHandle);
     241                 : 
     242             111 :     errno = 0;
     243             111 :     lt_int64    nPos = (lt_int64)poFileHandle->Tell();
     244             111 :     nError = errno;
     245                 : 
     246             111 :     return nPos;
     247                 : }
     248                 : 
     249                 : /************************************************************************/
     250                 : /*                               duplicate()                            */
     251                 : /************************************************************************/
     252                 : 
     253               0 : LTIOStreamInf* LTIVSIStream::duplicate()
     254                 : {
     255               0 :     LTIVSIStream *poNew = new LTIVSIStream;
     256               0 :     poNew->initialize( this );
     257                 : 
     258               0 :     return poNew;
     259                 : }
     260                 : 
     261                 : /************************************************************************/
     262                 : /*                             getLastError()                           */
     263                 : /************************************************************************/
     264                 : 
     265               0 : LT_STATUS LTIVSIStream::getLastError() const
     266                 : {
     267               0 :     return nError;
     268                 : }
     269                 : 
     270                 : /************************************************************************/
     271                 : /*                                  getID()                             */
     272                 : /************************************************************************/
     273                 : 
     274               1 : const char *LTIVSIStream::getID() const
     275                 : {
     276               1 :     return "LTIVSIStream:";
     277                 : }
     278                 : 

Generated by: LCOV version 1.7