Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / basis-library / arrays-and-vectors / slice.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 SLICE =
12 sig
13 type 'a sequence
14 type 'a elt
15 type 'a slice
16 val length: 'a slice -> int
17 val sub: 'a slice * int -> 'a elt
18 val unsafeSub: 'a slice * int -> 'a elt
19 val update: 'a slice * int * 'a elt -> unit
20 val unsafeUpdate: 'a slice * int * 'a elt -> unit
21 val uninitIsNop: 'a slice -> bool
22 val uninit: 'a slice * int -> unit
23 val unsafeUninit: 'a slice * int -> unit
24 val copy: {dst: 'a elt Array.array, di: int, src: 'a slice} -> unit
25 val unsafeCopy: {dst: 'a elt Array.array, di: int, src: 'a slice} -> unit
26 val full: 'a sequence -> 'a slice
27 val slice: 'a sequence * int * int option -> 'a slice
28 val unsafeSlice: 'a sequence * int * int option -> 'a slice
29 val subslice: 'a slice * int * int option -> 'a slice
30 val unsafeSubslice: 'a slice * int * int option -> 'a slice
31 val base: 'a slice -> 'a sequence * int * int
32 val isEmpty: 'a slice -> bool
33 val getItem: 'a slice -> ('a elt * 'a slice) option
34 val appi: (int * 'a elt -> unit) -> 'a slice -> unit
35 val app: ('a elt -> unit) -> 'a slice -> unit
36 val mapi: (int * 'a elt -> 'b elt) -> 'a slice -> 'b sequence
37 val map: ('a elt -> 'b elt) -> 'a slice -> 'b sequence
38 val foldli: (int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
39 val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
40 val foldri: (int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
41 val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b
42 val findi: (int * 'a elt -> bool) -> 'a slice -> (int * 'a elt) option
43 val find: ('a elt -> bool) -> 'a slice -> 'a elt option
44 val existsi: (int * 'a elt -> bool) -> 'a slice -> bool
45 val exists: ('a elt -> bool) -> 'a slice -> bool
46 val alli: (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 * 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 val toList: 'a slice -> 'a elt list
62
63 (* Used to implement Substring/String functions *)
64 val concat: 'a slice list -> 'a sequence
65 val concatWith: 'a sequence -> 'a slice list -> 'a sequence
66 val triml: int -> 'a slice -> 'a slice
67 val trimr: int -> 'a slice -> 'a slice
68 val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool
69 val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool
70 val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool
71 val translate: ('a elt -> 'b sequence) -> 'a slice -> 'b sequence
72 val tokens: ('a elt -> bool) -> 'a slice -> 'a slice list
73 val fields: ('a elt -> bool) -> 'a slice -> 'a slice list
74 end