home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 9 / CD_ASCQ_09_1193.iso / news / 4441 / mpegcode / src / headers / bitio.h < prev    next >
C/C++ Source or Header  |  1993-09-27  |  3KB  |  116 lines

  1. /*===========================================================================*
  2.  * bitio.h                                     *
  3.  *                                         *
  4.  *    bitwise input/output                             *
  5.  *                                         *
  6.  *===========================================================================*/
  7.  
  8. /*
  9.  * Copyright (c) 1993 The Regents of the University of California.
  10.  * All rights reserved.
  11.  *
  12.  * Permission to use, copy, modify, and distribute this software and its
  13.  * documentation for any purpose, without fee, and without written agreement is
  14.  * hereby granted, provided that the above copyright notice and the following
  15.  * two paragraphs appear in all copies of this software.
  16.  *
  17.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  18.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  19.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  20.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  21.  *
  22.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  23.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  24.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  25.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  26.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  27.  */
  28.  
  29. /*  
  30.  *  $Header: /n/picasso/users/keving/encode/src/headers/RCS/bitio.h,v 1.6 1993/07/22 22:24:23 keving Exp keving $
  31.  *  $Log: bitio.h,v $
  32.  * Revision 1.6  1993/07/22  22:24:23  keving
  33.  * nothing
  34.  *
  35.  * Revision 1.5  1993/07/09  00:17:23  keving
  36.  * nothing
  37.  *
  38.  * Revision 1.4  1993/06/03  21:08:53  keving
  39.  * nothing
  40.  *
  41.  * Revision 1.3  1993/01/18  10:20:02  dwallach
  42.  * *** empty log message ***
  43.  *
  44.  * Revision 1.2  1993/01/18  10:17:29  dwallach
  45.  * RCS headers installed, code indented uniformly
  46.  *
  47.  * Revision 1.2  1993/01/18  10:17:29  dwallach
  48.  * RCS headers installed, code indented uniformly
  49.  *
  50.  */
  51.  
  52.  
  53. #ifndef BIT_IO_INCLUDED
  54. #define BIT_IO_INCLUDED
  55.  
  56.  
  57. /*==============*
  58.  * HEADER FILES *
  59.  *==============*/
  60.  
  61. #include "general.h"
  62. #include "ansi.h"
  63.  
  64.  
  65. /*===========*
  66.  * CONSTANTS *
  67.  *===========*/
  68.  
  69. #define WORDS_PER_BUCKET 128
  70. #define MAXBITS_PER_BUCKET    (WORDS_PER_BUCKET * 32)
  71. #define    MAX_BUCKETS    128
  72. #define MAX_BITS    MAX_BUCKETS*MAXBITS_PER_BUCKET
  73.  
  74.  
  75. /*=======================*
  76.  * STRUCTURE DEFINITIONS *
  77.  *=======================*/
  78.  
  79. typedef struct bitBucket {
  80.     struct bitBucket *nextPtr;
  81.     uint32 bits[WORDS_PER_BUCKET];
  82.     int bitsleft, bitsleftcur, currword;
  83. } ActualBucket;
  84.  
  85. typedef struct _BitBucket {
  86.     int totalbits;
  87.     int    cumulativeBits;
  88.     int    bitsWritten;
  89.     FILE    *filePtr;
  90.     ActualBucket *firstPtr;
  91.     ActualBucket *lastPtr;
  92. } BitBucket;
  93.  
  94.  
  95. /*========*
  96.  * MACROS *
  97.  *========*/
  98.  
  99. #define    SET_ITH_BIT(bits, i)    (bits |= (1 << (i)))
  100. #define    GET_ITH_BIT(bits, i)    (bits & (1 << (i)))
  101.  
  102.  
  103. /*===============================*
  104.  * EXTERNAL PROCEDURE prototypes *
  105.  *===============================*/
  106.  
  107. void        Bitio_Free _ANSI_ARGS_((BitBucket *bbPtr));
  108. void        Bitio_Write _ANSI_ARGS_((BitBucket *bbPtr, uint32 bits, int nbits));
  109. void        Bitio_BytePad _ANSI_ARGS_((BitBucket *bbPtr));
  110. BitBucket  *Bitio_New _ANSI_ARGS_((FILE *filePtr));
  111. void        Bitio_Flush _ANSI_ARGS_((BitBucket *bbPtr));
  112. void        Bitio_WriteToSocket _ANSI_ARGS_((BitBucket *bbPtr, int socket));
  113.  
  114.  
  115. #endif BIT_IO_INCLUDED
  116.