src/Pure/General/bytes.ML
author wenzelm
Mon, 25 Mar 2019 16:45:08 +0100
changeset 69980 f2e3adfd916f
parent 69446 9cf0b79dfb7f
child 75581 29654a8e9374
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69441
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/General/bytes.ML
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     3
69446
9cf0b79dfb7f more Haskell operations;
wenzelm
parents: 69441
diff changeset
     4
Byte-vector messages.
69441
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     5
*)
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     6
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     7
signature BYTES =
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     8
sig
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
     9
  val read_line: BinIO.instream -> string option
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    10
  val read_block: BinIO.instream -> int -> string
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    11
end;
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    12
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    13
structure Bytes: BYTES =
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    14
struct
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    15
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    16
fun read_line stream =
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    17
  let
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    18
    val result = trim_line o String.implode o rev;
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    19
    fun read cs =
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    20
      (case BinIO.input1 stream of
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    21
        NONE => if null cs then NONE else SOME (result cs)
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    22
      | SOME b =>
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    23
          (case Byte.byteToChar b of
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    24
            #"\n" => SOME (result cs)
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    25
          | c => read (c :: cs)));
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    26
  in read [] end;
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    27
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    28
fun read_block stream n =
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    29
  Byte.bytesToString (BinIO.inputN (stream, n));
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    30
0bd51c6aaa8b clarified modules, following bytes.scala;
wenzelm
parents:
diff changeset
    31
end;