Tesseract
3.02
|
00001 /****************************************************************************** 00002 ** Filename: bitvec.c 00003 ** Purpose: Routines for manipulating bit vectors 00004 ** Author: Dan Johnson 00005 ** History: Thu Mar 15 10:37:27 1990, DSJ, Created. 00006 ** 00007 ** (c) Copyright Hewlett-Packard Company, 1988. 00008 ** Licensed under the Apache License, Version 2.0 (the "License"); 00009 ** you may not use this file except in compliance with the License. 00010 ** You may obtain a copy of the License at 00011 ** http://www.apache.org/licenses/LICENSE-2.0 00012 ** Unless required by applicable law or agreed to in writing, software 00013 ** distributed under the License is distributed on an "AS IS" BASIS, 00014 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00015 ** See the License for the specific language governing permissions and 00016 ** limitations under the License. 00017 ******************************************************************************/ 00018 00019 /*----------------------------------------------------------------------------- 00020 Include Files and Type Defines 00021 -----------------------------------------------------------------------------*/ 00022 #include "bitvec.h" 00023 00024 #include <stdio.h> 00025 00026 #include "emalloc.h" 00027 #include "freelist.h" 00028 #include "tprintf.h" 00029 00030 /*----------------------------------------------------------------------------- 00031 Public Code 00032 -----------------------------------------------------------------------------*/ 00033 /*---------------------------------------------------------------------------*/ 00048 BIT_VECTOR ExpandBitVector(BIT_VECTOR Vector, int NewNumBits) { 00049 return ((BIT_VECTOR) Erealloc(Vector, 00050 sizeof(Vector[0]) * WordsInVectorOfSize(NewNumBits))); 00051 } /* ExpandBitVector */ 00052 00053 00054 /*---------------------------------------------------------------------------*/ 00055 void FreeBitVector(BIT_VECTOR BitVector) { 00070 if (BitVector) { 00071 Efree(BitVector); 00072 } 00073 } /* FreeBitVector */ 00074 00075 00080 /*--------------------------------------------------------------------------*/ 00081 int hamming_distance(uinT32* array1, uinT32* array2, int length) { 00082 register uinT32 diff; /*bit difference */ 00083 register int dist; /*total distance */ 00084 00085 dist = 0; 00086 for (; length > 0; length--) { 00087 diff = *array1++ ^ *array2++;/*different bits */ 00088 while (diff) { 00089 diff &= diff - 1; /*lose a bit */ 00090 dist++; 00091 } 00092 } 00093 return dist; /*total distance */ 00094 } 00095 00096 00097 /*---------------------------------------------------------------------------*/ 00111 BIT_VECTOR NewBitVector(int NumBits) { 00112 return ((BIT_VECTOR) Emalloc(sizeof(uinT32) * 00113 WordsInVectorOfSize(NumBits))); 00114 } /* NewBitVector */