This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.util.Optional | |
| // Actual implementation | |
| fun <T> deferringScope(block: DeferringScope<T>.() -> T): Optional<T> { | |
| val scope = DeferringScope<T>() | |
| try { | |
| scope.result = Optional.of(scope.block()) | |
| } catch (e: Throwable) { | |
| scope.error = e.message ?: e.toString() | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import android.graphics.Rect; | |
| import android.support.v7.widget.RecyclerView; | |
| import android.view.View; | |
| public class GridSpacingDecoration extends RecyclerView.ItemDecoration { | |
| private int cols; | |
| private int spacing; | |
| public GridSpacingDecoration(int cols, int spacing) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Repeater(val interval: Long, | |
| val context: CoroutineContext = UI, | |
| val block: () -> Unit | |
| ) { | |
| private var updatingJob: Job? = null | |
| private val updatingJobLock = Any() | |
| fun start() = synchronized(updatingJobLock) { | |
| if (updatingJob != null && updatingJob!!.isActive) { | |
| return |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import kotlin.properties.ReadWriteProperty | |
| import kotlin.reflect.KProperty | |
| /** | |
| * Property delegate to allow lazy initialization of a mutable variable. | |
| */ | |
| class MutableLazy<T>(val init: () -> T) : ReadWriteProperty<Any?, T> { | |
| private var value: Optional<T> = Optional.None() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class Event<T> { | |
| private val handlers = arrayListOf<(T) -> Unit>() | |
| operator fun plusAssign(handler: (T) -> Unit) { handlers.add(handler) } | |
| operator fun invoke(value: T) { for (handler in handlers) handler(value) } | |
| } | |
| val e = Event<String>() // define event | |
| fun main(args : Array<String>) { | |
| e += { println(it) } // subscribe |
NewerOlder