dwww Home | Manual pages | Find package

Stdlib.Marshal(3o)               OCaml library              Stdlib.Marshal(3o)

NAME
       Stdlib.Marshal - no description

Module
       Module   Stdlib.Marshal

Documentation
       Module Marshal
        : (module Stdlib__Marshal)

       type extern_flags =
        | No_sharing  (* Don't preserve sharing
        *)
        | Closures  (* Send function closures
        *)
        | Compat_32  (* Ensure 32-bit compatibility
        *)

       The flags to the Marshal.to_* functions below.

       val to_channel : out_channel -> 'a -> extern_flags list -> unit

       Marshal.to_channel chan v flags writes the representation of v on chan-
       nel chan . The flags argument is a possibly empty list  of  flags  that
       governs  the  marshaling  behavior  with respect to sharing, functional
       values, and compatibility between 32- and 64-bit platforms.

       If flags does not contain Marshal.No_sharing , circularities and  shar-
       ing  inside  the  value v are detected and preserved in the sequence of
       bytes produced. In particular, this guarantees that  marshaling  always
       terminates.  Sharing  between  values  marshaled by successive calls to
       Marshal.to_channel is neither detected nor preserved, though.  If flags
       contains  Marshal.No_sharing  ,  sharing  is  ignored.  This results in
       faster marshaling if v contains no shared substructures, but may  cause
       slower  marshaling  and  larger byte representations if v actually con-
       tains sharing, or even non-termination if v contains cycles.

       If flags does not contain Marshal.Closures , marshaling fails  when  it
       encounters  a  functional value inside v : only 'pure' data structures,
       containing neither functions nor objects, can safely be transmitted be-
       tween  different  programs.  If flags contains Marshal.Closures , func-
       tional values will be marshaled as a the position in the  code  of  the
       program  together  with  the values corresponding to the free variables
       captured in the closure.  In this case, the output  of  marshaling  can
       only  be read back in processes that run exactly the same program, with
       exactly the same compiled code. (This is checked at un-marshaling time,
       using  an  MD5 digest of the code transmitted along with the code posi-
       tion.)

       The exact definition of which free variables are captured in a  closure
       is not specified and can vary between bytecode and native code (and ac-
       cording to optimization flags).  In particular, a  function  value  ac-
       cessing  a global reference may or may not include the reference in its
       closure.  If it does, unmarshaling the corresponding closure will  cre-
       ate a new reference, different from the global one.

       If  flags contains Marshal.Compat_32 , marshaling fails when it encoun-
       ters an integer value outside the range [-2{^30}, 2{^30}-1] of integers
       that  are  representable  on a 32-bit platform.  This ensures that mar-
       shaled data generated on a 64-bit platform can be safely read back on a
       32-bit platform.  If flags does not contain Marshal.Compat_32 , integer
       values outside the range [-2{^30}, 2{^30}-1] are marshaled, and can  be
       read  back on a 64-bit platform, but will cause an error at un-marshal-
       ing time when read back on a  32-bit  platform.   The  Mashal.Compat_32
       flag only matters when marshaling is performed on a 64-bit platform; it
       has no effect if marshaling is performed on a 32-bit platform.

       Raises Failure if chan is not in binary mode.

       val to_bytes : 'a -> extern_flags list -> bytes

       Marshal.to_bytes v flags returns a byte sequence containing the  repre-
       sentation  of  v .  The flags argument has the same meaning as for Mar-
       shal.to_channel .

       Since 4.02.0

       val to_string : 'a -> extern_flags list -> string

       Same as to_bytes but return the result as a string instead  of  a  byte
       sequence.

       val to_buffer : bytes -> int -> int -> 'a -> extern_flags list -> int

       Marshal.to_buffer  buff  ofs len v flags marshals the value v , storing
       its byte representation in the sequence buff , starting at index ofs  ,
       and writing at most len bytes.  It returns the number of bytes actually
       written to the sequence. If the byte representation of v does  not  fit
       in len characters, the exception Failure is raised.

       val from_channel : in_channel -> 'a

       Marshal.from_channel  chan reads from channel chan the byte representa-
       tion of a structured value, as produced  by  one  of  the  Marshal.to_*
       functions, and reconstructs and returns the corresponding value.

       Raises End_of_file if chan is already at the end of the file.

       Raises  Failure  if the end of the file is reached during unmarshalling
       itself or if chan is not in binary mode.

       val from_bytes : bytes -> int -> 'a

       Marshal.from_bytes buff ofs unmarshals a  structured  value  like  Mar-
       shal.from_channel does, except that the byte representation is not read
       from a channel, but taken from the byte sequence buff , starting at po-
       sition ofs .  The byte sequence is not mutated.

       Since 4.02.0

       val from_string : string -> int -> 'a

       Same  as from_bytes but take a string as argument instead of a byte se-
       quence.

       val header_size : int

       The bytes representing a marshaled value are composed of  a  fixed-size
       header  and  a  variable-sized  data part, whose size can be determined
       from the header.  Marshal.header_size is the size,  in  bytes,  of  the
       header.   Marshal.data_size buff ofs is the size, in bytes, of the data
       part, assuming a valid header is stored in buff  starting  at  position
       ofs  .   Finally,  Marshal.total_size  buff  ofs  is the total size, in
       bytes, of the marshaled value.  Both Marshal.data_size and  Marshal.to-
       tal_size raise Failure if buff , ofs does not contain a valid header.

       To  read  the  byte representation of a marshaled value into a byte se-
       quence, the program needs to read first Marshal.header_size bytes  into
       the  sequence, then determine the length of the remainder of the repre-
       sentation using Marshal.data_size , make sure  the  sequence  is  large
       enough  to hold the remaining data, then read it, and finally call Mar-
       shal.from_bytes to unmarshal the value.

       val data_size : bytes -> int -> int

       See Marshal.header_size .

       val total_size : bytes -> int -> int

       See Marshal.header_size .

OCamldoc                          2023-02-12                Stdlib.Marshal(3o)

Generated by dwww version 1.15 on Sat Jun 22 02:43:53 CEST 2024.