#include #include "cLowBinary.h" #include #define LT 0 #define EQ 1 #define GT 2 int hs_compareBin (int sizex,int sizey,BinHandle bhx,unsigned int x,BinHandle bhy,unsigned int y) { int retval; /* size of x and y are not necessarily byte-aligned */ /* but bits of x and y are guaranteed byte-aligned at both ends */ int bytex = (sizex%8 ? (sizex/8)+1 : sizex/8); int bytey = (sizey%8 ? (sizey/8)+1 : sizey/8); int xptr, yptr; if ((bhx->mode != RO) || (bhy->mode != RO)) { fprintf(stderr,"Binary.compareBin: BinHandle is not Read-Only."); exit(1); } xptr = (x - forceCacheTo(bhx,x)) / 8; yptr = (y - forceCacheTo(bhy,y)) / 8; /* fprintf(stderr,"compareBin: sizex=%d sizey=%d xoffset=%d yoffset=%d\n", sizex,sizey,x,y); */ retval = EQ; while (bytex-- && bytey--) { if (bhx->cache[xptr] != bhy->cache[yptr]) { if (bhx->cache[xptr] < bhy->cache[yptr]) { retval = LT; } else { retval = GT; } break; } xptr++; yptr++; if (xptr==CACHESIZE) nextcache(bhx); if (yptr==CACHESIZE) nextcache(bhy); } return retval; }