~ubuntu-branches/ubuntu/lucid/camomile/lucid

« back to all changes in this revision

Viewing changes to public/xString.ml

  • Committer: Bazaar Package Importer
  • Author(s): Sylvain Le Gall
  • Date: 2005-12-03 01:18:55 UTC
  • Revision ID: james.westby@ubuntu.com-20051203011855-qzvwlld1xyqnl62t
Tags: upstream-0.6.3
ImportĀ upstreamĀ versionĀ 0.6.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(* $Id: xString.ml,v 1.3 2004/09/04 16:07:38 yori Exp $ *)
 
2
(* Copyright 2002, 2003 Yamagata Yoriyuki. distributed with LGPL *)
 
3
 
 
4
module type XStringSig = sig
 
5
  type xstring = UChar.t XArray.t
 
6
 
 
7
  val get : xstring -> int -> UChar.t
 
8
  val set : xstring -> int -> UChar.t -> unit
 
9
  val length : xstring -> int
 
10
 
 
11
  type index
 
12
  val look : xstring -> index -> UChar.t
 
13
  val nth : xstring -> int -> index
 
14
  val first : xstring -> index
 
15
  val last : xstring -> index
 
16
  val out_of_range : xstring -> index -> bool
 
17
  val next : xstring -> index -> index
 
18
  val prev : xstring -> index -> index
 
19
  val move : xstring -> index -> int -> index
 
20
  val compare_index : xstring -> index -> index -> int
 
21
 
 
22
  val make : ?bufsize:int -> int -> UChar.t -> xstring
 
23
  val clear : xstring -> unit
 
24
  val reset : xstring -> unit
 
25
  val copy : xstring -> xstring
 
26
  val sub : xstring -> int -> int -> xstring
 
27
  val add_char : xstring -> UChar.t -> unit
 
28
  val add_text : xstring -> 'a UText.text -> unit
 
29
  val add_xstring : xstring -> xstring -> unit
 
30
  val shrink : xstring -> int -> unit
 
31
  val append : xstring -> xstring -> xstring
 
32
  val utext_of : xstring -> UText.t
 
33
  val ustring_of : xstring -> UText.ustring
 
34
      
 
35
  val iter : (UChar.t -> unit) -> xstring -> unit
 
36
  val compare : xstring -> xstring -> int
 
37
end
 
38
 
 
39
module XStringAux : XStringSig = struct
 
40
  include XArray
 
41
  type xstring = UChar.t XArray.t
 
42
 
 
43
  let rec compare_aux i t1 t2 =
 
44
    if i >= length t1 then
 
45
      if i >= length t2 then 0 else ~-1
 
46
    else if i >= length t2 then 1 else
 
47
    match UChar.compare (XArray.get t1 i) (XArray.get t2 i) with
 
48
      0 -> compare_aux (i + 1) t1 t2
 
49
    | sgn -> sgn
 
50
 
 
51
  let compare t1 t2 = compare_aux 0 t1 t2
 
52
  let add_xstring = add_xarray
 
53
  let add_char = add_element
 
54
  let add_text b t = UText.iter (add_char b) t
 
55
  let ustring_of b = UText.init_ustring (length b) (get b)
 
56
  let utext_of b = UText.init (length b) (get b)
 
57
end
 
58
 
 
59
  include XStringAux
 
60
  type text = xstring
 
61
  type t = xstring
 
62
 
 
63
  let init len f = XArray.init len (UChar.chr_of_uint 0) f
 
64
 
 
65
  module Buf =
 
66
    struct
 
67
      include XStringAux
 
68
      type buf = xstring
 
69
      let create bufsize = make ~bufsize 0 (UChar.chr_of_uint 0)
 
70
      let contents x = x
 
71
      let add_string = add_xstring
 
72
      let add_buffer = add_xstring
 
73
    end