summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2006-11-15 09:53:30 +0000
committermihaylov <mihaylov@epfl.ch>2006-11-15 09:53:30 +0000
commit41b2863d8dd4159058563a32ec4e9295623c9b8e (patch)
treea1e0dace906fd675ea981fd7843add3e1fc7e0f7
parent4a530112eb94e9883d99b2263f37a7db37222062 (diff)
downloadscala-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.scala18
-rw-r--r--src/library/scala/runtime/RichString.scala26
-rw-r--r--src/library/scala/xml/ProcInstr.scala2
-rw-r--r--src/library/scala/xml/Utility.scala3
-rw-r--r--src/library/scala/xml/parsing/TokenTests.scala6
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);