Skip to content

Commit 63d5e0a

Browse files
committed
ColumnDataCollector now uses ColumnDataHolder for collecting data directly into primitive arrays
1 parent 1ceb69f commit 63d5e0a

File tree

10 files changed

+1157
-545
lines changed

10 files changed

+1157
-545
lines changed

core/build.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ dependencies {
8383
testImplementation(libs.kotlin.scriptingJvm)
8484
testImplementation(libs.jsoup)
8585

86-
testImplementation("org.openjdk.jol:jol-core:0.10")
86+
// testImplementation("org.openjdk.jol:jol-core:0.10")
87+
implementation("org.openjdk.jol:jol-core:0.10")
8788
implementation("it.unimi.dsi:fastutil:8.5.14")
8889
}
8990

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/ColumnDataHolder.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public interface ColumnDataHolder<T> : List<T> {
3131

3232
public operator fun get(range: IntRange): List<T>
3333

34-
public fun add(element: T): Boolean
34+
public fun add(element: T)
35+
36+
public fun canAdd(element: T): Boolean
3537

3638
public val distinct: Lazy<Set<T>>
3739

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/ColumnDataCollector.kt

+12-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package org.jetbrains.kotlinx.dataframe.impl
22

33
import org.jetbrains.kotlinx.dataframe.AnyFrame
44
import org.jetbrains.kotlinx.dataframe.AnyRow
5+
import org.jetbrains.kotlinx.dataframe.ColumnDataHolder
56
import org.jetbrains.kotlinx.dataframe.DataColumn
67
import org.jetbrains.kotlinx.dataframe.DataFrame
78
import org.jetbrains.kotlinx.dataframe.DataRow
89
import org.jetbrains.kotlinx.dataframe.api.concat
910
import org.jetbrains.kotlinx.dataframe.api.toDataFrame
11+
import org.jetbrains.kotlinx.dataframe.impl.columns.empty
12+
import org.jetbrains.kotlinx.dataframe.impl.columns.emptyForType
1013
import org.jetbrains.kotlinx.dataframe.impl.columns.guessColumnType
1114
import kotlin.reflect.KClass
1215
import kotlin.reflect.KType
@@ -28,7 +31,7 @@ internal abstract class DataCollectorBase<T>(initCapacity: Int) : DataCollector<
2831

2932
override var hasNulls = false
3033

31-
override val data = ArrayList<T?>(initCapacity)
34+
override val data = ColumnDataHolder.empty<T>(initCapacity)
3235

3336
val values: List<T?>
3437
get() = data
@@ -62,8 +65,15 @@ internal class TypedColumnDataCollector<T>(initCapacity: Int = 0, val type: KTyp
6265

6366
internal val kclass = type.jvmErasure
6467

68+
override val data: ColumnDataHolder<T?> =
69+
ColumnDataHolder.emptyForType(
70+
type = type,
71+
initCapacity = initCapacity,
72+
strictTypes = checkTypes,
73+
)
74+
6575
override fun add(value: T?) {
66-
if (checkTypes && value != null && !value.javaClass.kotlin.isSubclassOf(kclass)) {
76+
if (checkTypes && data.canAdd(value) && value != null && !value.javaClass.kotlin.isSubclassOf(kclass)) {
6777
throw IllegalArgumentException(
6878
"Can not add value of class ${value.javaClass.kotlin.qualifiedName} to column of type $type. Value = $value",
6979
)

0 commit comments

Comments
 (0)