File: prim-seq.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (60 lines) | stat: -rw-r--r-- 2,564 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
(* Copyright (C) 2017 Matthew Fluet.
 * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh
 *    Jagannathan, and Stephen Weeks.
 * Copyright (C) 1997-2000 NEC Research Institute.
 *
 * MLton is released under a HPND-style license.
 * See the file MLton-LICENSE for details.
 *)

(* Primitive names are special -- see atoms/prim.fun. *)

structure Primitive = struct

open Primitive

structure Array =
   struct
      open Array
      val allocUnsafe = _prim "Array_alloc": SeqIndex.int -> 'a array;
      val copyArrayUnsafe = _prim "Array_copyArray": 'a array * SeqIndex.int * 'a array * SeqIndex.int * SeqIndex.int -> unit;
      val copyVectorUnsafe = _prim "Array_copyVector": 'a array * SeqIndex.int * 'a vector * SeqIndex.int * SeqIndex.int -> unit;
      val length = _prim "Array_length": 'a array -> SeqIndex.int;
      (* There is no maximum length on arrays, so maxLen' = SeqIndex.maxInt'. *)
      (* val maxLen': SeqIndex.int = SeqIndex.maxInt' *)
      val subUnsafe = _prim "Array_sub": 'a array * SeqIndex.int -> 'a;
      val uninitIsNop = _prim "Array_uninitIsNop": 'a array -> bool;
      val uninitUnsafe = _prim "Array_uninit": 'a array * SeqIndex.int -> unit;
      val updateUnsafe = _prim "Array_update": 'a array * SeqIndex.int * 'a -> unit;

      structure Raw :> sig
                          type 'a rawarr
                          val allocUnsafe: SeqIndex.int -> 'a rawarr
                          val length: 'a rawarr -> SeqIndex.int
                          val toArrayUnsafe: 'a rawarr -> 'a array
                          val uninitIsNop: 'a rawarr -> bool
                          val uninitUnsafe: 'a rawarr * SeqIndex.int -> unit
                       end =
        struct
           type 'a rawarr = 'a array
           val allocUnsafe = _prim "Array_allocRaw": SeqIndex.int -> 'a rawarr;
           val length = length
           val toArrayUnsafe = _prim "Array_toArray": 'a rawarr -> 'a array;
           val uninitIsNop = uninitIsNop
           val uninitUnsafe = uninitUnsafe
        end
   end

structure Vector =
   struct
      open Vector 
      (* Don't mutate the array after you apply fromArray, because vectors 
       * are supposed to be immutable and the optimizer depends on this.  
       *)
      val fromArrayUnsafe = _prim "Array_toVector": 'a array -> 'a vector;
      val length = _prim "Vector_length": 'a vector -> SeqIndex.int;
      val subUnsafe = _prim "Vector_sub": 'a vector * SeqIndex.int -> 'a;
      val vector0 = _prim "Vector_vector": unit -> 'a vector;
   end

end