Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file protobuf.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293typepayload_kind=|Varint|Bits32|Bits64|Bytesletmin_int_as_int32,max_int_as_int32=Int32.of_intmin_int,Int32.of_intmax_intletmin_int_as_int64,max_int_as_int64=Int64.of_intmin_int,Int64.of_intmax_intletmin_int32_as_int64,max_int32_as_int64=Int64.of_int32Int32.min_int,Int64.of_int32Int32.max_intletmin_int32_as_int,max_int32_as_int=ifSys.word_size=64thenInt32.to_intInt32.min_int,Int32.to_intInt32.max_intelse0,0moduleDecoder=structtypeerror=|Incomplete|Overlong_varint|Malformed_field|Overflowofstring|Unexpected_payloadofstring*payload_kind|Missing_fieldofstring|Malformed_variantofstringleterror_to_stringe=matchewith|Incomplete->"Incomplete"|Overlong_varint->"Overlong_varint"|Malformed_field->"Malformed_field"|Overflowfld->Printf.sprintf"Overflow(%S)"fld|Unexpected_payload(field,kind)->letkind'=matchkindwith|Varint->"Varint"|Bits32->"Bits32"|Bits64->"Bits64"|Bytes->"Bytes"inPrintf.sprintf"Unexpected_payload(%S, %s)"fieldkind'|Missing_fieldfield->Printf.sprintf"Missing_field(%S)"field|Malformed_variantname->Printf.sprintf"Malformed_variant(%S)"nameexceptionFailureoferrorlet()=Printexc.register_printer(funexn->matchexnwith|Failuree->Some(Printf.sprintf"Protobuf.Decoder.Failure(%s)"(error_to_stringe))|_->None)letint_of_int32fldv=ifSys.word_size=32&&(v<min_int_as_int32||v>max_int_as_int32)thenraise(Failure(Overflowfld));Int32.to_intvletint_of_int64fldv=if(v<min_int_as_int64||v>max_int_as_int64)thenraise(Failure(Overflowfld));Int64.to_intvletint32_of_int64fldv=if(v<min_int32_as_int64||v>max_int32_as_int64)thenraise(Failure(Overflowfld));Int64.to_int32vletbool_of_int64fldv=ifv=Int64.zerothenfalseelseifv=Int64.onethentrueelseraise(Failure(Overflowfld))typet={source:bytes;limit:int;mutableoffset:int;}letof_bytessource={source;offset=0;limit=Bytes.lengthsource;}letof_stringsource={source=Bytes.of_stringsource;offset=0;limit=String.lengthsource;}letdecode_exnfsource=f(of_bytessource)letdecodefsource=trySome(decode_exnfsource)withFailure_->Noneletat_endd=d.limit=d.offsetletbyted=ifd.offset>=d.limitthenraise(FailureIncomplete);letbyte=int_of_char(Bytes.getd.sourced.offset)ind.offset<-d.offset+1;byteletvarintd=letrecreads=letb=bytedinifbland0x80<>0thenInt64.(logor(shift_left(logand(of_intb)0x7fL)s)(read(s+7)))elseifs<63||(bland0x7f)<=1thenInt64.(shift_left(of_intb)s)elseraise(FailureOverlong_varint)inread0letzigzagd=letv=varintdinInt64.(logxor(shift_rightv1)(neg(logandvInt64.one)))letbits32d=letb1=bytedinletb2=bytedinletb3=bytedinletb4=bytedinInt32.(add(shift_left(of_intb4)24)(add(shift_left(of_intb3)16)(add(shift_left(of_intb2)8)(of_intb1))))letbits64d=letb1=bytedinletb2=bytedinletb3=bytedinletb4=bytedinletb5=bytedinletb6=bytedinletb7=bytedinletb8=bytedinInt64.(add(shift_left(of_intb8)56)(add(shift_left(of_intb7)48)(add(shift_left(of_intb6)40)(add(shift_left(of_intb5)32)(add(shift_left(of_intb4)24)(add(shift_left(of_intb3)16)(add(shift_left(of_intb2)8)(of_intb1))))))))letbytesd=(* strings are always shorter than range of int *)letlen=Int64.to_int(varintd)inifd.offset+len>d.limitthenraise(FailureIncomplete);letstr=Bytes.subd.sourced.offsetlenind.offset<-d.offset+len;strletnestedd=(* strings are always shorter than range of int *)letlen=Int64.to_int(varintd)inifd.offset+len>d.limitthenraise(FailureIncomplete);letd'={dwithlimit=d.offset+len;}ind.offset<-d.offset+len;d'letkeyd=ifd.offset=d.limitthenNoneelse(* keys are always in the range of int, but prefix might only fit into int32 *)letprefix=varintdinletkey,ty=Int64.(to_int(shift_rightprefix3)),Int64.logand0x7Lprefixinmatchtywith|0L->Some(key,Varint)|1L->Some(key,Bits64)|2L->Some(key,Bytes)|5L->Some(key,Bits32)|_->raise(FailureMalformed_field)letskipdkind=letskip_lenn=ifd.offset+n>d.limitthenraise(FailureIncomplete);d.offset<-d.offset+ninletrecskip_varint()=letb=bytedinifbland0x80<>0thenskip_varint()else()inmatchkindwith|Bits32->skip_len4|Bits64->skip_len8(* strings are always shorter than range of int *)|Bytes->skip_len(Int64.to_int(varintd))|Varint->skip_varint()endmoduleEncoder=structtypeerror=|Overflowofstringleterror_to_stringe=matchewith|Overflowfld->Printf.sprintf"Overflow(%S)"fldexceptionFailureoferrorlet()=Printexc.register_printer(funexn->matchexnwith|Failuree->Some(Printf.sprintf"Protobuf.Encoder.Failure(%s)"(error_to_stringe))|_->None)typet=Buffer.tletcreate()=Buffer.create16letto_string=Buffer.contentsletto_bytes=Buffer.to_bytesletencode_exnfx=lete=create()infxe;to_byteseletencodefx=trySome(encode_exnfx)withFailure_->Noneletvarintie=letrecwritei=ifInt64.(logandi(lognot0x7fL))=Int64.zerothenBuffer.add_chare(char_of_intInt64.(to_int(logand0x7fLi)))elsebeginBuffer.add_chare(char_of_intInt64.(to_int(logor0x80L(logand0x7fLi))));write(Int64.shift_right_logicali7)endinwriteiletsmallintie=varint(Int64.of_inti)eletzigzagie=varintInt64.(logxor(shift_lefti1)(shift_righti63))eletbits32ie=Buffer.add_chare(char_of_intInt32.(to_int(logand0xffli)));Buffer.add_chare(char_of_intInt32.(to_int(logand0xffl(shift_righti8))));Buffer.add_chare(char_of_intInt32.(to_int(logand0xffl(shift_righti16))));Buffer.add_chare(char_of_intInt32.(to_int(logand0xffl(shift_righti24))))letbits64ie=Buffer.add_chare(char_of_intInt64.(to_int(logand0xffLi)));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti8))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti16))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti24))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti32))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti40))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti48))));Buffer.add_chare(char_of_intInt64.(to_int(logand0xffL(shift_righti56))))letbytesbe=smallint(Bytes.lengthb)e;Buffer.add_bytesebletnestedfe=lete'=Buffer.create16infe';smallint(Buffer.lengthe')e;Buffer.add_bufferee'letkey(k,pk)e=letpk'=matchpkwith|Varint->0|Bits64->1|Bytes->2|Bits32->5insmallint(pk'lor(klsl3))eletint32_of_int64fldv=if(v<min_int32_as_int64||v>max_int32_as_int64)thenraise(Failure(Overflowfld));Int64.to_int32vletint32_of_intfldv=ifSys.word_size=64&&(v<min_int32_as_int||v>max_int32_as_int)thenraise(Failure(Overflowfld));Int32.of_intvend