@@ -21,6 +21,8 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.FrameColumnImpl
21
21
import org.jetbrains.kotlinx.dataframe.impl.columns.ValueColumnImpl
22
22
import org.jetbrains.kotlinx.dataframe.impl.columns.addPath
23
23
import org.jetbrains.kotlinx.dataframe.impl.columns.guessColumnType
24
+ import org.jetbrains.kotlinx.dataframe.impl.columns.ofCollection
25
+ import org.jetbrains.kotlinx.dataframe.impl.columns.ofBoxedArray
24
26
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumnKind
25
27
import org.jetbrains.kotlinx.dataframe.impl.getValuesType
26
28
import org.jetbrains.kotlinx.dataframe.impl.splitByIndices
@@ -42,6 +44,49 @@ public interface DataColumn<out T> : BaseColumn<T> {
42
44
43
45
public companion object {
44
46
47
+ public fun <T > createValueColumn (
48
+ name : String ,
49
+ values : ColumnDataHolder <T >,
50
+ type : KType ,
51
+ defaultValue : T ? = null,
52
+ ): ValueColumn <T > = ValueColumnImpl (values, name, type, defaultValue)
53
+
54
+ public fun createValueColumn (name : String , values : BooleanArray ): ValueColumn <Boolean > =
55
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Boolean >())
56
+
57
+ public fun createValueColumn (name : String , values : ByteArray ): ValueColumn <Byte > =
58
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Byte >())
59
+
60
+ public fun createValueColumn (name : String , values : ShortArray ): ValueColumn <Short > =
61
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Short >())
62
+
63
+ public fun createValueColumn (name : String , values : IntArray ): ValueColumn <Int > =
64
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Int >())
65
+
66
+ public fun createValueColumn (name : String , values : LongArray ): ValueColumn <Long > =
67
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Long >())
68
+
69
+ public fun createValueColumn (name : String , values : FloatArray ): ValueColumn <Float > =
70
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Float >())
71
+
72
+ public fun createValueColumn (name : String , values : DoubleArray ): ValueColumn <Double > =
73
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Double >())
74
+
75
+ public fun createValueColumn (name : String , values : CharArray ): ValueColumn <Char > =
76
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<Char >())
77
+
78
+ public fun createValueColumn (name : String , values : UByteArray ): ValueColumn <UByte > =
79
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<UByte >())
80
+
81
+ public fun createValueColumn (name : String , values : UShortArray ): ValueColumn <UShort > =
82
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<UShort >())
83
+
84
+ public fun createValueColumn (name : String , values : UIntArray ): ValueColumn <UInt > =
85
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<UInt >())
86
+
87
+ public fun createValueColumn (name : String , values : ULongArray ): ValueColumn <ULong > =
88
+ createValueColumn(name, values.asColumnDataHolder(), typeOf<ULong >())
89
+
45
90
/* *
46
91
* Creates [ValueColumn] using given [name], [values] and [type].
47
92
*
@@ -56,7 +101,15 @@ public interface DataColumn<out T> : BaseColumn<T> {
56
101
type : KType ,
57
102
infer : Infer = Infer .None ,
58
103
defaultValue : T ? = null,
59
- ): ValueColumn <T > = ValueColumnImpl (values, name, getValuesType(values, type, infer), defaultValue)
104
+ ): ValueColumn <T > {
105
+ val valueType = getValuesType(values, type, infer)
106
+ return createValueColumn(
107
+ name = name,
108
+ values = ColumnDataHolder .ofCollection(values, valueType),
109
+ type = valueType,
110
+ defaultValue = defaultValue,
111
+ )
112
+ }
60
113
61
114
/* *
62
115
* Creates [ValueColumn] using given [name], [values] and reified column [type].
@@ -74,25 +127,56 @@ public interface DataColumn<out T> : BaseColumn<T> {
74
127
infer : Infer = Infer .None ,
75
128
): ValueColumn <T > =
76
129
createValueColumn(
77
- name,
78
- values,
79
- getValuesType(
80
- values,
81
- typeOf<T >(),
82
- infer,
130
+ name = name ,
131
+ values = values ,
132
+ type = getValuesType(
133
+ values = values ,
134
+ type = typeOf<T >(),
135
+ infer = infer ,
83
136
),
84
137
)
85
138
139
+ public fun <T > createValueColumn (
140
+ name : String ,
141
+ values : Array <T >,
142
+ type : KType ,
143
+ infer : Infer = Infer .None ,
144
+ defaultValue : T ? = null,
145
+ ): ValueColumn <T > {
146
+ val valueType = getValuesType(values.asList(), type, infer)
147
+ return createValueColumn(
148
+ name = name,
149
+ values = ColumnDataHolder .ofBoxedArray(values, valueType),
150
+ type = valueType,
151
+ defaultValue = defaultValue,
152
+ )
153
+ }
154
+
155
+ public inline fun <reified T > createValueColumn (
156
+ name : String ,
157
+ values : Array <T >,
158
+ infer : Infer = Infer .None ,
159
+ ): ValueColumn <T > =
160
+ createValueColumn(
161
+ name = name,
162
+ values = values,
163
+ type = getValuesType(values.asList(), typeOf<T >(), infer),
164
+ )
165
+
86
166
public fun <T > createColumnGroup (name : String , df : DataFrame <T >): ColumnGroup <T > = ColumnGroupImpl (name, df)
87
167
88
168
public fun <T > createFrameColumn (name : String , df : DataFrame <T >, startIndices : Iterable <Int >): FrameColumn <T > =
89
- FrameColumnImpl (name, df.splitByIndices(startIndices.asSequence()).toList(), lazy { df.schema() })
169
+ FrameColumnImpl (
170
+ name,
171
+ df.splitByIndices(startIndices.asSequence()).toList().toColumnDataHolder(),
172
+ lazy { df.schema() },
173
+ )
90
174
91
175
public fun <T > createFrameColumn (
92
176
name : String ,
93
177
groups : List <DataFrame <T >>,
94
178
schema : Lazy <DataFrameSchema >? = null,
95
- ): FrameColumn <T > = FrameColumnImpl (name, groups, schema)
179
+ ): FrameColumn <T > = FrameColumnImpl (name, groups.toColumnDataHolder() , schema)
96
180
97
181
public fun <T > createWithTypeInference (
98
182
name : String ,
0 commit comments