diff options
author | mihaylov <mihaylov@epfl.ch> | 2006-11-15 09:53:30 +0000 |
---|---|---|
committer | mihaylov <mihaylov@epfl.ch> | 2006-11-15 09:53:30 +0000 |
commit | 41b2863d8dd4159058563a32ec4e9295623c9b8e (patch) | |
tree | a1e0dace906fd675ea981fd7843add3e1fc7e0f7 | |
parent | 4a530112eb94e9883d99b2263f37a7db37222062 (diff) | |
download | scala-41b2863d8dd4159058563a32ec4e9295623c9b8e.tar.gz scala-41b2863d8dd4159058563a32ec4e9295623c9b8e.tar.bz2 scala-41b2863d8dd4159058563a32ec4e9295623c9b8e.zip |
Implemented RichString as Seq[Char] and Ordered...
Implemented RichString as Seq[Char] and Ordered[String] and removed the
superfluous implicit conversions from Predef
-rw-r--r-- | src/library/scala/Predef.scala | 18 | ||||
-rw-r--r-- | src/library/scala/runtime/RichString.scala | 26 | ||||
-rw-r--r-- | src/library/scala/xml/ProcInstr.scala | 2 | ||||
-rw-r--r-- | src/library/scala/xml/Utility.scala | 3 | ||||
-rw-r--r-- | src/library/scala/xml/parsing/TokenTests.scala | 6 |
5 files changed, 24 insertions, 31 deletions
diff --git a/src/library/scala/Predef.scala b/src/library/scala/Predef.scala index c20c968277..b0f4874709 100644 --- a/src/library/scala/Predef.scala +++ b/src/library/scala/Predef.scala @@ -126,6 +126,8 @@ object Predef { implicit def exceptionWrapper(exc: Throwable) = new runtime.RichException(exc) + implicit def any2stringadd(x: String) = new runtime.StringAdd(x) + implicit def int2ordered(x: int): Ordered[int] = new Ordered[int] with Proxy { def self: Any = x @@ -265,22 +267,6 @@ object Predef { } } - implicit def string2ordered(x: String): Ordered[String] = new Ordered[String] with Proxy { - def self: Any = x - def compare (y: String): int = x compareTo y - } - - implicit def any2stringadd(x: String) = new runtime.StringAdd(x) - - implicit def string2seq(str: String): Seq[Char] = new Seq[Char] { - def length = str.length() - def elements = Iterator.fromString(str) - def apply(n: Int) = str.charAt(n) - override def hashCode(): Int = str.hashCode() - override def equals(y: Any): Boolean = (str == y) - override protected def stringPrefix: String = "String" - } - implicit def byte2short(x: byte): short = x.toShort implicit def byte2int(x: byte): int = x.toInt implicit def byte2long(x: byte): long = x.toLong diff --git a/src/library/scala/runtime/RichString.scala b/src/library/scala/runtime/RichString.scala index 9e8142ab9c..c73d0fbdee 100644 --- a/src/library/scala/runtime/RichString.scala +++ b/src/library/scala/runtime/RichString.scala @@ -14,7 +14,24 @@ package scala.runtime import Predef._ import compat.Math -final class RichString(s: String) { +final class RichString(s: String) extends AnyRef with Seq[Char] with Ordered[String] with Proxy { + + // Proxy + def self: Any = s + + // Ordered[String] + def compare(other: String) = s compareTo other + + // Seq[Char] + def length = s.length() + def elements = Iterator.fromString(s) + + /** Retrieve the n-th character of the string + * + * @param index into the string + * @return the character at position <code>index</code>. + */ + def apply(n: Int) = s charAt n private final val LF: Char = 0x0A private final val FF: Char = 0x0C @@ -23,13 +40,6 @@ final class RichString(s: String) { private def isLineBreak(c: Char) = c == LF || c == FF - /** Treat string as a function that maps indices to characters. - * - * @param index ... - * @return the character at position <code>index</code>. - */ - def apply(index: Int): Char = s charAt index - /** <p> * Strip trailing line end character from this string if it has one. * A line end character is one of diff --git a/src/library/scala/xml/ProcInstr.scala b/src/library/scala/xml/ProcInstr.scala index 1b3f78e01f..3ff1f9b82c 100644 --- a/src/library/scala/xml/ProcInstr.scala +++ b/src/library/scala/xml/ProcInstr.scala @@ -30,7 +30,7 @@ case class ProcInstr(target:String, proctext:String) extends SpecialNode { final override def typeTag$:Int = -2; - val z:Seq[Char] = Predef.string2seq(target); z match { + (target: Seq[Char]) match { case Seq('X'|'x','M'|'m','L'|'l') => throw new IllegalArgumentException(target+" is reserved"); case _ => diff --git a/src/library/scala/xml/Utility.scala b/src/library/scala/xml/Utility.scala index 2788fd9529..9d05e71f24 100644 --- a/src/library/scala/xml/Utility.scala +++ b/src/library/scala/xml/Utility.scala @@ -295,8 +295,7 @@ object Utility extends AnyRef with parsing.TokenTests { */ def appendEscapedQuoted(s: String, sb: StringBuilder) = { sb.append('"') - val z:Seq[Char] = Predef.string2seq(s) - for (val c <- z) c match { + for (val c <- s) c match { case '"' => sb.append('\\'); sb.append('"') case _ => sb.append(c) } diff --git a/src/library/scala/xml/parsing/TokenTests.scala b/src/library/scala/xml/parsing/TokenTests.scala index f5c2dc1be7..d56b9bb7d7 100644 --- a/src/library/scala/xml/parsing/TokenTests.scala +++ b/src/library/scala/xml/parsing/TokenTests.scala @@ -72,8 +72,7 @@ trait TokenTests { */ def isName(s: String): Boolean = { if( s.length() > 0 ) { - val z:Seq[Char] = Predef.string2seq(s); - val y = z.elements; + val y = s.elements; if (isNameStart(y.next)) { while (y.hasNext && isNameChar(y.next)) {}; !y.hasNext @@ -132,8 +131,7 @@ trait TokenTests { def checkPubID(s: String): Boolean = { //Console.println("checkPubID of \""+s+"\""); if (s.length() > 0) { - val z: Seq[Char] = Predef.string2seq(s); - val y = z.elements; + val y = s.elements; var c = ' '; while (y.hasNext && isPubIDChar(c)) { //Console.println(c); |