[history] Contracts for decorator functions
This commit is contained in:
parent
28b3224e42
commit
5a49c43a4f
@ -1,5 +1,7 @@
|
|||||||
package ru.landrafhomyak.utility.reference_counter
|
package ru.landrafhomyak.utility.reference_counter
|
||||||
|
|
||||||
|
import kotlin.contracts.InvocationKind
|
||||||
|
import kotlin.contracts.contract
|
||||||
import kotlinx.atomicfu.AtomicLong
|
import kotlinx.atomicfu.AtomicLong
|
||||||
import kotlinx.atomicfu.atomic
|
import kotlinx.atomicfu.atomic
|
||||||
import kotlinx.atomicfu.update
|
import kotlinx.atomicfu.update
|
||||||
@ -21,6 +23,9 @@ internal class CloseableReferenceCounter(private val _errMessage: String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline fun <R> tryIncref(block: () -> R): R {
|
inline fun <R> tryIncref(block: () -> R): R {
|
||||||
|
contract {
|
||||||
|
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
this.incref()
|
this.incref()
|
||||||
return safeAutoClose2(onError = this::decref, action = block)
|
return safeAutoClose2(onError = this::decref, action = block)
|
||||||
}
|
}
|
||||||
@ -34,6 +39,9 @@ internal class CloseableReferenceCounter(private val _errMessage: String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline fun <R> tryDecref(block: () -> R): R {
|
inline fun <R> tryDecref(block: () -> R): R {
|
||||||
|
contract {
|
||||||
|
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
this.checkNotClosed()
|
this.checkNotClosed()
|
||||||
return safeAutoClose2(onSuccess = this::decref, action = block)
|
return safeAutoClose2(onSuccess = this::decref, action = block)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user