This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-swift.git
The following commit(s) were added to refs/heads/main by this push:
new ba3ee77 chore: Use integer arithmetic instead of `ceil` in
`Arrow(Reader|CImporter)` (#150)
ba3ee77 is described below
commit ba3ee77c05d62449cf4deaa535292fa6747319b6
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Wed Mar 25 15:06:33 2026 -0700
chore: Use integer arithmetic instead of `ceil` in
`Arrow(Reader|CImporter)` (#150)
## What's Changed
Use integer arithmetic `(n + 7) / 8` instead of `ceil(Double(n) / 8)`
for null buffer length calculation in `ArrowReader` and
`ArrowCImporter`.
This avoids unnecessary floating-point conversion.
Note that this is a part of subtasks of [SPARK-56063 Improve Linux
Support](https://issues.apache.org/jira/browse/SPARK-56063)
- https://github.com/apache/spark-connect-swift/pull/314
Generated-by: Claude Code (Claude Opus 4.6)
---
Sources/Arrow/ArrowCImporter.swift | 4 ++--
Sources/Arrow/ArrowReader.swift | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/Sources/Arrow/ArrowCImporter.swift
b/Sources/Arrow/ArrowCImporter.swift
index 8381152..5877697 100644
--- a/Sources/Arrow/ArrowCImporter.swift
+++ b/Sources/Arrow/ArrowCImporter.swift
@@ -136,7 +136,7 @@ public class ArrowCImporter {
.invalid("Variable buffer count expected 3 but found
\(cArray.n_buffers)"))
}
- appendToBuffer(cArray.buffers[0], arrowBuffers: &arrowBuffers,
length: UInt(ceil(Double(length) / 8)))
+ appendToBuffer(cArray.buffers[0], arrowBuffers: &arrowBuffers,
length: (length + 7) / 8)
appendToBuffer(cArray.buffers[1], arrowBuffers: &arrowBuffers,
length: length)
let lastOffsetLength = cArray.buffers[1]!
.advanced(by: Int(length) * MemoryLayout<Int32>.stride)
@@ -148,7 +148,7 @@ public class ArrowCImporter {
return .failure(.invalid("Expected buffer count 2 but
found \(cArray.n_buffers)"))
}
- appendToBuffer(cArray.buffers[0], arrowBuffers: &arrowBuffers,
length: UInt(ceil(Double(length) / 8)))
+ appendToBuffer(cArray.buffers[0], arrowBuffers: &arrowBuffers,
length: (length + 7) / 8)
appendToBuffer(cArray.buffers[1], arrowBuffers: &arrowBuffers,
length: length)
}
}
diff --git a/Sources/Arrow/ArrowReader.swift b/Sources/Arrow/ArrowReader.swift
index bcaa234..830d9c0 100644
--- a/Sources/Arrow/ArrowReader.swift
+++ b/Sources/Arrow/ArrowReader.swift
@@ -97,7 +97,7 @@ public class ArrowReader { // swiftlint:disable:this
type_body_length
return .failure(.invalid("Null buffer not found"))
}
- let nullLength = UInt(ceil(Double(node.length) / 8))
+ let nullLength = (UInt(node.length) + 7) / 8
let arrowNullBuffer = makeBuffer(nullBuffer, fileData:
loadInfo.fileData,
length: nullLength, messageOffset:
loadInfo.messageOffset)
var children = [ArrowData]()
@@ -129,7 +129,7 @@ public class ArrowReader { // swiftlint:disable:this
type_body_length
return .failure(.invalid("Offset buffer not found"))
}
- let nullLength = UInt(ceil(Double(node.length) / 8))
+ let nullLength = (UInt(node.length) + 7) / 8
let arrowNullBuffer = makeBuffer(nullBuffer, fileData:
loadInfo.fileData, length: nullLength, messageOffset: loadInfo.messageOffset)
let arrowOffsetBuffer = makeBuffer(offsetBuffer, fileData:
loadInfo.fileData, length: UInt(node.length + 1), messageOffset:
loadInfo.messageOffset)
@@ -161,7 +161,7 @@ public class ArrowReader { // swiftlint:disable:this
type_body_length
return .failure(.invalid("Value buffer not found"))
}
- let nullLength = UInt(ceil(Double(node.length) / 8))
+ let nullLength = (UInt(node.length) + 7) / 8
let arrowNullBuffer = makeBuffer(nullBuffer, fileData:
loadInfo.fileData,
length: nullLength, messageOffset:
loadInfo.messageOffset)
let arrowValueBuffer = makeBuffer(valueBuffer, fileData:
loadInfo.fileData,
@@ -191,7 +191,7 @@ public class ArrowReader { // swiftlint:disable:this
type_body_length
return .failure(.invalid("Value buffer not found"))
}
- let nullLength = UInt(ceil(Double(node.length) / 8))
+ let nullLength = (UInt(node.length) + 7) / 8
let arrowNullBuffer = makeBuffer(nullBuffer, fileData:
loadInfo.fileData,
length: nullLength, messageOffset:
loadInfo.messageOffset)
let arrowOffsetBuffer = makeBuffer(offsetBuffer, fileData:
loadInfo.fileData,