refactored Closable.foreach to be Closeeble.use{ ... } for now as an interim solution until some try-with-resources syntax is available as in KT-1475
This commit is contained in:
@@ -67,8 +67,8 @@ private val stdin : BufferedReader = BufferedReader(InputStreamReader(object : I
|
||||
|
||||
inline fun readLine() : String? = stdin.readLine()
|
||||
|
||||
/** Uses the given resource then closes it to ensure its closed again */
|
||||
inline fun <T: Closeable, R> T.foreach(block: (T)-> R) : R {
|
||||
/** Uses the given resource then closes it down correctly whether an exception is thrown or not */
|
||||
inline fun <T: Closeable, R> T.use(block: (T)-> R) : R {
|
||||
var closed = false
|
||||
try {
|
||||
return block(this)
|
||||
@@ -126,7 +126,7 @@ inline fun Reader.buffered(): BufferedReader = if(this is BufferedReader) this e
|
||||
inline fun Reader.buffered(bufferSize: Int) = BufferedReader(this, bufferSize)
|
||||
|
||||
inline fun Reader.foreachLine(block: (String) -> Unit): Unit {
|
||||
this.foreach{
|
||||
this.use{
|
||||
val iter = buffered().lineIterator()
|
||||
while (iter.hasNext) {
|
||||
val elem = iter.next()
|
||||
@@ -135,7 +135,7 @@ inline fun Reader.foreachLine(block: (String) -> Unit): Unit {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T> Reader.useLines(block: (Iterator<String>) -> T): T = this.buffered().foreach<BufferedReader, T>{block(it.lineIterator())}
|
||||
inline fun <T> Reader.useLines(block: (Iterator<String>) -> T): T = this.buffered().use<BufferedReader, T>{block(it.lineIterator())}
|
||||
/**
|
||||
* Returns an iterator over each line.
|
||||
* <b>Note</b> the caller must close the underlying <code>BufferedReader</code>
|
||||
|
||||
@@ -37,7 +37,7 @@ class IoTest() : TestCase() {
|
||||
val list = ArrayList<String>()
|
||||
val reader = sample().buffered()
|
||||
|
||||
reader.foreach{
|
||||
reader.use{
|
||||
while (true) {
|
||||
val line = it.readLine()
|
||||
if (line != null)
|
||||
|
||||
Reference in New Issue
Block a user