File: byte.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 (31 lines) | stat: -rw-r--r-- 1,074 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
(* Copyright (C) 1999-2006 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.
 *)

structure Byte: BYTE =
   struct
      val byteToChar = Primitive.Char8.idFromWord8

      val bytesToString = Primitive.String8.idFromWord8Vector o Word8Vector.toPoly

      val charToByte = Primitive.Char8.idToWord8

      fun packString (a: Word8Array.array, i: int, s: substring): unit =
         Natural.foreach
         (Substring.size s, fn j =>
          Word8Array.update (a, i + j, charToByte (Substring.sub (s, j))))

      val stringToBytes = Word8Vector.fromPoly o Primitive.String8.idToWord8Vector

      local
         fun make (length, sub) s =
            String.tabulate (length s, fn i => byteToChar (sub (s, i)))
      in
         val unpackString = make (Word8ArraySlice.length, Word8ArraySlice.sub)
         val unpackStringVec = make (Word8VectorSlice.length, Word8VectorSlice.sub)
      end
   end