Module Blit_intf

Standard type for blit functions, and reusable code for validating blit arguments.


type ('src, 'dst) blit = src:'src -> src_pos:int -> dst:'dst -> dst_pos:int -> len:int -> unit

If blit : (src, dst) blit, then blit ~src ~src_pos ~len ~dst ~dst_pos blits len values from src starting at position src_pos to dst at position dst_pos. Furthermore, blit raises if src_pos, len, and dst_pos don't specify valid slices of src and dst.

type ('src, 'dst) blito = src:'src -> ?src_pos:int -> ?src_len:int -> dst:'dst -> ?dst_pos:int -> unit -> unit

blito is like blit, except that the src_pos, src_len, and dst_pos are optional (hence the "o" in "blito"). Also, we use src_len rather than len as a reminder that if src_len isn't supplied, then the default is to take the slice running from src_pos to the end of src.

type ('src, 'dst) sub = 'src -> pos:int -> len:int -> 'dst

If sub : (src, dst) sub, then sub ~src ~pos ~len returns a sequence of type dst containing len characters of src starting at pos.

subo is like sub, except pos and len are optional.

type ('src, 'dst) subo = ?pos:int -> ?len:int -> 'src -> 'dst
module type S = sig .. end
module type S_permissions = sig .. end
module type S1 = sig .. end
module type S1_permissions = sig .. end
module type S_distinct = sig .. end

Users of modules matching the blit signatures S, S1, and S1_distinct only need to understand the code above. The code below is only for those that need to implement modules that match those signatures.

module type Elt = sig .. end
module type Sequence = sig .. end
module type Blit = sig .. end