X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=bitstring.mli;h=a29cb03b965ab2330dba714ba121fdc8342d1d1d;hb=63bf7692c8cd8a1a6960cb24f3cdac24c61d5cf1;hp=1e271f5c76f44872255cd3d5a6a945c9df08784c;hpb=f81222958ae7d757d66235eb7ef764ac0d96dd19;p=ocaml-bitstring.git diff --git a/bitstring.mli b/bitstring.mli index 1e271f5..a29cb03 100644 --- a/bitstring.mli +++ b/bitstring.mli @@ -667,6 +667,12 @@ type bitstring = string * int * int {!hexdump_bitstring}, {!bitstring_length}. *) +type t = bitstring +(** [t] is a synonym for the {!bitstring} type. + + This allows you to use this module with functors like + [Set] and [Map] from the stdlib. *) + (** {3 Exceptions} *) exception Construct_failure of string * string * int * int @@ -683,6 +689,24 @@ exception Construct_failure of string * string * int * int location of the [BITSTRING] constructor that failed. *) +(** {3 Bitstring comparison} *) + +val compare : bitstring -> bitstring -> int +(** [compare bs1 bs2] compares two bitstrings and returns zero + if they are equal, a negative number if [bs1 < bs2], or a + positive number if [bs1 > bs2]. + + This tests "semantic equality" which is not affected by + the offset or alignment of the underlying representation + (see {!bitstring}). + + The ordering is total and lexicographic. *) + +val equals : bitstring -> bitstring -> bool +(** [equals] returns true if and only if the two bitstrings are + semantically equal. It is the same as calling [compare] and + testing if the result is [0], but usually more efficient. *) + (** {3 Bitstring manipulation} *) val bitstring_length : bitstring -> int @@ -722,6 +746,10 @@ val takebits : int -> bitstring -> bitstring Note that this function just changes the offset and length fields of the {!bitstring} tuple, so is very efficient. *) +val concat : bitstring list -> bitstring +(** Concatenate a list of bitstrings together into a single + bitstring. *) + (** {3 Constructing bitstrings} *) val empty_bitstring : bitstring @@ -850,6 +878,36 @@ end may also be useful for end users. They work much like the standard library [Buffer] module. *) +(** {3 Get/set bits} + + These functions let you manipulate individual bits in the + bitstring. However they are not particularly efficient and you + should generally use the [bitmatch] and [BITSTRING] operators when + building and parsing bitstrings. + + These functions all raise [Invalid_argument "index out of bounds"] + if the index is out of range of the bitstring. +*) + +val set : bitstring -> int -> unit + (** [set bits n] sets the [n]th bit in the bitstring to 1. *) + +val clear : bitstring -> int -> unit + (** [clear bits n] sets the [n]th bit in the bitstring to 0. *) + +val is_set : bitstring -> int -> bool + (** [is_set bits n] is true if the [n]th bit is set to 1. *) + +val is_clear : bitstring -> int -> bool + (** [is_clear bits n] is true if the [n]th bit is set to 0. *) + +val put : bitstring -> int -> int -> unit + (** [put bits n v] sets the [n]th bit in the bitstring to 1 + if [v] is not zero, or to 0 if [v] is zero. *) + +val get : bitstring -> int -> int + (** [get bits n] returns the [n]th bit (returns non-zero or 0). *) + (** {3 Miscellaneous} *) val package : string