summaryrefslogtreecommitdiff
path: root/src/library/scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-08-16 22:05:32 +0000
committerPaul Phillips <paulp@improving.org>2009-08-16 22:05:32 +0000
commitba8648d13ecd02ab6029ca83ded2802fa56dbcbe (patch)
tree1655e53072666881ac022b7c632b242efff96782 /src/library/scala
parentd73053a0c60a1957047aa5ebb46ede2ba64ba11a (diff)
downloadscala-ba8648d13ecd02ab6029ca83ded2802fa56dbcbe.tar.gz
scala-ba8648d13ecd02ab6029ca83ded2802fa56dbcbe.tar.bz2
scala-ba8648d13ecd02ab6029ca83ded2802fa56dbcbe.zip
Restored missing pieces of some of my patches w...
Restored missing pieces of some of my patches which were accidentally reverted in r17680. This one includes StringBuilder cleanups and tail-recursive drop in Iterator.
Diffstat (limited to 'src/library/scala')
-rw-r--r--src/library/scala/collection/Iterator.scala11
-rw-r--r--src/library/scala/collection/generic/IterableTemplate.scala2
-rw-r--r--src/library/scala/collection/mutable/StringBuilder.scala25
3 files changed, 14 insertions, 24 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala
index 9e8cb67a65..427cd77558 100644
--- a/src/library/scala/collection/Iterator.scala
+++ b/src/library/scala/collection/Iterator.scala
@@ -12,6 +12,7 @@
package scala.collection
import mutable.{Buffer, ArrayBuffer, ListBuffer}
+import annotation.tailrec
// import immutable.{List, Nil, ::, Stream}
/** The <code>Iterator</code> object provides various functions for
@@ -298,8 +299,14 @@ trait Iterator[+A] { self =>
* @param n the number of elements to drop
* @return the new iterator
*/
- def drop(n: Int): Iterator[A] =
- if (n > 0 && hasNext) { next(); drop(n - 1) } else this
+ def drop(n: Int): Iterator[A] = {
+ @tailrec
+ def loop(left: Int): Iterator[A] =
+ if (left > 0 && hasNext) { next; loop(left - 1) }
+ else this
+
+ loop(n)
+ }
/** Advances this iterator past the first `from` elements using `drop`,
* and then takes `until - from` elements, using `take`.
diff --git a/src/library/scala/collection/generic/IterableTemplate.scala b/src/library/scala/collection/generic/IterableTemplate.scala
index 3477634821..01cbbcf25b 100644
--- a/src/library/scala/collection/generic/IterableTemplate.scala
+++ b/src/library/scala/collection/generic/IterableTemplate.scala
@@ -151,7 +151,7 @@ trait IterableTemplate[+A, +This <: IterableTemplate[A, This] with Iterable[A]]
*
* @note will not terminate for infinite-sized iterables.
* @param that the other iterable
- * @return true, iff both iterables contain the same elements.
+ * @return true, iff both iterables contain the same elements in the same order.
* @note Might return different results for different runs, unless this iterable is ordered
*/
def sameElements[B >: A](that: Iterable[B]): Boolean = {
diff --git a/src/library/scala/collection/mutable/StringBuilder.scala b/src/library/scala/collection/mutable/StringBuilder.scala
index db0b633b2d..d1aaa1234d 100644
--- a/src/library/scala/collection/mutable/StringBuilder.scala
+++ b/src/library/scala/collection/mutable/StringBuilder.scala
@@ -804,8 +804,8 @@ final class StringBuilder(initCapacity: Int, private val initValue: String)
val temp2 = array(n - j)
if (!hasSurrogate)
hasSurrogate =
- (temp >= StringBuilder.MIN_SURROGATE && temp <= StringBuilder.MAX_SURROGATE) ||
- (temp2 >= StringBuilder.MIN_SURROGATE && temp2 <= StringBuilder.MAX_SURROGATE)
+ (temp >= Character.MIN_HIGH_SURROGATE && temp <= Character.MAX_LOW_SURROGATE) ||
+ (temp2 >= Character.MIN_HIGH_SURROGATE && temp2 <= Character.MAX_LOW_SURROGATE)
array(j) = temp2
array(n - j) = temp
j -= 1
@@ -815,9 +815,9 @@ final class StringBuilder(initCapacity: Int, private val initValue: String)
var i = 0
while (i < count - 1) {
val c2 = array(i)
- if (StringBuilder.isLowSurrogate(c2)) {
+ if (Character.isLowSurrogate(c2)) {
val c1 = array(i + 1)
- if (StringBuilder.isHighSurrogate(c1)) {
+ if (Character.isHighSurrogate(c1)) {
array(i) = c1; i += 1
array(i) = c2
}
@@ -847,23 +847,6 @@ object StringBuilder {
type Array[T] = scala.Array[T] // !!!
- private val MIN_HIGH_SURROGATE = '\uD800'
- private val MAX_HIGH_SURROGATE = '\uDBFF'
-
- private val MIN_LOW_SURROGATE = '\uDC00'
- private val MAX_LOW_SURROGATE = '\uDFFF'
-
- // constants <code>java.langCharacter.MIN-/MAX_SURROGATE</code> exist since 1.5
- private val MIN_SURROGATE = MIN_HIGH_SURROGATE
- private val MAX_SURROGATE = MAX_LOW_SURROGATE
-
- // methods <code>java.langCharacter.isLow-/isHighSurrogate</code> exist since 1.5
- private def isLowSurrogate(ch: Char): Boolean =
- MIN_LOW_SURROGATE <= ch && ch <= MAX_LOW_SURROGATE
-
- private def isHighSurrogate(ch: Char): Boolean =
- MIN_HIGH_SURROGATE <= ch && ch <= MAX_HIGH_SURROGATE
-
// method <code>java.util.Arrays.copyOf</code> exists since 1.6
private def copyOf(src: Array[Char], newLength: Int): Array[Char] = {
val dest = new Array[Char](newLength)