@@ -32,14 +32,14 @@ public protocol ArrowBufferBuilder {
32
32
33
33
public class BaseBufferBuilder < T> {
34
34
var values : ArrowBuffer
35
- var nulls : ArrowBuffer
35
+ var nulls : ArrowNullBuffer
36
36
var stride : Int
37
37
public var offset : UInt = 0
38
38
public var capacity : UInt { return self . values. capacity}
39
39
public var length : UInt = 0
40
- public var nullCount : UInt = 0
40
+ public var nullCount : UInt { return self . nulls . nullCount }
41
41
42
- init ( values: ArrowBuffer , nulls: ArrowBuffer , stride: Int = MemoryLayout< T> . stride) {
42
+ init ( values: ArrowBuffer , nulls: ArrowNullBuffer , stride: Int = MemoryLayout< T> . stride) {
43
43
self . stride = stride
44
44
self . values = values
45
45
self . nulls = nulls
@@ -67,7 +67,7 @@ public class FixedBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder {
67
67
public required init ( ) throws {
68
68
self . defaultVal = try FixedBufferBuilder< T> . defaultValueForType( )
69
69
let values = ArrowBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< T> . stride) )
70
- let nulls = ArrowBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< UInt8> . stride) )
70
+ let nulls = ArrowNullBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< UInt8> . stride) , nullCount : 0 )
71
71
super. init ( values: values, nulls: nulls)
72
72
}
73
73
@@ -83,7 +83,7 @@ public class FixedBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder {
83
83
BitUtility . setBit ( index + self . offset, buffer: self . nulls)
84
84
self . values. rawPointer. advanced ( by: byteIndex) . storeBytes ( of: val, as: T . self)
85
85
} else {
86
- self . nullCount += 1
86
+ self . nulls . nullCount += 1
87
87
BitUtility . clearBit ( index + self . offset, buffer: self . nulls)
88
88
self . values. rawPointer. advanced ( by: byteIndex) . storeBytes ( of: defaultVal, as: T . self)
89
89
}
@@ -93,7 +93,8 @@ public class FixedBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder {
93
93
if length > self . values. length {
94
94
let resizeLength = resizeLength ( self . values)
95
95
var values = ArrowBuffer . createBuffer ( resizeLength, size: UInt ( MemoryLayout< T> . size) )
96
- var nulls = ArrowBuffer . createBuffer ( resizeLength/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) )
96
+ var nulls = ArrowNullBuffer . createBuffer ( resizeLength/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) ,
97
+ nullCount: self . nullCount)
97
98
ArrowBuffer . copyCurrent ( self . values, to: & values, len: self . values. capacity)
98
99
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: self . nulls. capacity)
99
100
self . values = values
@@ -104,7 +105,8 @@ public class FixedBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder {
104
105
public func finish( ) -> [ ArrowBuffer ] {
105
106
let length = self . length
106
107
var values = ArrowBuffer . createBuffer ( length, size: UInt ( MemoryLayout< T> . size) )
107
- var nulls = ArrowBuffer . createBuffer ( length/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) )
108
+ var nulls = ArrowNullBuffer . createBuffer ( length/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) ,
109
+ nullCount: self . nullCount)
108
110
ArrowBuffer . copyCurrent ( self . values, to: & values, len: values. capacity)
109
111
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: nulls. capacity)
110
112
return [ nulls, values]
@@ -142,7 +144,8 @@ public class BoolBufferBuilder: BaseBufferBuilder<Bool>, ArrowBufferBuilder {
142
144
public typealias ItemType = Bool
143
145
public required init ( ) throws {
144
146
let values = ArrowBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< UInt8> . stride) )
145
- let nulls = ArrowBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< UInt8> . stride) )
147
+ let nulls = ArrowNullBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< UInt8> . stride) ,
148
+ nullCount: 0 )
146
149
super. init ( values: values, nulls: nulls)
147
150
}
148
151
@@ -162,7 +165,7 @@ public class BoolBufferBuilder: BaseBufferBuilder<Bool>, ArrowBufferBuilder {
162
165
}
163
166
164
167
} else {
165
- self . nullCount += 1
168
+ self . nulls . nullCount += 1
166
169
BitUtility . clearBit ( index + self . offset, buffer: self . nulls)
167
170
BitUtility . clearBit ( index + self . offset, buffer: self . values)
168
171
}
@@ -172,7 +175,8 @@ public class BoolBufferBuilder: BaseBufferBuilder<Bool>, ArrowBufferBuilder {
172
175
if ( length/ 8 ) > self . values. length {
173
176
let resizeLength = resizeLength ( self . values)
174
177
var values = ArrowBuffer . createBuffer ( resizeLength, size: UInt ( MemoryLayout< UInt8> . size) )
175
- var nulls = ArrowBuffer . createBuffer ( resizeLength, size: UInt ( MemoryLayout< UInt8> . size) )
178
+ var nulls = ArrowNullBuffer . createBuffer ( resizeLength, size: UInt ( MemoryLayout< UInt8> . size) ,
179
+ nullCount: nullCount)
176
180
ArrowBuffer . copyCurrent ( self . values, to: & values, len: self . values. capacity)
177
181
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: self . nulls. capacity)
178
182
self . values = values
@@ -183,7 +187,8 @@ public class BoolBufferBuilder: BaseBufferBuilder<Bool>, ArrowBufferBuilder {
183
187
public func finish( ) -> [ ArrowBuffer ] {
184
188
let length = self . length
185
189
var values = ArrowBuffer . createBuffer ( length, size: UInt ( MemoryLayout< UInt8> . size) )
186
- var nulls = ArrowBuffer . createBuffer ( length, size: UInt ( MemoryLayout< UInt8> . size) )
190
+ var nulls = ArrowNullBuffer . createBuffer ( length, size: UInt ( MemoryLayout< UInt8> . size) ,
191
+ nullCount: nullCount)
187
192
ArrowBuffer . copyCurrent ( self . values, to: & values, len: values. capacity)
188
193
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: nulls. capacity)
189
194
return [ nulls, values]
@@ -196,7 +201,7 @@ public class VariableBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder
196
201
let binaryStride = MemoryLayout< UInt8> . stride
197
202
public required init ( ) throws {
198
203
let values = ArrowBuffer . createBuffer ( 0 , size: UInt ( binaryStride) )
199
- let nulls = ArrowBuffer . createBuffer ( 0 , size: UInt ( binaryStride) )
204
+ let nulls = ArrowNullBuffer . createBuffer ( 0 , size: UInt ( binaryStride) , nullCount : 0 )
200
205
self . offsets = ArrowBuffer . createBuffer ( 0 , size: UInt ( MemoryLayout< Int32> . stride) )
201
206
super. init ( values: values, nulls: nulls, stride: binaryStride)
202
207
}
@@ -229,7 +234,7 @@ public class VariableBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder
229
234
}
230
235
231
236
if isNull {
232
- self . nullCount += 1
237
+ self . nulls . nullCount += 1
233
238
BitUtility . clearBit ( index + self . offset, buffer: self . nulls)
234
239
} else {
235
240
BitUtility . setBit ( index + self . offset, buffer: self . nulls)
@@ -257,7 +262,8 @@ public class VariableBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder
257
262
public func resize( _ length: UInt ) {
258
263
if length > self . offsets. length {
259
264
let resizeLength = resizeLength ( self . offsets, len: length)
260
- var nulls = ArrowBuffer . createBuffer ( resizeLength/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) )
265
+ var nulls = ArrowNullBuffer . createBuffer ( resizeLength/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) ,
266
+ nullCount: self . nullCount)
261
267
var offsets = ArrowBuffer . createBuffer ( resizeLength, size: UInt ( MemoryLayout< Int32> . size) )
262
268
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: self . nulls. capacity)
263
269
ArrowBuffer . copyCurrent ( self . offsets, to: & offsets, len: self . offsets. capacity)
@@ -269,7 +275,8 @@ public class VariableBufferBuilder<T>: BaseBufferBuilder<T>, ArrowBufferBuilder
269
275
public func finish( ) -> [ ArrowBuffer ] {
270
276
let length = self . length
271
277
var values = ArrowBuffer . createBuffer ( self . values. length, size: UInt ( MemoryLayout< UInt8> . size) )
272
- var nulls = ArrowBuffer . createBuffer ( length/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) )
278
+ var nulls = ArrowNullBuffer . createBuffer ( length/ 8 + 1 , size: UInt ( MemoryLayout< UInt8> . size) ,
279
+ nullCount: self . nullCount)
273
280
var offsets = ArrowBuffer . createBuffer ( length, size: UInt ( MemoryLayout< Int32> . size) )
274
281
ArrowBuffer . copyCurrent ( self . values, to: & values, len: values. capacity)
275
282
ArrowBuffer . copyCurrent ( self . nulls, to: & nulls, len: nulls. capacity)
0 commit comments