Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/branches/FLINT/src/compiler/PervEnv/Basis/string-cvt.sml
ViewVC logotype

Annotation of /sml/branches/FLINT/src/compiler/PervEnv/Basis/string-cvt.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 90 - (view) (download)

1 : monnier 89 (* string-cvt.sml
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :    
7 :     structure StringCvt : STRING_CVT =
8 :     struct
9 :    
10 :     (* get radix and realfmt types from type-only structure *)
11 :     open StringCvt
12 :    
13 :     val op + = InlineT.DfltInt.+
14 :     val op - = InlineT.DfltInt.-
15 :     val op < = InlineT.DfltInt.<
16 :     val op > = InlineT.DfltInt.>
17 :    
18 :     local
19 :     fun fillStr (c, s, i, n) = let
20 :     val stop = i+n
21 :     fun fill j = if (j < stop)
22 :     then (InlineT.CharVector.update(s, j, c); fill(j+1))
23 :     else ()
24 :     in
25 :     fill i
26 :     end
27 :     fun cpyStr (src, srcLen, dst, start) = let
28 :     fun cpy (i, j) = if (i < srcLen)
29 :     then (
30 :     InlineT.CharVector.update(dst, j, InlineT.CharVector.sub(src, i));
31 :     cpy (i+1, j+1))
32 :     else ()
33 :     in
34 :     cpy (0, start)
35 :     end
36 :     in
37 :     fun padLeft padChr wid s = let
38 :     val len = InlineT.CharVector.length s
39 :     val pad = wid - len
40 :     in
41 :     if (pad > 0)
42 :     then let
43 :     val s' = PreString.create wid
44 :     in
45 :     fillStr (padChr, s', 0, pad);
46 :     cpyStr (s, len, s', pad);
47 :     s'
48 :     end
49 :     else s
50 :     end
51 :     fun padRight padChr wid s = let
52 :     val len = InlineT.CharVector.length s
53 :     val pad = wid - len
54 :     in
55 :     if (pad > 0)
56 :     then let
57 :     val s' = PreString.create wid
58 :     in
59 :     fillStr (padChr, s', len, pad);
60 :     cpyStr (s, len, s', 0);
61 :     s'
62 :     end
63 :     else s
64 :     end
65 :     end (* local *)
66 :    
67 :     fun revImplode (0, _) = ""
68 :     | revImplode (n, chars) = PreString.revImplode(n, chars)
69 :    
70 :     fun splitl pred getc rep = let
71 :     fun lp (n, chars, rep) = (case (getc rep)
72 :     of NONE => (revImplode(n, chars), rep)
73 :     | SOME(c, rep') => if (pred c)
74 :     then lp(n+1, c::chars, rep')
75 :     else (revImplode(n, chars), rep)
76 :     (* end case *))
77 :     in
78 :     lp (0, [], rep)
79 :     end
80 :     fun takel pred getc rep = let
81 :     fun lp (n, chars, rep) = (case (getc rep)
82 :     of NONE => revImplode(n, chars)
83 :     | SOME(c, rep') => if (pred c)
84 :     then lp(n+1, c::chars, rep')
85 :     else revImplode(n, chars)
86 :     (* end case *))
87 :     in
88 :     lp (0, [], rep)
89 :     end
90 :     fun dropl pred getc = let
91 :     fun lp rep = (case (getc rep)
92 :     of NONE => rep
93 :     | SOME(c, rep') => if (pred c) then lp rep' else rep
94 :     (* end case *))
95 :     in
96 :     lp
97 :     end
98 :     val skipWS = PreBasis.skipWS
99 :    
100 :     (* the cs type is the type used by scanString to represent a stream of
101 :     * characters; we use the current index in the string being scanned.
102 :     *)
103 :     type cs = int
104 :     val scanString = PreBasis.scanString
105 :    
106 :     end
107 :    
108 :    
109 :     (*
110 :     * $Log: string-cvt.sml,v $
111 :     * Revision 1.1.1.1 1998/04/08 18:40:04 george
112 :     * Version 110.5
113 :     *
114 :     *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0