package com.smallhacker.disbrowser.datatype import com.smallhacker.disbrowser.util.asReverseSequence interface RangeMap, R : ClosedRange, V : Any> { operator fun get(key: K): V? } interface MutableRangeMap, R : ClosedRange, V: Any> : RangeMap { operator fun set(keyRange: R, value: V): RangeMap } class NaiveRangeMap, R : ClosedRange, V: Any> : MutableRangeMap { private val entries = ArrayList>() override fun get(key: K) = entries .asReverseSequence() .filter { it.first.contains(key) } .map { it.second } .firstOrNull() override fun set(keyRange: R, value: V): RangeMap { entries += keyRange to value return this } }