Added `log2InPlace` to ‘Logarithm.swift’ & made `log2` into thin wrapper
This commit is contained in:
parent
048d343e7e
commit
a85b50231b
|
@ -59,26 +59,36 @@ func logInPlace<L: UnsafeMutableMemoryAccessible>(_ lhs: inout L) where L.Elemen
|
||||||
// MARK: - Base-2 Logarithm
|
// MARK: - Base-2 Logarithm
|
||||||
|
|
||||||
/// - Warning: does not support memory stride (assumes stride is 1).
|
/// - Warning: does not support memory stride (assumes stride is 1).
|
||||||
public func log2<X: UnsafeMemoryAccessible>(_ x: X) -> [Float] where X.Element == Float {
|
public func log2<L: UnsafeMemoryAccessible>(_ lhs: L) -> [Float] where L.Element == Float {
|
||||||
return x.withUnsafeMemory { xm in
|
var results = Array(lhs)
|
||||||
precondition(xm.stride == 1, "\(#function) does not support strided memory access")
|
log2InPlace(&results)
|
||||||
var results = [Float](x)
|
|
||||||
results.withUnsafeMutableBufferPointer { rbp in
|
|
||||||
vvlog2f(rbp.baseAddress!, xm.pointer, [numericCast(xm.count)])
|
|
||||||
}
|
|
||||||
return results
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
|
/// - Warning: does not support memory stride (assumes stride is 1).
|
||||||
|
public func log2<L: UnsafeMemoryAccessible>(_ lhs: L) -> [Double] where L.Element == Double {
|
||||||
|
var results = Array(lhs)
|
||||||
|
log2InPlace(&results)
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Base-2 Logarithm: In Place
|
||||||
|
|
||||||
|
/// - Warning: does not support memory stride (assumes stride is 1).
|
||||||
|
func log2InPlace<L: UnsafeMutableMemoryAccessible>(_ lhs: inout L) where L.Element == Float {
|
||||||
|
withUnsafeMutableMemory(&lhs) { lm in
|
||||||
|
precondition(lm.stride == 1, "\(#function) does not support strided memory access")
|
||||||
|
var elementCount: Int32 = numericCast(lm.count)
|
||||||
|
vvlog2f(lm.pointer, lm.pointer, &elementCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// - Warning: does not support memory stride (assumes stride is 1).
|
/// - Warning: does not support memory stride (assumes stride is 1).
|
||||||
public func log2<X: UnsafeMemoryAccessible>(_ x: X) -> [Double] where X.Element == Double {
|
func log2InPlace<L: UnsafeMutableMemoryAccessible>(_ lhs: inout L) where L.Element == Double {
|
||||||
return x.withUnsafeMemory { xm in
|
withUnsafeMutableMemory(&lhs) { lm in
|
||||||
precondition(xm.stride == 1, "\(#function) does not support strided memory access")
|
precondition(lm.stride == 1, "\(#function) does not support strided memory access")
|
||||||
var results = [Double](x)
|
var elementCount: Int32 = numericCast(lm.count)
|
||||||
results.withUnsafeMutableBufferPointer { rbp in
|
vvlog2(lm.pointer, lm.pointer, &elementCount)
|
||||||
vvlog2(rbp.baseAddress!, xm.pointer, [numericCast(xm.count)])
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue