File: qsort.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 (36 lines) | stat: -rw-r--r-- 869 bytes parent folder | download | duplicates (2)
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
(**
 * qsort.sml - sample program using FFI
 *
 * @copyright (C) 2021 SML# Development Team.
 * @author UENO Katsuhiro
 * @version $Id: qsort.sml,v 1.9 2007/09/20 09:02:53 matsu Exp $
 *)

fun 'a#unboxed qsort (array, compare) =
    let
      val qsort_c =
          _import "qsort"
          : ('a array, int, 'a size, ('a ptr, 'a ptr) -> int) -> ()
    in
      qsort_c (array, Array.length array, _sizeof('a), compare)
    end

val a = Array.fromList [4, 75, 14, 2147483647, 3, 6, 423, 42, ~2147483648, 8, 2]
val b = Array.fromList [2.3, 1.1, 0.2, 10.5, ~12.0]

val _ = Dynamic.pp a
val _ = Dynamic.pp b

fun compare (p1, p2) =
    let
      val n1 = Pointer.load p1
      val n2 = Pointer.load p2
    in
      if n1 > n2 then 1 else if n1 < n2 then ~1 else 0
    end

val _ = qsort (a, compare)
val _ = qsort (b, compare)

val _ = Dynamic.pp a
val _ = Dynamic.pp b