Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Load.hpp

Go to the documentation of this file.
00001 /*
00002 This product contains certain software code or other information
00003 ("AT&T Software") proprietary to AT&T Corp. ("AT&T").  The AT&T
00004 Software is provided to you "AS IS".  YOU ASSUME TOTAL RESPONSIBILITY
00005 AND RISK FOR USE OF THE AT&T SOFTWARE.  AT&T DOES NOT MAKE, AND
00006 EXPRESSLY DISCLAIMS, ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND
00007 WHATSOEVER, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
00008 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, WARRANTIES OF
00009 TITLE OR NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS, ANY
00010 WARRANTIES ARISING BY USAGE OF TRADE, COURSE OF DEALING OR COURSE OF
00011 PERFORMANCE, OR ANY WARRANTY THAT THE AT&T SOFTWARE IS "ERROR FREE" OR
00012 WILL MEET YOUR REQUIREMENTS.
00013 
00014 Unless you accept a license to use the AT&T Software, you shall not
00015 reverse compile, disassemble or otherwise reverse engineer this
00016 product to ascertain the source code for any AT&T Software.
00017 
00018 (c) AT&T Corp. All rights reserved.  AT&T is a registered trademark of AT&T Corp.
00019 
00020 ***********************************************************************
00021 
00022 History:
00023 
00024       24/11/99  - initial release by Hartmut Liefke, liefke@seas.upenn.edu
00025                                      Dan Suciu,      suciu@research.att.com
00026 */
00027 
00028 //**************************************************************************
00029 //**************************************************************************
00030 
00031 // This module contains several auxiliary functions for loading compressed
00032 // integer from a given data buffer
00033 
00034 
00035 #ifndef LOAD_HPP
00036 #define LOAD_HPP
00037 
00038 typedef unsigned char TInputPtr;
00039 
00040 inline char LoadChar(unsigned char * &ptr)
00041    // Loads a single character
00042 {
00043    return (char)*(ptr++);
00044 }
00045 
00046 //***********************************************************************
00047 
00048 inline unsigned long LoadUInt32(unsigned char * &ptr)
00049    // Loads a compressed unsigned integer
00050 {
00051   if(*ptr<128)
00052      return (unsigned)*(ptr++);
00053   else
00054   {
00055      if(*ptr<192)
00056      {
00057         ptr+=2;
00058         return (((unsigned)ptr[-2]-128)<<8)+(unsigned)ptr[-1];
00059      }
00060      else
00061      {
00062         ptr+=4;
00063         return (((unsigned)ptr[-4]-192)<<24)+
00064                (((unsigned)ptr[-3])<<16)+
00065                (((unsigned)ptr[-2])<<8)+
00066                (unsigned)ptr[-1];
00067      }
00068   }
00069 }
00070 
00071 //***********************************************************************
00072 
00073 inline unsigned long LoadSInt32(TInputPtr * &ptr,char *isneg)
00074    // Loads a compressed signed integer
00075 {
00076    if(*ptr<128)
00077    {
00078       *isneg=((*ptr & 64) ? 1 : 0);
00079       return (unsigned long)(*(ptr++)&63);
00080    }
00081    else
00082    {
00083       *isneg=((*ptr & 32) ? 1 : 0);
00084 
00085       if(*ptr<192)
00086       {
00087          ptr+=2;
00088          return ((unsigned long)(ptr[-2]&31)<<8)+(unsigned long)ptr[-1];
00089       }
00090       else
00091       {
00092          ptr+=4;
00093          return ((unsigned long)(ptr[-4]&31)<<24)+((unsigned long)ptr[-3]<<16)+
00094                 ((unsigned long)ptr[-2]<<8)+(unsigned long)ptr[-1];
00095       }
00096    }
00097 }
00098 
00099 //***********************************************************************
00100 
00101 inline unsigned char *LoadData(unsigned char * &ptr,unsigned long len)
00102    // Returns data block of length 'len'
00103 {
00104    ptr+=len;
00105    return ptr-len;
00106 }
00107 
00108 //***********************************************************************
00109 
00110 inline void LoadDataBlock(TInputPtr * &ptr,unsigned char *dest,unsigned long len)
00111    // Copies a data block of length 'len' into '*dest'
00112 {
00113    while(len--)
00114    {
00115       *dest=*ptr;
00116       ptr++;
00117       dest++;
00118    }
00119 }
00120 
00121 #endif

Generated on Sat Oct 13 16:08:38 2001 for XMILL by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001