summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2007-01-24 17:41:48 +0000
committerBurak Emir <emir@epfl.ch>2007-01-24 17:41:48 +0000
commitea6777a4ea66672003b59b83c431d8d7bf70865f (patch)
tree5d0272aa67cd9258d8caad179f21d6c03bece779 /src
parentf8a6425c9cb5f00cc90e6a2e79db125da31d39bc (diff)
downloadscala-ea6777a4ea66672003b59b83c431d8d7bf70865f.tar.gz
scala-ea6777a4ea66672003b59b83c431d8d7bf70865f.tar.bz2
scala-ea6777a4ea66672003b59b83c431d8d7bf70865f.zip
method Source::getLines
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/io/Source.scala23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/library/scala/io/Source.scala b/src/library/scala/io/Source.scala
index cef8fd25a8..ff72873f86 100644
--- a/src/library/scala/io/Source.scala
+++ b/src/library/scala/io/Source.scala
@@ -244,7 +244,7 @@ abstract class Source extends Iterator[Char] {
* @return the character string of the specified line.
* @throws scala.compat.Platform.IllegalArgumentException
*/
- def getLine(line: Int): String = {
+ def getLine(line: Int): String = { // faster than getLines.drop(line).next
val buf = new StringBuilder()
val it = reset
var i = 0
@@ -264,9 +264,28 @@ abstract class Source extends Iterator[Char] {
ch = it.next
}
val res = buf.toString()
- buf.setLength(0)
+ buf.setLength(0) // hopefully help collector to deallocate StringBuilder
res
}
+
+ /** returns an iterator who returns lines (including newline character).
+ * a line ends in \n.
+ */
+ def getLines: Iterator[String] = new Iterator[String] {
+ val buf = new StringBuilder
+ def next = {
+ var ch = iter.next
+ while(ch != '\n' && iter.hasNext) {
+ buf.append(ch)
+ ch = iter.next
+ }
+ buf.append(ch)
+ val res = buf.toString()
+ buf.setLength(0) // clean things up for next call of "next"
+ res
+ }
+ def hasNext = iter.hasNext
+ }
/** Returns <code>true</code> if this source has more characters.
*/
def hasNext = iter.hasNext