Skip to content

Commit 070d2fb

Browse files
authored
Merge pull request #57 from ddddxxx/useBufferPointer
use UnsafeBufferPointer instead of Array
2 parents 766b684 + 751a7f7 commit 070d2fb

File tree

5 files changed

+13
-23
lines changed

5 files changed

+13
-23
lines changed

Sources/Runtime/Metadata/FuntionMetadata.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ struct FunctionMetadata: MetadataType {
3636

3737
private func argumentInfo() -> (Int, [Any.Type], Any.Type) {
3838
let n = numberArguments()
39-
var argTypes = pointer.pointee.argumentVector.vector(n: n + 1)
39+
let argTypeBuffer = pointer.pointee.argumentVector.vector(n: n + 1)
4040

41-
let resultType = argTypes[0]
42-
argTypes.removeFirst()
41+
let resultType = argTypeBuffer[0]
42+
let argTypes = Array(argTypeBuffer.dropFirst())
4343

4444
return (n, argTypes, resultType)
4545
}

Sources/Runtime/Metadata/TupleMetadata.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ struct TupleMetadata: MetadataType, TypeInfoConvertible {
3636
return labels
3737
}
3838

39-
func elements() -> [TupleElementLayout] {
40-
let n = numberOfElements()
41-
guard n > 0 else { return [] }
42-
return pointer.pointee.elementVector.vector(n: n)
39+
func elements() -> UnsafeBufferPointer<TupleElementLayout> {
40+
return pointer.pointee.elementVector.vector(n: numberOfElements())
4341
}
4442

4543
func properies() -> [PropertyInfo] {

Sources/Runtime/Pointers/RelativeVectorPointer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import Foundation
2424

2525
struct RelativeVectorPointer<Offset: FixedWidthInteger, Pointee> {
2626
var offset: Offset
27-
mutating func vector(metadata: UnsafePointer<Int>, n: Int) -> [Pointee] {
27+
mutating func vector(metadata: UnsafePointer<Int>, n: Int) -> UnsafeBufferPointer<Pointee> {
2828
return metadata.advanced(by: numericCast(offset))
2929
.raw.assumingMemoryBound(to: Pointee.self)
30-
.vector(n: n)
30+
.buffer(n: n)
3131
}
3232
}
3333

Sources/Runtime/Pointers/Vector.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ struct Vector<Element> {
2626

2727
var element: Element
2828

29-
mutating func vector(n: Int) -> [Element] {
29+
mutating func vector(n: Int) -> UnsafeBufferPointer<Element> {
3030
return withUnsafePointer(to: &self) {
3131
$0.withMemoryRebound(to: Element.self, capacity: 1) { start in
32-
return start.vector(n: n)
32+
return start.buffer(n: n)
3333
}
3434
}
3535
}

Sources/Runtime/Utilities/Pointer+Extensions.swift

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,8 @@ extension UnsafePointer {
3232
return UnsafeMutablePointer<Pointee>(mutating: self)
3333
}
3434

35-
func vector(n: Int) -> [Pointee] {
36-
var result = [Pointee]()
37-
for i in 0..<n {
38-
result.append(advanced(by: i).pointee)
39-
}
40-
return result
35+
func buffer(n: Int) -> UnsafeBufferPointer<Pointee> {
36+
return UnsafeBufferPointer(start: self, count: n)
4137
}
4238
}
4339

@@ -57,12 +53,8 @@ extension UnsafeMutablePointer {
5753
return UnsafeMutableRawPointer(self)
5854
}
5955

60-
func vector(n: Int) -> [Pointee] {
61-
var result = [Pointee]()
62-
for i in 0..<n {
63-
result.append(advanced(by: i).pointee)
64-
}
65-
return result
56+
func buffer(n: Int) -> UnsafeMutableBufferPointer<Pointee> {
57+
return UnsafeMutableBufferPointer(start: self, count: n)
6658
}
6759

6860
func advanced(by n: Int, wordSize: Int) -> UnsafeMutableRawPointer {

0 commit comments

Comments
 (0)