Skip to content

Instantly share code, notes, and snippets.

View kakajika's full-sized avatar
🏠
STAY HOME

Keita Kajiwara kakajika

🏠
STAY HOME
View GitHub Profile
@kakajika
kakajika / lazyFast.kt
Created September 20, 2018 12:14
Non-atomic access extension for lazy.
fun <T> lazyFast(operation: () -> T): Lazy<T> = lazy(LazyThreadSafetyMode.NONE) {
operation()
}
@kakajika
kakajika / ListDataSource.kt
Created June 14, 2018 08:06
Android Architecture Components DataSource implementation to supply simple List.
class ListDataSource<T>(private val items: List<T>) : PositionalDataSource<T>() {
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<T>) {
callback.onResult(items, 0, items.size)
}
override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback<T>) {
val start = params.startPosition
val end = params.startPosition + params.loadSize
callback.onResult(items.subList(start, end))
}
}
@kakajika
kakajika / DeployGateTree.kt
Last active April 12, 2018 08:34
Timber Tree implementation for logging with DeployGate.
class DeployGateTree : Timber.Tree() {
override fun log(priority: Int, taf: String?, message: String, t: Throwable?) {
when (priority) {
Log.VERBOSE -> DeployGate.logVerbose(message)
Log.INFO -> DeployGate.logInfo(message)
Log.DEBUG -> DeployGate.logDebug(message)
Log.WARN -> DeployGate.logWarn(message)
Log.ERROR -> DeployGate.logError(message)
}
@kakajika
kakajika / Array+windowed.swift
Last active March 27, 2018 10:01
Ported from Kotlin-stdlib
import Foundation
extension Array {
func windowed(size: Int, step: Int = 1, partialWindows: Bool = false) -> [[Element]] {
let count = self.count
var index = 0
var result: [[Element]] = []
while (index < count) {
let windowSize = Swift.min(size, count - index)
@kakajika
kakajika / ObservableType+isEmpty.swift
Last active February 27, 2018 05:23
RxSwift.ObservableType::isEmpty()
extension ObservableType {
func isEmpty() -> Single<Bool> {
return self
.take(1)
.map { _ in false }
.ifEmpty(switchTo: Observable.just(true))
.asSingle()
}
@kakajika
kakajika / Sequence+associate.swift
Last active January 31, 2018 11:07
A port of Kotlin-stdlib's associate method to Swift 4.
extension Sequence {
func associate<K, V>(_ transform: (Element) -> (K, V)) -> [K: V] {
return self.reduce(into: [:]) { (dict, element) in
let (key, value) = transform(element)
dict[key] = value
}
}
func associateBy<K>(_ keySelector: (Element) -> K) -> [K: Element] {
extension Sequence {
func sumBy(selector: (Element) -> Int) -> Int {
return self.reduce(into: 0) { (sum, element) in
sum += selector(element)
}
}
}
@kakajika
kakajika / zipWith.swift
Created January 12, 2018 06:15
Simple zipWith method for Sequence in Swift.
extension Sequence {
func zipWith<S2: Sequence>(_ seq2: S2) -> Zip2Sequence<Self, S2> {
return zip(self, seq2)
}
}
extension Unicode.Scalar {
var width: UInt32 {
let code = self.value
if (code >= 0 && code <= 128) {
return 1
} else {
return 2
}
}
}
@kakajika
kakajika / rx-flux.tsx
Last active November 2, 2017 23:42
Simple type-safe flux implementation with RxJS & TypeScript. Inspired by flumpt
import * as React from "react"
import * as Rx from "rxjs"
export class Action<T> {
constructor(public key: string) {}
}
interface FluxContext {
dispatch: <T extends any>(action: Action<T>, value: T) => void
}