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/trunk/src/comp-lib/dynamic.sml
ViewVC logotype

Annotation of /sml/trunk/src/comp-lib/dynamic.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 224 - (view) (download)

1 : monnier 89 (* Copyright 1989 by AT&T Bell Laboratories *)
2 :    
3 :     signature DYNAMIC_ARRAY = sig type array
4 :     exception Subscript
5 :     type elem
6 :     val array : elem -> array
7 :     val sub : array * int -> elem
8 :     val update : (array * int * elem) -> unit
9 :     end
10 :    
11 :     functor Dynamic( A : MONO_ARRAY ) : DYNAMIC_ARRAY =
12 :     struct
13 :     type array = {default: A.elem, arr: A.array ref}
14 :     type elem = A.elem
15 :     exception Subscript
16 :     infix 9 sub
17 :     fun array e = {default=e, arr= ref(A.array(0,e))};
18 :     fun {default, arr as ref a} sub i =
19 :     A.sub(a,i)
20 :     handle General.Subscript =>
21 :     if i < 0 then raise Subscript
22 :     else default
23 :     fun update ({default,arr as ref a}, i, e) =
24 :     A.update(a,i,e)
25 :     handle General.Subscript =>
26 :     if i<0 then raise Subscript
27 :     else
28 :     let val size = A.length a
29 :     val newsize = i + size + 1
30 :     val a2 = A.array(newsize, default)
31 :     fun copy j = (A.update(a2,j,A.sub(a,j)); copy(j-1))
32 :     in (copy (size - 1) handle General.Subscript => ());
33 :     arr := a2;
34 :     A.update(a2,i,e)
35 :     end
36 :    
37 :     end
38 :    
39 :    
40 :    
41 :     (*
42 : monnier 223 * $Log: dynamic.sml,v $
43 :     * Revision 1.1.1.1 1998/04/08 18:39:14 george
44 :     * Version 110.5
45 :     *
46 : monnier 89 *)

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