Plasma GitLab Archive
Projects Blog Knowledge

Module Netpagebuffer

module Netpagebuffer: sig .. end

Buffer for page-aligned I/O


This kind of buffer uses page-aligned bigarrays. Data can only be added to the end, or deleted at the beginning of the buffer.

The idea of this buffer is that input data is added to the last page of the buffer only (with add_inplace). If then all previous input was already a multiple of the page size, it is ensured that the new input is added at a page boundary. This kind of input operation can often be accelerated by the OS ("zero copy network I/O").

type t 
val create : int -> t

create blocksize: creates new buffer with this blocksize, which must be a whole multiple of the page size of the OS

The blocksize is normally either

These cases are optimized, and the buffer is allocated in a shared pool.

val contents : t -> string

Returns the contents as string

val to_bytes : t -> Stdlib.Bytes.t

Returns the contents of the buffer as fresh string.

val to_tstring_poly : t -> 's Netstring_tstring.tstring_kind -> 's

Return the buffer in the format as selected by the arg

val to_tstring : t -> 'a Netstring_tstring.tstring_kind -> Netsys_types.tstring

Returns the buffer as tagged string, selecting the chosen representation

val length : t -> int

The length

val sub : t -> int -> int -> string

Returns a substring

val sub_bytes : t -> int -> int -> Stdlib.Bytes.t

Same for bytes

val blit_to_bytes : t -> int -> Stdlib.Bytes.t -> int -> int -> unit

Blits contents to a string

val blit_to_string : t -> int -> Stdlib.Bytes.t -> int -> int -> unit
Deprecated."Use blit_to_bytes instead."
val blit_to_memory : t -> int -> Netsys_mem.memory -> int -> int -> unit

Blits contents to another memory buffer

val blit_to_tbuffer : t -> int -> Netsys_types.tbuffer -> int -> int -> unit

Blits contents to a tagged buffer

val blit : t -> int -> Stdlib.Bytes.t -> int -> int -> unit

Compatibility name for blit_to_bytes

val add_string : t -> string -> unit

Adds a string to the end of the buffer

val add_bytes : t -> Stdlib.Bytes.t -> unit

Same for bytes

val add_tstring : t -> Netsys_types.tstring -> unit

Same for tagged string

val add_substring : t -> string -> int -> int -> unit

Adds a sub string to the end of the buffer

val add_sub_string : t -> string -> int -> int -> unit
Deprecated."Use add_substring instead."
val add_subbytes : t -> Stdlib.Bytes.t -> int -> int -> unit

Adds a sub string to the end of the buffer

val add_submemory : t -> Netsys_mem.memory -> int -> int -> unit

Adds a sub memory buffer to the end of the buffer

val add_sub_memory : t -> Netsys_mem.memory -> int -> int -> unit
Deprecated."Use add_submemory instead."
val add_subtstring : t -> Netsys_types.tstring -> int -> int -> unit

Adds a sub tstring to the end of the buffer

val add_inplace : t -> (Netsys_mem.memory -> int -> int -> int) -> int

add_inplace b f: Calls f m pos len where m is the last page of the buffer, and pos is the first free byte on the page, and len is the number of free bytes on the page. The function f is expected to store new data in m from pos to pos+n-1 and to return n. The number n is also returned as final result.

It is ensured that f is called with a value of len>=1.

val page_for_additions : t -> Netsys_mem.memory * int * int

let (m,pos,len) = page_for_additions b: Returns the last page in m, the first free byte on the page in pos, and the number of free bytes on the page in len. (The same values the function f would have got as arguments in add_inplace.)

val advance : t -> int -> unit

advance b n: Marks further n bytes in the last page of the buffer as used. These bytes are not modified in any way - it is expected that the user calls page_for_additions first, and sets these n bytes to new values directly.

val page_for_consumption : t -> Netsys_mem.memory * int * int

let (m,pos,len) = page_for_consumption b: Returns the first page in m, the first used byte on the page in pos, and the number of used bytes on the page in len.

val delete_hd : t -> int -> unit

delete_hd b n: Deletes n bytes from the beginning of the buffer

val clear : t -> unit

Deletes all contents of the buffer

Searching

val index_from : t -> int -> char -> int

index_from nb k c: Searches the character c in the buffer beginning at position k. If found, the position of the left-most occurence is returned. Otherwise, Not_found is raised.

This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml