Skip to content

Instantly share code, notes, and snippets.

View cy6erGn0m's full-sized avatar
🦎

Sergey Mashkov cy6erGn0m

🦎
View GitHub Profile
@cy6erGn0m
cy6erGn0m / draganddrop.kt
Created December 1, 2015 10:21
Drag and drop example
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 / pairs-sequence.kt
Created November 12, 2015 14:57
Returns a sequence that consists of all possible pair of original list elements, does nothing with potential duplicates
/**
* 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 / file-sync.kt
Last active August 29, 2015 14:26
Naive file sync implementation in Kotlin
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 / kotlin-websocket-example.kt
Last active June 20, 2023 15:28
This example demonstrates how to use WebSocket including reconnect when needed and error handling
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 / merge-maps.kt
Created May 20, 2015 14:41
Merge two maps with custom reduce function for Kotlin
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 / multi-declarations-with-regex.kt
Last active August 29, 2015 14:21
Demostrates Power of Kotlin's multi-declarations
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")
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}")}
}
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)
trait Test {
val test : String
}
class TestImpl (test : String) : Test {
override val test = test
}
@cy6erGn0m
cy6erGn0m / recursion.kt
Created October 14, 2013 19:37
inner function annotation problem example
TailRecursive fun g2() {
TailRecursive fun g3(counter : Int, x : Any) : Unit {
if (counter > 0) { g3(counter - 1, "tail 97") }
}
g3(1000000, "test")
}