# Module Netstring_tstring

    module Netstring_tstring: sig .. end

Support module for tagged strings

    type '_ tstring_kind =

`|` | `String_kind : `string tstring_kind``
`|` | `Bytes_kind : `Stdlib.Bytes.t tstring_kind``
`|` | `Memory_kind : `Netsys_types.memory tstring_kind``

GADT for encoding the string type (string/bytes/bigarray)

    type 't tstring_ops = {

`` | `kind : `'t tstring_kind option`;`
`` | `length : `'t -> int`;`
`` | `get : `'t -> int -> char`;`
`` | `unsafe_get : `'t -> int -> char`;`
`` | `unsafe_get3 : `'t -> int -> int`;` | `(*` | get 3 chars packed into one int (first char shifted by 16 bits, second char shifted by 8 bits, third char unshifted) | `*)`
`` | `copy : `'t -> 't`;`
`` | `string : `'t -> string`;` | `(*` | if possible this function does not make a copy | `*)`
`` | `bytes : `'t -> Stdlib.Bytes.t`;` | `(*` | if possible this function does not make a copy | `*)`
`` | `sub : `'t -> int -> int -> 't`;`
`` | `substring : `'t -> int -> int -> string`;`
`` | `subbytes : `'t -> int -> int -> Stdlib.Bytes.t`;`
`` | `subpoly : `'u. 'u tstring_kind -> 't -> int -> int -> 'u`;`
`` | `blit_to_bytes : `'t -> int -> Stdlib.Bytes.t -> int -> int -> unit`;`
`` | `blit_to_memory : `'t -> int -> Netsys_types.memory -> int -> int -> unit`;`
`` | `index_from : `'t -> int -> char -> int`;`
`` | `index_from3 : `'t -> int -> int -> char -> char -> char -> int`;` | `(*` | finds any of three chars. The second int is the search radius | `*)`
`` | `rindex_from : `'t -> int -> char -> int`;`
`` | `rindex_from3 : `'t -> int -> int -> char -> char -> char -> int`;` | `(*` | finds any of three chars. The second int is the search radius | `*)`

}

Operations to call on strings

    type tstring_ops_box =

`|` | `Tstring_ops_box : `'t tstring_kind * 't tstring_ops` -> `tstring_ops_box``

GADT for hiding the type parameter

    type tstring_box =

`|` | `Tstring_box : `'t tstring_kind * 't tstring_ops * 't` -> `tstring_box``

GADT for hiding the type parameter

    type tstring_polybox =

`|` | `Tstring_polybox : `'t tstring_ops * 't` -> `tstring_polybox``

GADT for hiding the type parameter. Warning: This GADT does not permit you to recover the kind of string

    val string_ops : string tstring_ops

Implementation of the operations for `string`

    val bytes_ops : Stdlib.Bytes.t tstring_ops

Implementation of the operations for `bytes`

    val memory_ops : Netsys_types.memory tstring_ops

Implementation of the operations for `memory`

    val ops_of_tstring : Netsys_types.tstring -> tstring_ops_box

Create a `Tstring_ops_box`

    type 'a with_fun = {

`` | `with_fun : `'s. 's tstring_ops -> 's -> 'a`;`

}

A polymorphic function for strings

    val with_tstring : 'a with_fun -> Netsys_types.tstring -> 'a

`with_tstring f ts`: Calls `f.with_fun` with the right implementation of the `tstring_ops` argument

    val length_tstring : Netsys_types.tstring -> int

Get the length of a tagged string

    val tstring_of_tbuffer : Netsys_types.tbuffer -> Netsys_types.tstring

Get the tagged string of a tagged buffer

    val polymorph_string_transformation : (string -> string) ->
           's tstring_ops ->
           't tstring_kind -> 's -> 't

`polymorph_string_transformation f ops kind s`: Converts `s` to a string, runs `f` on this string, and converts the result to the type demanded by `kind`