/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF. The full HDF copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the files COPYING and Copyright.html. COPYING can be found at the root * * of the source code distribution tree; Copyright.html can be found at * * http://hdfgroup.org/products/hdf4/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* $Id: hbitio.h 4932 2007-09-07 17:17:23Z bmribler $ */ /* ** hbitio.h ** ** Data structures and macros for bitfile access to HDF data objects. ** These are mainly used for compression I/O and N-bit data objects. */ #ifndef __HBITIO_H #define __HBITIO_H /* Define the number of elements in the buffered array */ #define BITBUF_SIZE 4096 /* Macro to define the number of bits cached in the 'bits' variable */ #define BITNUM (sizeof(uint8)*8) /* Macro to define the number of bits able to be read/written at a time */ #define DATANUM (sizeof(uint32)*8) typedef struct bitrec_t { int32 acc_id; /* Access ID for H layer I/O routines */ int32 bit_id; /* Bitfile ID for internal use */ /* Note that since HDF has signed 32bit offset limit we need to change this to signed since the get passed to Hxxx calls which take signed 32bit arguments */ int32 block_offset, /* offset of the current buffered block in the dataset */ max_offset, /* offset of the last byte written to the dataset */ byte_offset; /* offset of the current byte in the dataset */ intn count, /* bit count to next boundary */ buf_read; /* number of bytes read into buffer (necessary for random I/O) */ uint8 access; /* What the access on this file is ('r', 'w', etc..) */ uint8 mode; /* how are we interacting with the data now ('r', 'w', etc) */ uint8 bits; /* extra bit buffer, 0..BITNUM-1 bits */ uint8 *bytep; /* current position in buffer */ uint8 *bytez; /* end of buffer to compare */ uint8 *bytea; /* byte buffer */ } bitrec_t; #ifndef BITMASTER extern #endif const uint8 maskc[9] #ifdef BITMASTER = {0, 1, 3, 7, 15, 31, 63, 127, 255} #endif ; #ifndef BITMASTER extern #endif const uint32 maskl[33] #ifdef BITMASTER = {0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffffUL} #endif ; /* Function-like Macros */ #define Hputbit(bitid,bit) ((Hbitwrite(bitid,1,(uint32)bit)==FAIL) ? FAIL : SUCCEED) #endif /* __HBITIO_H */