Tesseract  3.02
tesseract-ocr/cutil/bitvec.cpp
Go to the documentation of this file.
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 */