
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