Import Upstream version 20180207
[hcoop/debian/mlton.git] / basis-library / arrays-and-vectors / slice0.sig
1 (* Copyright (C) 2017 Matthew Fluet.
2 * Copyright (C) 2014 Rob Simmons.
3 * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
4 * Jagannathan, and Stephen Weeks.
5 * Copyright (C) 1997-2000 NEC Research Institute.
6 *
7 * MLton is released under a BSD-style license.
8 * See the file MLton-LICENSE for details.
9 *)
10
11 signature PRIM_SLICE =
12 sig
13 type 'a sequence
14 type 'a elt
15 type 'a slice
16 val length: 'a slice -> SeqIndex.int
17 val sub: 'a slice * SeqIndex.int -> 'a elt
18 val unsafeSub: 'a slice * SeqIndex.int -> 'a elt
19 val update: 'a slice * SeqIndex.int * 'a elt -> unit
20 val unsafeUpdate: 'a slice * SeqIndex.int * 'a elt -> unit
21 val uninitIsNop: 'a slice -> bool
22 val uninit: 'a slice * SeqIndex.int -> unit
23 val unsafeUninit: 'a slice * SeqIndex.int -> unit
24 val copy: {dst: 'a elt array, di: SeqIndex.int, src: 'a slice} -> unit
25 val unsafeCopy: {dst: 'a elt array, di: SeqIndex.int, src: 'a slice} -> unit
26 val full: 'a sequence -> 'a slice
27 val slice: 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice
28 val unsafeSlice: 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice
29 val subslice: 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice
30 val unsafeSubslice: 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice
31 val base: 'a slice -> 'a sequence * SeqIndex.int * SeqIndex.int
32 val isEmpty: 'a slice -> bool
33 val getItem: 'a slice -> ('a elt * 'a slice) option
34 val appi: (SeqIndex.int * 'a elt -> unit) -> 'a slice -> unit
35 val app: ('a elt -> unit) -> 'a slice -> unit
36 val mapi: (SeqIndex.int * 'a elt -> 'b elt) -> 'a slice -> 'b sequence
37 val map: ('a elt -> 'b elt) -> 'a slice -> 'b sequence
38 val foldli: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
39 val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
40 val foldri: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
41 val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
42 val findi: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> (SeqIndex.int * 'a elt) option
43 val find: ('a elt -> bool) -> 'a slice -> 'a elt option
44 val existsi: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool
45 val exists: ('a elt -> bool) -> 'a slice -> bool
46 val alli: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool
47 val all: ('a elt -> bool) -> 'a slice -> bool
48 val collate: ('a elt * 'a elt -> order) -> 'a slice * 'a slice -> order
49
50 val splitl: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice
51 val splitr: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice
52 val splitAt: 'a slice * SeqIndex.int -> 'a slice * 'a slice
53 val dropl: ('a elt -> bool) -> 'a slice -> 'a slice
54 val dropr: ('a elt -> bool) -> 'a slice -> 'a slice
55 val takel: ('a elt -> bool) -> 'a slice -> 'a slice
56 val taker: ('a elt -> bool) -> 'a slice -> 'a slice
57 val position: ('a elt * 'a elt -> bool) ->
58 'a sequence -> 'a slice -> 'a slice * 'a slice
59 val append: 'a slice * 'a slice -> 'a sequence
60 val sequence: 'a slice -> 'a sequence
61
62 (* span:
63 * ('a sequence * 'a sequence -> bool) should be polymorphic equality
64 *)
65 val span: ('a sequence * 'a sequence -> bool) -> 'a slice * 'a slice -> 'a slice
66 end