Skip to content

Instantly share code, notes, and snippets.

Avatar
🦎

Sergey Mashkov cy6erGn0m

🦎
View GitHub Profile
View traitOverrideProperty.kt
trait Test {
val test : String
}
class TestImpl (test : String) : Test {
override val test = test
}
View test.kt
import java.util.LinkedList
import java.util.Deque
import java.util.ArrayList
data class TreeNode<T>(val value : T, val children : List<TreeNode<T>> = listOf())
public fun <T, Acc> treeFoldBFS(root : TreeNode<T>, initialValue : Acc, foldFunction : (Acc, T) -> Acc) : Acc =
treeFoldImpl(root, LinkedList(), {q -> q.removeLast()}, initialValue, foldFunction)
View listeners.kt
val listener = eventBus {
on (javaClass<Started>()) signal { c -> println("job ${c.job} started")}
on (javaClass<Failed>()) signal { f -> println("job failed: ${f.t.getMessage()}")}
on (javaClass<Completed<Int>>()) signal { c -> println("job ${c.job} completed, result is ${c.result}")}
}
@cy6erGn0m
cy6erGn0m / multi-declarations-with-regex.kt
Last active Aug 29, 2015
Demostrates Power of Kotlin's multi-declarations
View multi-declarations-with-regex.kt
import java.util.*
import java.util.regex.Pattern
fun main(args: Array<String>) {
x("http://localhost:9090")
x("http://localhost")
x("http://localhost/path/to/it")
x("http://localhost:9091/path/to/it")
x("http://localhost:9091/?p=1")
@cy6erGn0m
cy6erGn0m / merge-maps.kt
Created May 20, 2015
Merge two maps with custom reduce function for Kotlin
View merge-maps.kt
private fun <K, V> Map<K, V>.mergeReduce(other: Map<K, V>, reduce: (V, V) -> V = { a, b -> b }): Map<K, V> {
val result = LinkedHashMap<K, V>(this.size() + other.size())
result.putAll(this)
other.forEach { e ->
val existing = result[e.key]
if (existing == null) {
result[e.key] = e.value
}
else {
@cy6erGn0m
cy6erGn0m / kotlin-websocket-example.kt
Last active Apr 25, 2018
This example demonstrates how to use WebSocket including reconnect when needed and error handling
View kotlin-websocket-example.kt
import org.w3c.dom.MessageEvent
import org.w3c.dom.WebSocket
import kotlin.browser.window
class KWebSocketImpl(val url : String, val reconnectDelayMillis: Int, val listener : (dynamic) -> Unit) {
private var currentSocket : WebSocket? = null
private val queue = arrayListOf<String>()
private var closed = false
init {
@cy6erGn0m
cy6erGn0m / file-sync.kt
Last active Aug 29, 2015
Naive file sync implementation in Kotlin
View file-sync.kt
fun sync(from: File, to: File, detectChange: (File, File) -> Boolean, filePredicate : (File) -> Boolean = {true}) {
require(from.isDirectory)
require(to.isDirectory)
from.walkTopDown()
.filter { it.isDirectory || filePredicate(it) }
.asSequence()
.forEach { file ->
val relative = file.relativeTo(from)
val destFile = File(to, relative)
@cy6erGn0m
cy6erGn0m / pairs-sequence.kt
Created Nov 12, 2015
Returns a sequence that consists of all possible pair of original list elements, does nothing with potential duplicates
View pairs-sequence.kt
/**
* Returns a sequence that consists of all possible pair of original list elements, does nothing with potential duplicates
* @param skipSamePairs indicates whether it should produce pairs from the same element at both first and second positions
*/
fun <T> List<T>.allPairs(skipSamePairs: Boolean = true): Sequence<Pair<T, T>> = PairsSequence(this, skipSamePairs)
private class PairsSequence<T>(val source: List<T>, val skipSamePairs: Boolean) : Sequence<Pair<T, T>> {
override fun iterator(): Iterator<Pair<T, T>> = PairsIterator(source, skipSamePairs)
}
@cy6erGn0m
cy6erGn0m / draganddrop.kt
Created Dec 1, 2015
Drag and drop example
View draganddrop.kt
package dnd
import java.awt.*
import java.awt.dnd.*
import javax.swing.*
fun main(args: Array<String>) {
SwingUtilities.invokeAndWait {
val f = JFrame("test")
f.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
@cy6erGn0m
cy6erGn0m / build.gradle
Last active Dec 23, 2015
Configuring testing library in kotlin
View build.gradle
dependencies {
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"
}