author | wenzelm |
Sun, 20 Dec 2009 15:44:07 +0100 | |
changeset 34150 | 297b2149077d |
parent 34145 | 3dcb46ae6185 |
child 34191 | b6960fc09ef3 |
permissions | -rw-r--r-- |
wenzelm@34145 | 1 |
/* Title: Pure/library.scala |
wenzelm@34145 | 2 |
Author: Makarius |
wenzelm@34145 | 3 |
|
wenzelm@34145 | 4 |
Basic library. |
wenzelm@34145 | 5 |
*/ |
wenzelm@34145 | 6 |
|
wenzelm@34145 | 7 |
package isabelle |
wenzelm@34145 | 8 |
|
wenzelm@34145 | 9 |
import java.lang.System |
wenzelm@34145 | 10 |
|
wenzelm@34145 | 11 |
|
wenzelm@34145 | 12 |
object Library |
wenzelm@34145 | 13 |
{ |
wenzelm@34150 | 14 |
/* reverse CharSequence */ |
wenzelm@34150 | 15 |
|
wenzelm@34150 | 16 |
class Reverse(text: CharSequence, start: Int, end: Int) extends CharSequence |
wenzelm@34150 | 17 |
{ |
wenzelm@34150 | 18 |
require(0 <= start && start <= end && end <= text.length) |
wenzelm@34150 | 19 |
|
wenzelm@34150 | 20 |
def this(text: CharSequence) = this(text, 0, text.length) |
wenzelm@34150 | 21 |
|
wenzelm@34150 | 22 |
def length: Int = end - start |
wenzelm@34150 | 23 |
def charAt(i: Int): Char = text.charAt(end - i - 1) |
wenzelm@34150 | 24 |
|
wenzelm@34150 | 25 |
def subSequence(i: Int, j: Int): CharSequence = |
wenzelm@34150 | 26 |
if (0 <= i && i <= j && j <= length) new Reverse(text, end - j, end - i) |
wenzelm@34150 | 27 |
else throw new IndexOutOfBoundsException |
wenzelm@34150 | 28 |
|
wenzelm@34150 | 29 |
override def toString: String = |
wenzelm@34150 | 30 |
{ |
wenzelm@34150 | 31 |
val buf = new StringBuilder(length) |
wenzelm@34150 | 32 |
for (i <- 0 until length) |
wenzelm@34150 | 33 |
buf.append(charAt(i)) |
wenzelm@34150 | 34 |
buf.toString |
wenzelm@34150 | 35 |
} |
wenzelm@34150 | 36 |
} |
wenzelm@34150 | 37 |
|
wenzelm@34150 | 38 |
|
wenzelm@34145 | 39 |
/* timing */ |
wenzelm@34145 | 40 |
|
wenzelm@34145 | 41 |
def timeit[A](e: => A) = |
wenzelm@34145 | 42 |
{ |
wenzelm@34145 | 43 |
val start = System.currentTimeMillis() |
wenzelm@34145 | 44 |
val result = Exn.capture(e) |
wenzelm@34145 | 45 |
val stop = System.currentTimeMillis() |
wenzelm@34145 | 46 |
System.err.println((stop - start) + "ms elapsed time") |
wenzelm@34145 | 47 |
Exn.release(result) |
wenzelm@34145 | 48 |
} |
wenzelm@34145 | 49 |
} |