Skip to content

Commit e4c0886

Browse files
authored
Merge pull request #88 from kkebo/memmove
2 parents 0dc6fe5 + 3e96e75 commit e4c0886

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

Sources/Support/memmove.swift

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@_silgen_name("memmove")
2+
func memmove(
3+
_ dst: UnsafeMutableRawPointer,
4+
_ src: UnsafeRawPointer,
5+
_ n: Int,
6+
) -> UnsafeMutableRawPointer {
7+
let dst = unsafe dst.bindMemory(to: UInt8.self, capacity: n)
8+
var dstSpan = unsafe MutableSpan(_unsafeStart: dst, count: n)
9+
let src = unsafe src.bindMemory(to: UInt8.self, capacity: n)
10+
let srcSpan = unsafe Span(_unsafeStart: src, count: n)
11+
if unsafe dst < src {
12+
for i in dstSpan.indices {
13+
dstSpan[i] = srcSpan[i]
14+
}
15+
} else {
16+
for i in dstSpan.indices.reversed() {
17+
dstSpan[i] = srcSpan[i]
18+
}
19+
}
20+
return .init(dst)
21+
}

0 commit comments

Comments
 (0)