123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175moduleDefinitions=structtype'asizer='a->inttype('a,'b)sizer1='asizer->'bsizertype('a,'b,'c)sizer2='asizer->('b,'c)sizer1type('a,'b,'c,'d)sizer3='asizer->('b,'c,'d)sizer2type'asizer_local='a->inttype('a,'b)sizer_local1='asizer_local->'bsizer_localtype('a,'b,'c)sizer_local2='asizer_local->('b,'c)sizer_local1type('a,'b,'c,'d)sizer_local3='asizer_local->('b,'c,'d)sizer_local2endmoduletypeSize=sig(** Compute size of values in the binary protocol. *)openCommonincludemoduletypeofstructincludeDefinitionsendvalbin_size_unit:unitsizervalbin_size_bool:boolsizervalbin_size_string:stringsizervalbin_size_bytes:bytessizervalbin_size_char:charsizervalbin_size_int:intsizervalbin_size_float:floatsizervalbin_size_int32:int32sizervalbin_size_int64:int64sizervalbin_size_nativeint:nativeintsizervalbin_size_nat0:Nat0.tsizervalbin_size_ref:('a,'aref)sizer1valbin_size_lazy_t:('a,'alazy_t)sizer1valbin_size_lazy:('a,'alazy_t)sizer1valbin_size_option:('a,'aoption)sizer1valbin_size_pair:('a,'b,'a*'b)sizer2valbin_size_triple:('a,'b,'c,'a*'b*'c)sizer3valbin_size_list:('a,'alist)sizer1valbin_size_array:('a,'aarray)sizer1valbin_size_hashtbl:('a,'b,('a,'b)Hashtbl.t)sizer2valbin_size_float32_vec:vec32sizervalbin_size_float64_vec:vec64sizervalbin_size_vec:vecsizervalbin_size_float32_mat:mat32sizervalbin_size_float64_mat:mat64sizervalbin_size_mat:matsizervalbin_size_bigstring:bufsizervalbin_size_floatarray:floatarraysizervalbin_size_variant_int:intsizervalbin_size_int_8bit:intsizervalbin_size_int_16bit:intsizervalbin_size_int_32bit:intsizervalbin_size_int_64bit:intsizervalbin_size_int64_bits:int64sizervalbin_size_network16_int:intsizervalbin_size_network32_int:intsizervalbin_size_network32_int32:int32sizervalbin_size_network64_int:intsizervalbin_size_network64_int64:int64sizervalbin_size_md5:Md5_lib.tsizer(* Local versions *)valbin_size_unit__local:unitsizer_localvalbin_size_bool__local:boolsizer_localvalbin_size_string__local:stringsizer_localvalbin_size_bytes__local:bytessizer_localvalbin_size_char__local:charsizer_localvalbin_size_int__local:intsizer_localvalbin_size_float__local:floatsizer_localvalbin_size_int32__local:int32sizer_localvalbin_size_int64__local:int64sizer_localvalbin_size_nativeint__local:nativeintsizer_localvalbin_size_nat0__local:Nat0.tsizer_localvalbin_size_ref__local:('a,'aref)sizer_local1valbin_size_lazy_t__local:('a,'alazy_t)sizer_local1valbin_size_lazy__local:('a,'alazy_t)sizer_local1valbin_size_option__local:('a,'aoption)sizer_local1valbin_size_pair__local:('a,'b,'a*'b)sizer_local2valbin_size_triple__local:('a,'b,'c,'a*'b*'c)sizer_local3valbin_size_list__local:('a,'alist)sizer_local1valbin_size_array__local:('a,'aarray)sizer_local1valbin_size_float32_vec__local:vec32sizer_localvalbin_size_float64_vec__local:vec64sizer_localvalbin_size_vec__local:vecsizer_localvalbin_size_float32_mat__local:mat32sizer_localvalbin_size_float64_mat__local:mat64sizer_localvalbin_size_mat__local:matsizer_localvalbin_size_bigstring__local:bufsizer_localvalbin_size_floatarray__local:floatarraysizer_localvalbin_size_variant_int__local:intsizer_localvalbin_size_int_8bit__local:intsizer_localvalbin_size_int_16bit__local:intsizer_localvalbin_size_int_32bit__local:intsizer_localvalbin_size_int_64bit__local:intsizer_localvalbin_size_int64_bits__local:int64sizer_localvalbin_size_network16_int__local:intsizer_localvalbin_size_network32_int__local:intsizer_localvalbin_size_network32_int32__local:int32sizer_localvalbin_size_network64_int__local:intsizer_localvalbin_size_network64_int64__local:int64sizer_localvalbin_size_md5__local:Md5_lib.tsizer_local(* Provide the maximum sizes for fields which do not depend upon an array/vector/matrix
length, choosing the size required for the largest architecture. This allows for the
most conservative estimation of space required. *)moduleMaximum:sigvalbin_size_unit:intvalbin_size_bool:intvalbin_size_char:intvalbin_size_md5:intvalbin_size_int:intvalbin_size_float:intvalbin_size_int32:intvalbin_size_int64:intvalbin_size_nativeint:intvalbin_size_nat0:intvalbin_size_variant_int:intvalbin_size_int_8bit:intvalbin_size_int_16bit:intvalbin_size_int_32bit:intvalbin_size_int_64bit:intvalbin_size_int64_bits:intvalbin_size_network16_int:intvalbin_size_network32_int:intvalbin_size_network32_int32:intvalbin_size_network64_int:intvalbin_size_network64_int64:intend(* Provide absolute minimum sizes for fields, choosing [0] for the lengths of any
arrays/vectors/matrices. *)moduleMinimum:sigvalbin_size_unit:intvalbin_size_bool:intvalbin_size_string:intvalbin_size_bytes:intvalbin_size_char:intvalbin_size_md5:intvalbin_size_int:intvalbin_size_float:intvalbin_size_int32:intvalbin_size_int64:intvalbin_size_nativeint:intvalbin_size_nat0:intvalbin_size_ref:intvalbin_size_lazy_t:intvalbin_size_option:intvalbin_size_pair:intvalbin_size_triple:intvalbin_size_list:intvalbin_size_array:intvalbin_size_hashtbl:intvalbin_size_float32_vec:intvalbin_size_float64_vec:intvalbin_size_vec:intvalbin_size_float32_mat:intvalbin_size_float64_mat:intvalbin_size_mat:intvalbin_size_bigstring:intvalbin_size_floatarray:intvalbin_size_float_array:intvalbin_size_variant_int:intvalbin_size_int_8bit:intvalbin_size_int_16bit:intvalbin_size_int_32bit:intvalbin_size_int_64bit:intvalbin_size_int64_bits:intvalbin_size_network16_int:intvalbin_size_network32_int:intvalbin_size_network32_int32:intvalbin_size_network64_int:intvalbin_size_network64_int64:intendend