diff options
author | Basile Starynkevitch <basile.starynkevitch@inria.fr> | 2004-04-14 11:26:21 +0000 |
---|---|---|
committer | Basile Starynkevitch <basile.starynkevitch@inria.fr> | 2004-04-14 11:26:21 +0000 |
commit | 4281c5216b2857088e44b54a0a9c28974a7ecf9f (patch) | |
tree | f3d8b4f0ab6568d6cb0940bc16e76837c0d0b8fd | |
parent | 4041c97364a104f21394a42a79aa32f235f13106 (diff) |
added Buffer.sub & Buffer.nth
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6203 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | stdlib/buffer.ml | 16 | ||||
-rw-r--r-- | stdlib/buffer.mli | 10 |
2 files changed, 26 insertions, 0 deletions
diff --git a/stdlib/buffer.ml b/stdlib/buffer.ml index dcde111ec..688e5c742 100644 --- a/stdlib/buffer.ml +++ b/stdlib/buffer.ml @@ -27,6 +27,22 @@ let create n = let contents b = String.sub b.buffer 0 b.position +let sub b ofs len = + if ofs < 0 || len < 0 || ofs > b.position - len + then invalid_arg "Buffer.sub" + else begin + let r = String.create len in + String.blit b.buffer ofs r 0 len; + r + end +;; + +let nth b ofs = + if ofs < 0 || ofs >= b.position then + invalid_arg "Buffer.nth" + else String.get b.buffer ofs +;; + let length b = b.position let clear b = b.position <- 0 diff --git a/stdlib/buffer.mli b/stdlib/buffer.mli index 73e02e299..0448df7a3 100644 --- a/stdlib/buffer.mli +++ b/stdlib/buffer.mli @@ -40,6 +40,16 @@ val contents : t -> string (** Return a copy of the current contents of the buffer. The buffer itself is unchanged. *) +val sub : t -> int -> int -> string +(** [Buffer.sub b off len] returns (a copy of) the substring of the +current contents of the buffer [b] starting at offset [off] of length +[len] bytes. May raise {!Invalid_arg} if out of bounds request. The +buffer itself is unaffected. *) + +val nth : t -> int -> char +(** get the n-th character of the buffer. Raise {!Invalid_arg} if +index out of bounds *) + val length : t -> int (** Return the number of characters currently contained in the buffer. *) |