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

org.jetbrains.kotlinx.ggdsl.dsl.internal.contextsMutable.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.ggdsl.dsl.internal

import org.jetbrains.kotlinx.ggdsl.dsl.*
import org.jetbrains.kotlinx.ggdsl.ir.Layer
import org.jetbrains.kotlinx.ggdsl.ir.bindings.*
import org.jetbrains.kotlinx.ggdsl.ir.data.ColumnPointer
import org.jetbrains.kotlinx.ggdsl.ir.data.TableData
import org.jetbrains.kotlinx.ggdsl.ir.feature.FeatureName
import org.jetbrains.kotlinx.ggdsl.ir.feature.LayerFeature
import org.jetbrains.kotlinx.ggdsl.ir.feature.PlotFeature
import org.jetbrains.kotlinx.ggdsl.ir.scale.NonPositionalScale
import org.jetbrains.kotlinx.ggdsl.ir.scale.NonPositionalUnspecifiedScale
import org.jetbrains.kotlinx.ggdsl.ir.scale.PositionalScale
import org.jetbrains.kotlinx.ggdsl.ir.scale.PositionalUnspecifiedScale
import kotlin.reflect.typeOf


public interface TableBindingContextInterfaceMutable : TableDataContext {
    public override val data: TableData
    public val dataBuffer: MutableTableData
    public fun generateID(): String
    public fun  Iterable.toColumnPointer(): ColumnPointer
    public fun  Iterable.toColumnPointer(id: String): ColumnPointer
}

public abstract class TableContextMutableBase : TableBindingContextInterfaceMutable {
    override val bindingCollector: BindingCollector = BindingCollector()
    public abstract override val dataBuffer: MutableTableData
    override val data: TableData
        get() = dataBuffer.toTableData()

    private var counter: Int = 0
    public override fun generateID(): String = "*gen${counter++}"

    public override fun  Iterable.toColumnPointer(): ColumnPointer = toColumnPointer(generateID())

    public override fun  Iterable.toColumnPointer(id: String): ColumnPointer {
        dataBuffer.map[id] = toList()
        return columnPointer(id)
    }

    public fun  Iterable.scaled(): ColumnScaledUnspecifiedDefault =
        ColumnScaledUnspecifiedDefault(toColumnPointer())

    public fun  Pair, String>.scaled(): ColumnScaledUnspecifiedDefault =
        ColumnScaledUnspecifiedDefault(first.toColumnPointer(second))

    public fun  Iterable.scaled(
        scale: PositionalUnspecifiedScale
    ): ColumnScaledPositionalUnspecified = ColumnScaledPositionalUnspecified(toColumnPointer(), scale)


    public fun  Pair, String>.scaled(
        scale: PositionalUnspecifiedScale
    ): ColumnScaledPositionalUnspecified = ColumnScaledPositionalUnspecified(first.toColumnPointer(second), scale)

    public fun  Iterable.scaled(
        scale: NonPositionalUnspecifiedScale
    ): ColumnScaledNonPositionalUnspecified =
        ColumnScaledNonPositionalUnspecified(toColumnPointer(), scale)

    public fun  Pair, String>.scaled(
        scale: NonPositionalUnspecifiedScale
    ): ColumnScaledNonPositionalUnspecified =
        ColumnScaledNonPositionalUnspecified(first.toColumnPointer(second), scale)

    public fun  Iterable.scaled(
        scale: PositionalScale
    ): ColumnScaledPositional = ColumnScaledPositional(toColumnPointer(), scale)

    public fun  Pair, String>.scaled(
        scale: PositionalScale
    ): ColumnScaledPositional = ColumnScaledPositional(first.toColumnPointer(second), scale)

    public fun  Iterable.scaled(
        scale: NonPositionalScale
    ): ColumnScaledNonPositional =
        ColumnScaledNonPositional(toColumnPointer(), scale)

    public fun  Pair, String>.scaled(
        scale: NonPositionalScale
    ): ColumnScaledNonPositional =
        ColumnScaledNonPositional(first.toColumnPointer(second), scale)

    public inline operator fun  NonScalablePositionalAes.invoke(
        data: Iterable
    ) {
        context.bindingCollector.mappings[this.name] =
            NonScalablePositionalMapping(this.name, data.toColumnPointer(), typeOf())
    }

    public inline operator fun  ScalablePositionalAes.invoke(
        data: Iterable
    ): ScaledUnspecifiedDefaultPositionalMapping {
        val mapping = ScaledUnspecifiedDefaultPositionalMapping(
            this.name,
            data.toColumnPointer().scaled(),
            typeOf()
        )
        context.bindingCollector.mappings[this.name] = mapping
        return mapping
    }

    public inline operator fun  ScalablePositionalAes.invoke(
        dataToName: Pair, String>
    ): ScaledUnspecifiedDefaultPositionalMapping {
        val mapping = ScaledUnspecifiedDefaultPositionalMapping(
            this.name,
            dataToName.first.toColumnPointer(dataToName.second).scaled(),
            typeOf()
        )
        context.bindingCollector.mappings[this.name] = mapping
        return mapping
    }

    public inline operator fun 
            MappableNonPositionalAes.invoke(
        data: Iterable
    ): ScaledUnspecifiedDefaultNonPositionalMapping {
        val mapping = ScaledUnspecifiedDefaultNonPositionalMapping(
            this.name,
            data.toColumnPointer().scaled(),
            typeOf()
        )
        context.bindingCollector.mappings[this.name] = mapping
        return mapping
    }
}

public abstract class TableSubContextMutable(
    public open val parent: TableBindingContextInterfaceMutable,
    separatedData: Boolean = true,
    copy: Boolean = true,
    copyMappings: Boolean = true,
    copySettings: Boolean = true,
) : TableContextMutableBase() {
    override val dataBuffer: MutableTableData = if (separatedData) {
        MutableNamedData(parent.dataBuffer.map.toMutableMap())
    } else {
        parent.dataBuffer
    }
    override val bindingCollector: BindingCollector  = if (copy) {
        BindingCollector(parent.bindingCollector, copyMappings, copySettings)
    } else {
        parent.bindingCollector
    }

    override fun generateID(): String = parent.generateID()
}

public interface LayerCollectorContextMutable
    : LayerCollectorContextInterface, TableBindingContextInterfaceMutable

public abstract class SubLayerCollectorContextMutable(
    parent: LayerCollectorContextMutable
) : LayerCollectorContextMutable, TableSubContextMutable(parent) {
    override val layers: MutableList = parent.layers
}

public abstract class LayerContextMutable(parent: LayerCollectorContextMutable) :
    TableSubContextMutable(parent), LayerContextInterface {
    override val features: MutableMap = mutableMapOf()
}

@PlotDslMarker
//@StatDSLMarker
public class PlotContextMutable : LayerPlotContext, LayerCollectorContextMutable, TableContextMutableBase() {
    override val features: MutableMap = mutableMapOf()
    override val layers: MutableList = mutableListOf()
    override val dataBuffer: MutableNamedData = MutableNamedData(mutableMapOf())
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy