Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/src/prelude/Binary/CompareBin_.p.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <haskell2c.h>
#include "cLowBinary.h"
#include <stdlib.h>
#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;
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.