src/Pure/General/buffer.ML
author paulson
Fri, 05 Oct 2007 09:59:03 +0200
changeset 24854 0ebcd575d3c6
parent 23785 ea7c2ee8a47a
child 26502 7f64d8cf6707
permissions -rw-r--r--
filtering out some package theorems
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/General/buffer.ML
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     4
18132
0e9c9a18f454 tuned comments;
wenzelm
parents: 17062
diff changeset
     5
Efficient string buffers.
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     6
*)
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     7
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     8
signature BUFFER =
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
     9
sig
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    10
  type T
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    11
  val empty: T
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    12
  val add: string -> T -> T
23785
ea7c2ee8a47a added markup operation;
wenzelm
parents: 23226
diff changeset
    13
  val markup: Markup.T -> (T -> T) -> T -> T
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    14
  val content: T -> string
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    15
  val write: Path.T -> T -> unit
21630
d1ca26a2b918 Add output function
aspinall
parents: 18132
diff changeset
    16
  val output: (string -> unit) -> T -> unit
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    17
end;
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    18
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    19
structure Buffer: BUFFER =
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    20
struct
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    21
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    22
datatype T = Buffer of string list;
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    23
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    24
val empty = Buffer [];
17062
7272b45099c7 tuned Buffer.add;
wenzelm
parents: 16712
diff changeset
    25
7272b45099c7 tuned Buffer.add;
wenzelm
parents: 16712
diff changeset
    26
fun add "" buf = buf
7272b45099c7 tuned Buffer.add;
wenzelm
parents: 16712
diff changeset
    27
  | add x (Buffer xs) = Buffer (x :: xs);
7272b45099c7 tuned Buffer.add;
wenzelm
parents: 16712
diff changeset
    28
23785
ea7c2ee8a47a added markup operation;
wenzelm
parents: 23226
diff changeset
    29
fun markup m body =
ea7c2ee8a47a added markup operation;
wenzelm
parents: 23226
diff changeset
    30
  let val (bg, en) = Markup.output m
ea7c2ee8a47a added markup operation;
wenzelm
parents: 23226
diff changeset
    31
  in add bg #> body #> add en end;
ea7c2ee8a47a added markup operation;
wenzelm
parents: 23226
diff changeset
    32
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    33
fun content (Buffer xs) = implode (rev xs);
17062
7272b45099c7 tuned Buffer.add;
wenzelm
parents: 16712
diff changeset
    34
16712
c7d1c79d921c tuned write: use File.write_list;
wenzelm
parents: 14981
diff changeset
    35
fun write path (Buffer xs) = File.write_list path (rev xs);
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    36
23226
441f8a0bd766 removed obsolete Library.seq;
wenzelm
parents: 21630
diff changeset
    37
fun output f (Buffer xs) = List.app f (rev xs);
21630
d1ca26a2b918 Add output function
aspinall
parents: 18132
diff changeset
    38
6316
4a786a8a1a97 simple string buffers;
wenzelm
parents:
diff changeset
    39
end;