diff options
author | Paul Phillips <paulp@improving.org> | 2009-08-16 22:05:32 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-08-16 22:05:32 +0000 |
commit | ba8648d13ecd02ab6029ca83ded2802fa56dbcbe (patch) | |
tree | 1655e53072666881ac022b7c632b242efff96782 /src | |
parent | d73053a0c60a1957047aa5ebb46ede2ba64ba11a (diff) | |
download | scala-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')
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 11 | ||||
-rw-r--r-- | src/library/scala/collection/generic/IterableTemplate.scala | 2 | ||||
-rw-r--r-- | src/library/scala/collection/mutable/StringBuilder.scala | 25 |
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) |