123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106typebigstring=(char,Bigarray.int8_unsigned_elt,Bigarray.c_layout)Bigarray.Array1.tletlengthx=Bigarray.Array1.dimx[@@inline]letgetxi=Bigarray.Array1.unsafe_getxi|>Char.code[@@inline]externalunsafe_get_int16:bigstring->int->int="%caml_bigstring_get16u"[@@noalloc]letget16xi=unsafe_get_int16xi[@@inline]letequal~lnab=letl1=lnasr1inletr=ref0infori=0topredl1dor:=!rlor(get16a(i*2)lxorget16b(i*2))done;for_=1tolnland1dor:=!rlor(geta(ln-1)lxorgetb(ln-1))done;!r=0letequalab=letal=lengthainletbl=lengthbinifal<>blthenfalseelseequal~ln:alablet[@inlinealways]compare(a:int)b=a-blet[@inlinealways]sixteen_if_minus_one_or_lessn=(nasrSys.int_size)land16let[@inlinealways]eight_if_one_or_moren=((-n)asrSys.int_size)land8letcompare_le~lnab=letr=ref0inleti=ref(predln)inwhile!i>=0doletxa=geta!iandxb=getb!iinletc=comparexaxbinr:=!rlor((sixteen_if_minus_one_or_lessc+eight_if_one_or_morec)lsr!r);decri;done;(!rland8)-(!rland16)letcompare_le_with_len~len:lnab=letal=lengthainletbl=lengthbinifln=0then0elseif(allxorln)lor(bllxorln)<>0theninvalid_arg"compare_le_with_len"elsecompare_le~lnabletcompare_leab=letal=lengthainletbl=lengthbinifal<blthen1elseifal>blthen(-1)elsecompare_le~ln:al(* = bl *)abletcompare_be~lnab=letr=ref0inleti=ref0inwhile!i<lndoletxa=geta!iandxb=getb!iinletc=comparexaxbinr:=!rlor((sixteen_if_minus_one_or_lessc+eight_if_one_or_morec)lsr!r);incri;done;(!rland8)-(!rland16)letcompare_be_with_len~len:lnab=letal=lengthainletbl=lengthbinifln=0then0elseif(allxorln)lor(bllxorln)<>0theninvalid_arg"compare_be_with_len"elsecompare_be~lnabletcompare_beab=letal=lengthainletbl=lengthbinifal<blthen1elseifal>blthen(-1)elsecompare_be~ln:al(* = bl *)ab(* XXX(dinosaure): see [eqaf.ml] for this part. *)externalint_of_bool:bool->int="%identity"externalunsafe_bool_of_int:int->bool="%identity"let[@inlinealways]find_uint8~off~len~fstr=leti=ref(len-1)inleta=ref(lnot0)inwhile!i>=offdoletbyte=getstr!iinletpred=int_of_bool(fbyte)ina:=Eqaf.select_int(((!i-off)landmin_int)lorpred)!a!i;decri;done;!aletfind_uint8?(off=0)~fstr=letlen=lengthstrinfind_uint8~off~len~fstrletexists_uint8?off~fstr=letv=find_uint8?off~fstrinletr=Eqaf.select_int(v+1)01inunsafe_bool_of_intr