All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.ktor.util.DelegatingMutableSet.kt Maven / Gradle / Ivy

There is a newer version: 4.0.0
Show newest version
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/

package io.ktor.util

internal open class DelegatingMutableSet(
    private val delegate: MutableSet,
    private val convertTo: From.() -> To,
    private val convert: To.() -> From
) : MutableSet {

    public open fun Collection.convert(): Collection = map { it.convert() }
    public open fun Collection.convertTo(): Collection = map { it.convertTo() }

    override val size: Int = delegate.size

    override fun add(element: To): Boolean = delegate.add(element.convert())

    override fun addAll(elements: Collection): Boolean = delegate.addAll(elements.convert())

    override fun clear() {
        delegate.clear()
    }

    override fun remove(element: To): Boolean = delegate.remove(element.convert())

    override fun removeAll(elements: Collection): Boolean = delegate.removeAll(elements.convert())

    override fun retainAll(elements: Collection): Boolean = delegate.retainAll(elements.convert())

    override fun contains(element: To): Boolean = delegate.contains(element.convert())

    override fun containsAll(elements: Collection): Boolean = delegate.containsAll(elements.convert())

    override fun isEmpty(): Boolean = delegate.isEmpty()

    override fun iterator(): MutableIterator = object : MutableIterator {
        val delegateIterator = delegate.iterator()

        override fun hasNext(): Boolean = delegateIterator.hasNext()

        override fun next(): To = delegateIterator.next().convertTo()

        override fun remove() = delegateIterator.remove()
    }

    override fun hashCode(): Int = delegate.hashCode()

    override fun equals(other: Any?): Boolean {
        if (other == null || other !is Set<*>) return false

        val elements = delegate.convertTo()
        return other.containsAll(elements) && elements.containsAll(other)
    }

    override fun toString(): String = delegate.convertTo().toString()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy