inline class InlineIterator(private val it: Iterator) : Iterator { override fun hasNext(): Boolean = it.hasNext() override fun next(): T = it.next() } inline class InlineMutableIterator(private val it: MutableIterator) : MutableIterator { override fun hasNext(): Boolean = it.hasNext() override fun next(): T = it.next() override fun remove() { it.remove() } } inline class InlineIterable(private val it: Iterable) : Iterable { override fun iterator(): Iterator = it.iterator() } inline class InlineMutableIterable(private val it: MutableIterable) : MutableIterable { override fun iterator(): MutableIterator = it.iterator() } inline class InlineCollection(private val c: Collection) : Collection { override val size: Int get() = c.size override fun contains(element: T): Boolean = c.contains(element) override fun containsAll(elements: Collection): Boolean = c.containsAll(elements) override fun isEmpty(): Boolean = c.isEmpty() override fun iterator(): Iterator = c.iterator() } inline class InlineMutableCollection(private val mc: MutableCollection) : MutableCollection { override val size: Int get() = mc.size override fun contains(element: T): Boolean = mc.contains(element) override fun containsAll(elements: Collection): Boolean = mc.containsAll(elements) override fun isEmpty(): Boolean = mc.isEmpty() override fun add(element: T): Boolean = mc.add(element) override fun addAll(elements: Collection): Boolean = mc.addAll(elements) override fun clear() { mc.clear() } override fun iterator(): MutableIterator = mc.iterator() override fun remove(element: T): Boolean = mc.remove(element) override fun removeAll(elements: Collection): Boolean = mc.removeAll(elements) override fun retainAll(elements: Collection): Boolean = mc.retainAll(elements) } inline class InlineList(private val list: List) : List { override val size: Int get() = list.size override fun contains(element: T): Boolean = list.contains(element) override fun containsAll(elements: Collection): Boolean = list.containsAll(elements) override fun get(index: Int): T = list[index] override fun indexOf(element: T): Int = list.indexOf(element) override fun isEmpty(): Boolean = list.isEmpty() override fun iterator(): Iterator = list.iterator() override fun lastIndexOf(element: T): Int = list.lastIndexOf(element) override fun listIterator(): ListIterator = list.listIterator() override fun listIterator(index: Int): ListIterator = list.listIterator(index) override fun subList(fromIndex: Int, toIndex: Int): List = list.subList(fromIndex, toIndex) } inline class InlineMutableList(private val mlist: MutableList) : MutableList { override val size: Int get() = mlist.size override fun contains(element: T): Boolean = mlist.contains(element) override fun containsAll(elements: Collection): Boolean = mlist.containsAll(elements) override fun get(index: Int): T = mlist[index] override fun indexOf(element: T): Int = mlist.indexOf(element) override fun isEmpty(): Boolean = mlist.isEmpty() override fun iterator(): MutableIterator = mlist.iterator() override fun lastIndexOf(element: T): Int = mlist.lastIndexOf(element) override fun add(element: T): Boolean = mlist.add(element) override fun add(index: Int, element: T) { mlist.add(index, element) } override fun addAll(index: Int, elements: Collection): Boolean = mlist.addAll(index, elements) override fun addAll(elements: Collection): Boolean = mlist.addAll(elements) override fun clear() { mlist.clear() } override fun listIterator(): MutableListIterator = mlist.listIterator() override fun listIterator(index: Int): MutableListIterator = mlist.listIterator(index) override fun remove(element: T): Boolean = mlist.remove(element) override fun removeAll(elements: Collection): Boolean = mlist.removeAll(elements) override fun removeAt(index: Int): T = mlist.removeAt(index) override fun retainAll(elements: Collection): Boolean = mlist.retainAll(elements) override fun set(index: Int, element: T): T = mlist.set(index, element) override fun subList(fromIndex: Int, toIndex: Int): MutableList = mlist.subList(fromIndex, toIndex) } inline class InlineSet(private val s: Set) : Set { override val size: Int get() = s.size override fun contains(element: T): Boolean = s.contains(element) override fun containsAll(elements: Collection): Boolean = s.containsAll(elements) override fun isEmpty(): Boolean = s.isEmpty() override fun iterator(): Iterator = s.iterator() } inline class InlineMutableSet(private val ms: MutableSet) : MutableSet { override val size: Int get() = ms.size override fun contains(element: T): Boolean = ms.contains(element) override fun containsAll(elements: Collection): Boolean = ms.containsAll(elements) override fun isEmpty(): Boolean = ms.isEmpty() override fun add(element: T): Boolean = ms.add(element) override fun addAll(elements: Collection): Boolean = ms.addAll(elements) override fun clear() { ms.clear() } override fun iterator(): MutableIterator = ms.iterator() override fun remove(element: T): Boolean = ms.remove(element) override fun removeAll(elements: Collection): Boolean = ms.removeAll(elements) override fun retainAll(elements: Collection): Boolean = ms.retainAll(elements) } inline class InlineMap(private val map: Map) : Map { override val entries: Set> get() = map.entries override val keys: Set get() = map.keys override val size: Int get() = map.size override val values: Collection get() = map.values override fun containsKey(key: K): Boolean = map.containsKey(key) override fun containsValue(value: V): Boolean = map.containsValue(value) override fun get(key: K): V? = map[key] override fun isEmpty(): Boolean = map.isEmpty() } inline class InlineMutableMap(private val mmap: MutableMap) : MutableMap { override val size: Int get() = mmap.size override fun containsKey(key: K): Boolean = mmap.containsKey(key) override fun containsValue(value: V): Boolean = mmap.containsValue(value) override fun get(key: K): V? = mmap[key] override fun isEmpty(): Boolean = mmap.isEmpty() override val entries: MutableSet> get() = mmap.entries override val keys: MutableSet get() = mmap.keys override val values: MutableCollection get() = mmap.values override fun clear() { mmap.clear() } override fun put(key: K, value: V): V? = mmap.put(key, value) override fun putAll(from: Map) { mmap.putAll(from) } override fun remove(key: K): V? = mmap.remove(key) } inline class InlineMapEntry(private val e: Map.Entry) : Map.Entry { override val key: K get() = e.key override val value: V get() = e.value } inline class InlineMutableMapEntry(private val e: MutableMap.MutableEntry) : MutableMap.MutableEntry { override val key: K get() = e.key override val value: V get() = e.value override fun setValue(newValue: V): V = e.setValue(newValue) }