All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
bitvec.h
Go to the documentation of this file.
1 /******************************************************************************
2  ** Filename: bitvec.h
3  ** Purpose: Routines for manipulating bit vectors
4  ** Author: Dan Johnson
5  ** History: Wed Mar 7 17:52:45 1990, DSJ, Created.
6  **
7  ** (c) Copyright Hewlett-Packard Company, 1988.
8  ** Licensed under the Apache License, Version 2.0 (the "License");
9  ** you may not use this file except in compliance with the License.
10  ** You may obtain a copy of the License at
11  ** http://www.apache.org/licenses/LICENSE-2.0
12  ** Unless required by applicable law or agreed to in writing, software
13  ** distributed under the License is distributed on an "AS IS" BASIS,
14  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  ** See the License for the specific language governing permissions and
16  ** limitations under the License.
17  ******************************************************************************/
18 #ifndef BITVEC_H
19 #define BITVEC_H
20 
21 #include "host.h"
22 
23 /*-----------------------------------------------------------------------------
24  Include Files and Type Defines
25 -----------------------------------------------------------------------------*/
26 // TODO(rays) Rename BITSINLONG to BITSINuinT32, and use sizeof.
27 #define BITSINLONG 32
28 typedef uinT32 *BIT_VECTOR;
29 
30 /*-----------------------------------------------------------------------------
31  Public Function Prototypes
32 -----------------------------------------------------------------------------*/
33 #define zero_all_bits(array,length) \
34 {\
35  register int index; /*temporary index*/\
36 \
37 for (index=0;index<length;index++)\
38  array[index]=0; /*zero all bits*/\
39 }
40 
41 #define set_all_bits(array,length) \
42 {\
43  register int index; /*temporary index*/\
44 \
45 for (index=0;index<length;index++)\
46  array[index]= ~0; /*set all bits*/\
47 }
48 
49 #define copy_all_bits(source,dest,length) \
50 {\
51  register int index; /*temporary index*/\
52 \
53 for (index=0;index<length;index++)\
54  dest[index]=source[index]; /*copy all bits*/\
55 }
56 
57 #define SET_BIT(array,bit) (array[bit/BITSINLONG]|=1<<(bit&(BITSINLONG-1)))
58 
59 #define reset_bit(array,bit) (array[bit/BITSINLONG]&=~(1<<(bit&(BITSINLONG-1))))
60 
61 #define test_bit(array,bit) (array[bit/BITSINLONG] & (1<<(bit&(BITSINLONG-1))))
62 
63 #define WordsInVectorOfSize(NumBits) \
64 (((NumBits) + BITSINLONG - 1) / BITSINLONG)
65 
66 /*--------------------------------------------------------------------------
67  Public Function Prototypes
68 --------------------------------------------------------------------------*/
69 BIT_VECTOR ExpandBitVector(BIT_VECTOR Vector, int NewNumBits);
70 
71 void FreeBitVector(BIT_VECTOR BitVector);
72 
73 BIT_VECTOR NewBitVector(int NumBits);
74 
75 #endif
uinT32 * BIT_VECTOR
Definition: bitvec.h:28
BIT_VECTOR ExpandBitVector(BIT_VECTOR Vector, int NewNumBits)
Definition: bitvec.cpp:48
BIT_VECTOR NewBitVector(int NumBits)
Definition: bitvec.cpp:90
void FreeBitVector(BIT_VECTOR BitVector)
Definition: bitvec.cpp:55