123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330(* Size: compute size of values in the binary protocol. *)letarch_sixtyfour=Sys.word_size=64openCommonincludeSize_intf.DefinitionsmoduleMaximum=structletbin_size_unit=1letbin_size_bool=1letbin_size_char=1letbin_size_md5=16letbin_size_int_nat0=ifarch_sixtyfourthen9else5letbin_size_int_negative=ifarch_sixtyfourthen9else5letbin_size_int=maxbin_size_int_nat0bin_size_int_negativeletbin_size_float=8letbin_size_int32=5letbin_size_int64=9letbin_size_nativeint=bin_size_intletbin_size_nat0=bin_size_int_nat0letbin_size_variant_int=4letbin_size_int_8bit=1letbin_size_int_16bit=2letbin_size_int_32bit=4letbin_size_int_64bit=8letbin_size_int64_bits=8letbin_size_network16_int=2letbin_size_network32_int=4letbin_size_network32_int32=4letbin_size_network64_int=8letbin_size_network64_int64=8endmoduleMinimum=structletbin_size_unit=Maximum.bin_size_unitletbin_size_bool=Maximum.bin_size_boolletbin_size_char=Maximum.bin_size_charletbin_size_md5=16letbin_size_int_nat0=1letbin_size_int_negative=2letbin_size_int=minbin_size_int_nat0bin_size_int_negativeletbin_size_float=Maximum.bin_size_floatletbin_size_int32=bin_size_intletbin_size_int64=bin_size_intletbin_size_nativeint=bin_size_intletbin_size_nat0=1letbin_size_ref=1letbin_size_lazy_t=1letbin_size_option=1letbin_size_pair=1+1letbin_size_triple=1+1+1letbin_size_len=bin_size_nat0letbin_size_list=bin_size_lenletbin_size_array=bin_size_lenletbin_size_hashtbl=bin_size_lenletbin_size_string=bin_size_lenletbin_size_bytes=bin_size_lenletbin_size_vec=bin_size_lenletbin_size_float32_vec=bin_size_vecletbin_size_float64_vec=bin_size_vecletbin_size_mat=bin_size_len+bin_size_lenletbin_size_float32_mat=bin_size_matletbin_size_float64_mat=bin_size_matletbin_size_bigstring=bin_size_lenletbin_size_floatarray=bin_size_lenletbin_size_float_array=bin_size_lenletbin_size_variant_int=Maximum.bin_size_variant_intletbin_size_int_8bit=Maximum.bin_size_int_8bitletbin_size_int_16bit=Maximum.bin_size_int_16bitletbin_size_int_32bit=Maximum.bin_size_int_32bitletbin_size_int_64bit=Maximum.bin_size_int_64bitletbin_size_int64_bits=Maximum.bin_size_int64_bitsletbin_size_network16_int=Maximum.bin_size_network16_intletbin_size_network32_int=Maximum.bin_size_network32_intletbin_size_network32_int32=Maximum.bin_size_network32_int32letbin_size_network64_int=Maximum.bin_size_network64_intletbin_size_network64_int64=Maximum.bin_size_network64_int64endletbin_size_unit()=1letbin_size_bool_=1letbin_size_int_nat0n=ifn<0x00000080then1elseifn<0x00008000then3elseifarch_sixtyfour&&n>=(* 0x80000000 *)1lsl31then9else5;;letbin_size_int_negativen=ifn>=-0x00000080then2elseifn>=-0x00008000then3elseifarch_sixtyfour&&n<(* -0x80000000 *)-(1lsl31)then9else5;;letbin_size_char_=1letbin_size_intn=ifn>=0thenbin_size_int_nat0nelsebin_size_int_negativenletbin_size_nat0nat0=letn=(nat0:Nat0.t:>int)inifn<0x00000080then1elseifn<0x00010000then3elseifarch_sixtyfour&&n>=(* 0x100000000 *)1lsl32then9else5;;letbin_size_string_or_byteslen=letplen=Nat0.unsafe_of_intleninletsize_len=bin_size_nat0pleninsize_len+len;;letbin_size_stringstr=bin_size_string_or_bytes(Base.String.lengthstr)letbin_size_bytesstr=bin_size_string_or_bytes(Base.Bytes.lengthstr)letbin_size_md5_=16letbin_size_floatf=(* If we just ignore the argument the compiler will still require it to exist and be
boxed. This means that if for instance we call this for a field of a float record,
the compiler will allocate the float for nothing.
With this line the compiler really ignores the float. *)ignore(truncatef);8;;letbin_size_int32=ifarch_sixtyfourthenfunn->bin_size_int(Int32.to_intn)elsefunn->ifn>=0x00008000l||n<-0x00008000lthen5elsebin_size_int(Int32.to_intn);;letbin_size_int64=ifarch_sixtyfourthenfunn->ifn>=0x80000000L||n<-0x80000000Lthen9elsebin_size_int(Int64.to_intn)elsefunn->ifn>=0x80000000L||n<-0x80000000Lthen9elsebin_size_int32(Base.Int64.to_int32_truncn)[@nontail];;letbin_size_nativeint=ifarch_sixtyfourthenfunn->bin_size_int64(Base.Int64.of_nativeintn)[@nontail]elsefunn->bin_size_int32(Base.Nativeint.to_int32_truncn)[@nontail];;letbin_size_refbin_size_elr=bin_size_el!rletbin_size_lazy_tbin_size_ellv=bin_size_el(Base.Lazy.forcelv)letbin_size_lazy=bin_size_lazy_tletbin_size_optionbin_size_el=function|None->1|Somev->1+bin_size_elv;;letbin_size_pairbin_size_abin_size_b(a,b)=bin_size_aa+bin_size_bbletbin_size_triplebin_size_abin_size_bbin_size_c(a,b,c)=bin_size_aa+bin_size_bb+bin_size_cc;;letbin_size_list=letrecloop~bin_size_el~size_acc~len_acclst=matchlstwith|[]->size_acc+bin_size_nat0(Nat0.unsafe_of_intlen_acc)|hd::tl->loop~bin_size_el~size_acc:(size_acc+bin_size_elhd)~len_acc:(len_acc+1)tlinfunbin_size_ellst->loop~bin_size_el~size_acc:0~len_acc:0lst;;letbin_size_lenlen=letplen=Nat0.unsafe_of_intleninbin_size_nat0plen;;externalfloat_array_length:Float.Array.t->int="%floatarray_length"letbin_size_floatarrayar=letlen=float_array_lengtharinbin_size_lenlen+(8*len);;letbin_size_float_arrayar=letlen=Base.Array.lengtharinbin_size_lenlen+(8*len);;letbin_size_array_loopbin_size_elar~total_len~n=lettotal_len_ref=reftotal_leninfori=0ton-1doletel=Base.Array.unsafe_getariintotal_len_ref:=!total_len_ref+bin_size_eleldone;!total_len_ref;;letbin_size_array(typea)bin_size_elar=letmoduleObj=Base.Exported_for_specific_uses.Obj_localinif(Obj.magic(bin_size_el:asizer):floatsizer)==(bin_size_float:>floatsizer)thenbin_size_float_array(Obj.magic(ar:aarray):floatarray)[@nontail]else(letn=Base.Array.lengtharinlettotal_len=bin_size_lenninbin_size_array_loopbin_size_elar~total_len~n);;letbin_size_hashtblbin_size_keybin_size_valhtbl=letcnt_ref=ref0inletcoll_htblkvtotal_len=incrcnt_ref;total_len+bin_size_keyk+bin_size_valvinletlen=Hashtbl.lengthhtblinlettotal_len=Hashtbl.foldcoll_htblhtbl(bin_size_lenlen)inif!cnt_ref<>lenthenraise_concurrent_modification"bin_size_hashtbl";total_len;;externalarray1_dim:('a,'b,'c)Stdlib.Bigarray.Array1.t->int="%caml_ba_dim_1"externalarray2_dim1:('a,'b,'c)Stdlib.Bigarray.Array2.t->int="%caml_ba_dim_1"externalarray2_dim2:('a,'b,'c)Stdlib.Bigarray.Array2.t->int="%caml_ba_dim_2"letbin_size_gen_vecvecmultiplier=letlen=array1_dimvecinbin_size_lenlen+(multiplier*len);;letbin_size_float32_vecvec=bin_size_gen_vecvec4letbin_size_float64_vecvec=bin_size_gen_vecvec8letbin_size_vec=bin_size_float64_vecletbin_size_gen_matmatmultiplier=letdim1=array2_dim1matinletdim2=array2_dim2matinletsize=dim1*dim2inbin_size_lendim1+bin_size_lendim2+(multiplier*size);;letbin_size_float32_matmat=bin_size_gen_matmat4letbin_size_float64_matmat=bin_size_gen_matmat8letbin_size_mat=bin_size_float64_matletbin_size_bigstringbuf=bin_size_gen_vecbuf1letbin_size_variant_int_=4letbin_size_int_8bit_=1letbin_size_int_16bit_=2letbin_size_int_32bit_=4letbin_size_int_64bit_=8letbin_size_int64_bits_=8letbin_size_network16_int_=2letbin_size_network32_int_=4letbin_size_network32_int32_=4letbin_size_network64_int_=8letbin_size_network64_int64_=8(* Local versions *)letbin_size_unit__local=bin_size_unitletbin_size_bool__local=bin_size_boolletbin_size_string__local=bin_size_stringletbin_size_bytes__local=bin_size_bytesletbin_size_char__local=bin_size_charletbin_size_int__local=bin_size_intletbin_size_float__local=bin_size_floatletbin_size_int32__local=bin_size_int32letbin_size_int64__local=bin_size_int64letbin_size_nativeint__local=bin_size_nativeintletbin_size_nat0__local=bin_size_nat0letbin_size_ref__local=bin_size_refletbin_size_lazy_t__local=bin_size_lazy_tletbin_size_lazy__local=bin_size_lazyletbin_size_option__localbin_size_el=function|None->1|Somev->1+bin_size_elv;;letbin_size_pair__localbin_size_abin_size_b(a,b)=bin_size_aa+bin_size_bbletbin_size_triple__localbin_size_abin_size_bbin_size_c(a,b,c)=bin_size_aa+bin_size_bb+bin_size_cc;;letbin_size_list__local=letrecloop~bin_size_el~size_acc~len_acclst=matchlstwith|[]->size_acc+bin_size_nat0(Nat0.unsafe_of_intlen_acc)|hd::tl->loop~bin_size_el~size_acc:(size_acc+bin_size_elhd)~len_acc:(len_acc+1)tlinfunbin_size_ellst->loop~bin_size_el~size_acc:0~len_acc:0lst;;letbin_size_array__local=bin_size_arrayletbin_size_float32_vec__local=bin_size_float32_vecletbin_size_float64_vec__local=bin_size_float64_vecletbin_size_vec__local=bin_size_vecletbin_size_float32_mat__local=bin_size_float32_matletbin_size_float64_mat__local=bin_size_float64_matletbin_size_mat__local=bin_size_matletbin_size_bigstring__local=bin_size_bigstringletbin_size_floatarray__local=bin_size_floatarrayletbin_size_variant_int__local=bin_size_variant_intletbin_size_int_8bit__local=bin_size_int_8bitletbin_size_int_16bit__local=bin_size_int_16bitletbin_size_int_32bit__local=bin_size_int_32bitletbin_size_int_64bit__local=bin_size_int_64bitletbin_size_int64_bits__local=bin_size_int64_bitsletbin_size_network16_int__local=bin_size_network16_intletbin_size_network32_int__local=bin_size_network32_intletbin_size_network32_int32__local=bin_size_network32_int32letbin_size_network64_int__local=bin_size_network64_intletbin_size_network64_int64__local=bin_size_network64_int64letbin_size_md5__local=bin_size_md5