Module Blit = Core_kernel.Blit


include Core_kernel.Blit_intf.Blit
type ('src, 'dst) blit = ('src, 'dst) Blit_intf.blit
type ('src, 'dst) blito = ('src, 'dst) Blit_intf.blito
type ('src, 'dst) sub = ('src, 'dst) Blit_intf.sub
type ('src, 'dst) subo = ('src, 'dst) Blit_intf.subo
module type S = Blit_intf.S
module type S1 = Blit_intf.S1

There are various Make* functors that turn an unsafe_blit function into a blit function. The functors differ in whether the sequence type is monomorphic or polymorphic, and whether the src and dst types are distinct or are the same.

The blit functions make sure the slices are valid and then call unsafe_blit. They guarantee at a call unsafe_blit ~src ~src_pos ~dst ~dst_pos ~len that:

        len > 0
        && src_pos >= 0
        && src_pos + len <= get_src_len src
        && dst_pos >= 0
        && dst_pos + len <= get_dst_len dst

The Make* functors also automatically create unit tests.

module Make (Elt : Blit_intf.Elt) (Sequence : sig .. end) : S with type t := Sequence.t
Make is for blitting between two values of the same monomorphic type.
module Make_distinct (Elt : Blit_intf.Elt) (Src : Blit_intf.Sequence with type elt := Elt.t) (Dst : sig .. end) : S_distinct with type src := Src.t with type dst := Dst.t
Make_distinct is for blitting between values of distinct monomorphic types.
module Make1 (Sequence : sig .. end) : S1 with type 'a t := 'a Sequence.t
Make1 is for blitting between two values of the same polymorphic type.