Skip to content

Commit 86101a8

Browse files
committed
refactoring
1 parent 56dbc2e commit 86101a8

File tree

6 files changed

+172
-202
lines changed

6 files changed

+172
-202
lines changed

Diff for: core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/ColumnDataHolderImpl.kt

+60-78
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,24 @@ internal class ColumnDataHolderImpl<T> private constructor(
3232
internal fun <T> of(list: Collection<T>, type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> {
3333
if (list is ColumnDataHolder<*>) return list as ColumnDataHolder<T>
3434

35-
return try {
36-
when (type) {
37-
BOOLEAN -> ColumnDataHolderImpl((list as Collection<Boolean>).toBooleanArray().asList(), distinct)
38-
BYTE -> ColumnDataHolderImpl((list as Collection<Byte>).toByteArray().asList(), distinct)
39-
SHORT -> ColumnDataHolderImpl((list as Collection<Short>).toShortArray().asList(), distinct)
40-
INT -> ColumnDataHolderImpl((list as Collection<Int>).toIntArray().asList(), distinct)
41-
LONG -> ColumnDataHolderImpl((list as Collection<Long>).toLongArray().asList(), distinct)
42-
FLOAT -> ColumnDataHolderImpl((list as Collection<Float>).toFloatArray().asList(), distinct)
43-
DOUBLE -> ColumnDataHolderImpl((list as Collection<Double>).toDoubleArray().asList(), distinct)
44-
CHAR -> ColumnDataHolderImpl((list as Collection<Char>).toCharArray().asList(), distinct)
45-
UBYTE -> ColumnDataHolderImpl((list as Collection<UByte>).toUByteArray().asList(), distinct)
46-
USHORT -> ColumnDataHolderImpl((list as Collection<UShort>).toUShortArray().asList(), distinct)
47-
UINT -> ColumnDataHolderImpl((list as Collection<UInt>).toUIntArray().asList(), distinct)
48-
ULONG -> ColumnDataHolderImpl((list as Collection<ULong>).toULongArray().asList(), distinct)
49-
else -> ColumnDataHolderImpl(list.asList(), distinct)
50-
} as ColumnDataHolder<T>
35+
try {
36+
val newList = when (type) {
37+
BOOLEAN -> (list as Collection<Boolean>).toBooleanArray().asList()
38+
BYTE -> (list as Collection<Byte>).toByteArray().asList()
39+
SHORT -> (list as Collection<Short>).toShortArray().asList()
40+
INT -> (list as Collection<Int>).toIntArray().asList()
41+
LONG -> (list as Collection<Long>).toLongArray().asList()
42+
FLOAT -> (list as Collection<Float>).toFloatArray().asList()
43+
DOUBLE -> (list as Collection<Double>).toDoubleArray().asList()
44+
CHAR -> (list as Collection<Char>).toCharArray().asList()
45+
UBYTE -> (list as Collection<UByte>).toUByteArray().asList()
46+
USHORT -> (list as Collection<UShort>).toUShortArray().asList()
47+
UINT -> (list as Collection<UInt>).toUIntArray().asList()
48+
ULONG -> (list as Collection<ULong>).toULongArray().asList()
49+
else -> list.asList()
50+
} as List<T>
51+
52+
return ColumnDataHolderImpl(newList, distinct)
5153
} catch (e: Exception) {
5254
throw IllegalArgumentException("Can't create ColumnDataHolder from $list and type $type", e)
5355
}
@@ -59,83 +61,63 @@ internal class ColumnDataHolderImpl<T> private constructor(
5961
* wrapped with [asList].
6062
*/
6163
@Suppress("UNCHECKED_CAST")
62-
internal fun <T> of(array: Array<T>, type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
64+
internal fun <T> of(array: Array<T>, type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> {
6365
try {
64-
when (type) {
65-
BOOLEAN -> ColumnDataHolderImpl((array as Array<Boolean>).toBooleanArray().asList(), distinct)
66-
BYTE -> ColumnDataHolderImpl((array as Array<Byte>).toByteArray().asList(), distinct)
67-
SHORT -> ColumnDataHolderImpl((array as Array<Short>).toShortArray().asList(), distinct)
68-
INT -> ColumnDataHolderImpl((array as Array<Int>).toIntArray().asList(), distinct)
69-
LONG -> ColumnDataHolderImpl((array as Array<Long>).toLongArray().asList(), distinct)
70-
FLOAT -> ColumnDataHolderImpl((array as Array<Float>).toFloatArray().asList(), distinct)
71-
DOUBLE -> ColumnDataHolderImpl((array as Array<Double>).toDoubleArray().asList(), distinct)
72-
CHAR -> ColumnDataHolderImpl((array as Array<Char>).toCharArray().asList(), distinct)
73-
UBYTE -> ColumnDataHolderImpl((array as Array<UByte>).toUByteArray().asList(), distinct)
74-
USHORT -> ColumnDataHolderImpl((array as Array<UShort>).toUShortArray().asList(), distinct)
75-
UINT -> ColumnDataHolderImpl((array as Array<UInt>).toUIntArray().asList(), distinct)
76-
ULONG -> ColumnDataHolderImpl((array as Array<ULong>).toULongArray().asList(), distinct)
77-
else -> ColumnDataHolderImpl(array.asList(), distinct)
78-
} as ColumnDataHolder<T>
66+
val list = when (type) {
67+
BOOLEAN -> (array as Array<Boolean>).toBooleanArray().asList()
68+
BYTE -> (array as Array<Byte>).toByteArray().asList()
69+
SHORT -> (array as Array<Short>).toShortArray().asList()
70+
INT -> (array as Array<Int>).toIntArray().asList()
71+
LONG -> (array as Array<Long>).toLongArray().asList()
72+
FLOAT -> (array as Array<Float>).toFloatArray().asList()
73+
DOUBLE -> (array as Array<Double>).toDoubleArray().asList()
74+
CHAR -> (array as Array<Char>).toCharArray().asList()
75+
UBYTE -> (array as Array<UByte>).toUByteArray().asList()
76+
USHORT -> (array as Array<UShort>).toUShortArray().asList()
77+
UINT -> (array as Array<UInt>).toUIntArray().asList()
78+
ULONG -> (array as Array<ULong>).toULongArray().asList()
79+
else -> array.asList()
80+
} as List<T>
81+
82+
return ColumnDataHolderImpl(list, distinct)
7983
} catch (e: Exception) {
8084
throw IllegalArgumentException(
8185
"Can't create ColumnDataHolder from $array and mismatching type $type",
8286
e
8387
)
8488
}
89+
}
8590

8691
/**
8792
* Constructs [ColumnDataHolderImpl] using an [asList] wrapper around the [primitiveArray].
8893
* [primitiveArray] must be an array of primitives, returns `null` if something goes wrong.
8994
*/
9095
@Suppress("UNCHECKED_CAST")
91-
internal fun <T> of(primitiveArray: Any, type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> =
92-
when {
93-
type == BOOLEAN && primitiveArray is BooleanArray ->
94-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
95-
96-
type == BYTE && primitiveArray is ByteArray ->
97-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
98-
99-
type == SHORT && primitiveArray is ShortArray ->
100-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
101-
102-
type == INT && primitiveArray is IntArray ->
103-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
104-
105-
type == LONG && primitiveArray is LongArray ->
106-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
107-
108-
type == FLOAT && primitiveArray is FloatArray ->
109-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
110-
111-
type == DOUBLE && primitiveArray is DoubleArray ->
112-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
113-
114-
type == CHAR && primitiveArray is CharArray ->
115-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
116-
117-
type == UBYTE && primitiveArray is UByteArray ->
118-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
119-
120-
type == USHORT && primitiveArray is UShortArray ->
121-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
122-
123-
type == UINT && primitiveArray is UIntArray ->
124-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
125-
126-
type == ULONG && primitiveArray is ULongArray ->
127-
ColumnDataHolderImpl(primitiveArray.asList(), distinct)
96+
internal fun <T> of(primitiveArray: Any, type: KType, distinct: Lazy<Set<T>>? = null): ColumnDataHolder<T> {
97+
val newList = when {
98+
type == BOOLEAN && primitiveArray is BooleanArray -> primitiveArray.asList()
99+
type == BYTE && primitiveArray is ByteArray -> primitiveArray.asList()
100+
type == SHORT && primitiveArray is ShortArray -> primitiveArray.asList()
101+
type == INT && primitiveArray is IntArray -> primitiveArray.asList()
102+
type == LONG && primitiveArray is LongArray -> primitiveArray.asList()
103+
type == FLOAT && primitiveArray is FloatArray -> primitiveArray.asList()
104+
type == DOUBLE && primitiveArray is DoubleArray -> primitiveArray.asList()
105+
type == CHAR && primitiveArray is CharArray -> primitiveArray.asList()
106+
type == UBYTE && primitiveArray is UByteArray -> primitiveArray.asList()
107+
type == USHORT && primitiveArray is UShortArray -> primitiveArray.asList()
108+
type == UINT && primitiveArray is UIntArray -> primitiveArray.asList()
109+
type == ULONG && primitiveArray is ULongArray -> primitiveArray.asList()
110+
!primitiveArray.isPrimitiveArray -> throw IllegalArgumentException(
111+
"Can't create ColumnDataHolder from non primitive array $primitiveArray and type $type"
112+
)
128113

129-
!primitiveArray.isPrimitiveArray ->
130-
throw IllegalArgumentException(
131-
"Can't create ColumnDataHolder from non primitive array $primitiveArray and type $type"
132-
)
114+
else -> throw IllegalArgumentException(
115+
"Can't create ColumnDataHolder from primitive array $primitiveArray and type $type"
116+
)
117+
} as List<T>
133118

134-
else ->
135-
throw IllegalArgumentException(
136-
"Can't create ColumnDataHolder from primitive array $primitiveArray and type $type"
137-
)
138-
} as ColumnDataHolder<T>
119+
return ColumnDataHolderImpl(newList, distinct)
120+
}
139121
}
140122
}
141123

Diff for: core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/DataColumnImpl.kt

+26
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,40 @@ package org.jetbrains.kotlinx.dataframe.impl.columns
33
import org.jetbrains.kotlinx.dataframe.ColumnDataHolder
44
import org.jetbrains.kotlinx.dataframe.DataColumn
55
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
6+
import org.jetbrains.kotlinx.dataframe.impl.isArray
7+
import org.jetbrains.kotlinx.dataframe.impl.isPrimitiveArray
8+
import kotlin.reflect.KClass
69
import kotlin.reflect.KType
10+
import kotlin.reflect.full.isSubclassOf
11+
12+
13+
private const val DEBUG = true
714

815
internal abstract class DataColumnImpl<T>(
916
protected val values: ColumnDataHolder<T>,
1017
val name: String,
1118
val type: KType
1219
) : DataColumn<T>, DataColumnInternal<T> {
1320

21+
private infix fun <T> T?.matches(type: KType) =
22+
when {
23+
this == null -> type.isMarkedNullable
24+
this.isPrimitiveArray -> type.isPrimitiveArray &&
25+
this!!::class.qualifiedName == type.classifier?.let { (it as KClass<*>).qualifiedName }
26+
27+
this.isArray -> type.isArray // cannot check the precise type of array
28+
else -> this!!::class.isSubclassOf(type.classifier as KClass<*>)
29+
}
30+
31+
init {
32+
if (DEBUG) {
33+
require(values.all { it matches type }) {
34+
val types = values.map { if (it == null) "Nothing?" else it!!::class.simpleName }.distinct()
35+
"Values of column '$name' have types '$types' which are not compatible given with column type '$type'"
36+
}
37+
}
38+
}
39+
1440
protected val distinct
1541
get() = values.distinct
1642

Diff for: core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/columns/ValueColumnImpl.kt

-23
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,10 @@ import org.jetbrains.kotlinx.dataframe.DataColumn
66
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
77
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
88
import org.jetbrains.kotlinx.dataframe.columns.ValueColumn
9-
import org.jetbrains.kotlinx.dataframe.impl.isArray
10-
import org.jetbrains.kotlinx.dataframe.impl.isPrimitiveArray
119
import org.jetbrains.kotlinx.dataframe.toColumnDataHolder
12-
import kotlin.reflect.KClass
1310
import kotlin.reflect.KType
14-
import kotlin.reflect.full.isSubclassOf
1511
import kotlin.reflect.full.withNullability
1612

17-
private const val DEBUG = true
1813

1914
internal open class ValueColumnImpl<T>(
2015
values: ColumnDataHolder<T>,
@@ -23,24 +18,6 @@ internal open class ValueColumnImpl<T>(
2318
val defaultValue: T? = null,
2419
) : DataColumnImpl<T>(values, name, type), ValueColumn<T> {
2520

26-
private infix fun <T> T?.matches(type: KType) =
27-
when {
28-
this == null -> type.isMarkedNullable
29-
this.isPrimitiveArray -> type.isPrimitiveArray &&
30-
this!!::class.qualifiedName == type.classifier?.let { (it as KClass<*>).qualifiedName }
31-
this.isArray -> type.isArray // cannot check the precise type of array
32-
else -> this!!::class.isSubclassOf(type.classifier as KClass<*>)
33-
}
34-
35-
init {
36-
if (DEBUG) {
37-
require(values.all { it matches type }) {
38-
val types = values.map { if (it == null) "Nothing?" else it!!::class.simpleName }.distinct()
39-
"Values of column '$name' have types '$types' which are not compatible given with column type '$type'"
40-
}
41-
}
42-
}
43-
4421
override fun distinct() = ValueColumnImpl(
4522
values = toSet().toColumnDataHolder(type, distinct),
4623
name = name,

0 commit comments

Comments
 (0)