Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/LZH/LZBuffer.cpp

Go to the documentation of this file.
00001 #ifndef __J2K__LZH__LZBuffer_CPP__
00002 #define __J2K__LZH__LZBuffer_CPP__
00003 
00004 inline LZBuffer::LZBuffer() 
00005 {
00006   buf = new BYTE[ LZBUFSIZE ];
00007   bufPos = 0;
00008 }
00009 
00010 inline LZBuffer::~LZBuffer() 
00011 {
00012   delete [] buf;
00013 }
00014 
00015 inline int LZBuffer::_wrap( LZPOS pos ) 
00016 {
00017   return ( pos & LZBUFMASK );
00018 }
00019 
00020 inline int LZBuffer::_distance( int diff ) 
00021 {
00022   return ( diff & LZBUFMASK );
00023 }
00024 
00025 inline void LZBuffer::_toBuf( BYTE c ) 
00026 {
00027   buf[ _wrap( bufPos++ ) ] = c;
00028 }
00029 
00030 inline void LZBuffer::_toBuf( const BYTE* src, size_t sz ) 
00031 {
00032   assert( sz < LZBUFSIZE );
00033   int begin = _wrap( bufPos );
00034   int end = begin + sz;
00035 
00036   if ( end > LZBUFSIZE ) 
00037   {
00038     size_t left = LZBUFSIZE - begin;
00039     memcpy( buf + begin, src, left );
00040     memcpy( buf, src + left, sz - left );
00041   } 
00042   else 
00043   {
00044     memcpy( buf + begin, src, sz );
00045   }
00046 
00047   bufPos += sz;
00048 }
00049 
00050 inline void LZBuffer::_bufCpy( BYTE* dst, int pos, size_t sz ) 
00051 {
00052   assert( sz < LZBUFSIZE );
00053   int begin = _wrap( pos );
00054   int end = begin + sz;
00055 
00056   if ( end > LZBUFSIZE ) 
00057   {
00058     size_t left = LZBUFSIZE - begin;
00059     memcpy( dst, buf + begin, left );
00060     memcpy( dst + left, buf, sz - left );
00061   } 
00062   else 
00063   {
00064     memcpy( dst, buf + begin, sz );
00065   }
00066 }
00067 
00068 inline int LZBuffer::_nMatch( int pos, const BYTE* p, int nLimit ) 
00069 {
00070   assert( nLimit < LZBUFSIZE );
00071   int begin = pos;
00072   if ( LZBUFSIZE - begin >= nLimit ) 
00073   {
00074     for ( int i = 0; i < nLimit ; i++ )
00075        if ( buf[ begin + i ] != p[ i ] )
00076           return i;
00077 
00078     return nLimit;
00079 
00080    } 
00081    else 
00082    {
00083      for ( int i = begin; i < LZBUFSIZE ; i++ )
00084        if ( buf[ i ] != p[ i - begin ] )
00085          return i - begin;
00086 
00087      int shift = LZBUFSIZE - begin;
00088      int n = nLimit - shift;
00089 
00090      for( i = 0; i < n ; i++ )
00091        if( buf[ i ] != p[ shift + i ] )
00092           return shift + i;
00093 
00094      return nLimit;
00095    }
00096 }
00097 
00098 #endif

Generated on Sun Oct 14 18:46:32 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001