File: array2.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (22 lines) | stat: -rw-r--r-- 781 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
structure Array2 : sig

    type 'a array2
    exception Subscript
    val array: (int*int) * '1a -> '1a array2
    val sub : 'a array2 * (int*int) -> 'a
    val update : 'a array2 * (int*int) * 'a -> unit
    val length : 'a array2 -> (int*int)

  end = struct

    type 'a array2 = {size : (int*int), value : 'a Array.array}
    exception Subscript = Subscript
    fun index ((i1:int,i2:int),(s1,s2)) =
	if i1>=0 andalso i1<s1 andalso i2>=0 andalso i2<s2 then i1*s2+i2 
	else raise Subscript
    fun array(bnds as (i1,i2), v) = {size=bnds, value=Array.array(i1*i2, v)}
    fun op sub ({size,value}, indx) = Array.sub(value, index(indx,size))
    fun update ({size=size,value=A},i,v) = Array.update(A,index(i,size),v)
    fun length{size=size,value=A} = size

  end; (* Array2 *)