Skip to content

Commit c42156f

Browse files
committed
native implementation and fix test import
1 parent ae82915 commit c42156f

4 files changed

Lines changed: 74 additions & 3 deletions

File tree

Samples/SwiftJavaExtractFFMSampleApp/src/jmh/java/org/swift/swiftkit/ffm/FFMDataBenchmark.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
package org.swift.swiftkit.ffm;
1616

17-
import com.example.swift.Data;
1817
import com.example.swift.MySwiftLibrary;
1918
import org.openjdk.jmh.annotations.*;
2019
import org.openjdk.jmh.infra.Blackhole;
@@ -79,7 +78,7 @@ public ByteBuffer ffm_data_withUnsafeBytes_asByteBuffer() {
7978
});
8079
return buf.value;
8180
}
82-
81+
8382
@Benchmark
8483
public byte[] ffm_data_withUnsafeBytes_toArray() {
8584
Holder<byte[]> buf = new Holder<>();

Samples/SwiftJavaExtractFFMSampleApp/src/test/java/com/example/swift/DataImportTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.junit.jupiter.api.Test;
1818
import org.swift.swiftkit.ffm.AllocatingSwiftArena;
19+
import org.swift.swiftkit.ffm.foundation.Data;
1920

2021
import java.lang.foreign.ValueLayout;
2122

@@ -134,7 +135,7 @@ void test_Data_toByteBuffer_emptyData() {
134135
byte[] original = new byte[0];
135136
var data = Data.fromByteArray(original, arena);
136137
var buffer = data.toByteBuffer(arena);
137-
138+
138139
assertEquals(0, buffer.capacity());
139140
}
140141
}

Samples/SwiftJavaExtractFFMSampleApp/src/test/java/com/example/swift/OptionalImportTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import org.junit.jupiter.api.Test;
1818
import org.swift.swiftkit.ffm.AllocatingSwiftArena;
19+
import org.swift.swiftkit.ffm.foundation.Data;
1920

2021
import java.util.Optional;
2122
import java.util.OptionalLong;
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2026 Apple Inc. and the Swift.org project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of Swift.org project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
#if canImport(FoundationEssentials)
16+
import FoundationEssentials
17+
#else
18+
import Foundation
19+
#endif
20+
21+
22+
// ==== --------------------------------------------------
23+
// Thunks for Data
24+
25+
@_cdecl("swiftjava_getType_SwiftRuntimeFunctions_Data")
26+
public func swiftjava_getType_SwiftRuntimeFunctions_Data() -> UnsafeMutableRawPointer /* Any.Type */ {
27+
return unsafeBitCast(Data.self, to: UnsafeMutableRawPointer.self)
28+
}
29+
30+
@_cdecl("swiftjava_SwiftRuntimeFunctions_Data_init_bytes_count")
31+
public func swiftjava_SwiftRuntimeFunctions_Data_init_bytes_count(_ bytes: UnsafeRawPointer, _ count: Int, _ _result: UnsafeMutableRawPointer) {
32+
_result.assumingMemoryBound(to: Data.self).initialize(to: Data(bytes: bytes, count: count))
33+
}
34+
35+
@_cdecl("swiftjava_SwiftRuntimeFunctions_Data_init__")
36+
public func swiftjava_SwiftRuntimeFunctions_Data_init__(_ bytes_pointer: UnsafeRawPointer, _ bytes_count: Int, _ _result: UnsafeMutableRawPointer) {
37+
_result.assumingMemoryBound(to: Data.self).initialize(to: Data([UInt8](UnsafeRawBufferPointer(start: bytes_pointer, count: bytes_count))))
38+
}
39+
40+
@_cdecl("swiftjava_SwiftRuntimeFunctions_Data_count$get")
41+
public func swiftjava_SwiftRuntimeFunctions_Data_count$get(_ self: UnsafeRawPointer) -> Int {
42+
return self.assumingMemoryBound(to: Data.self).pointee.count
43+
}
44+
45+
@_cdecl("swiftjava_SwiftRuntimeFunctions_Data_withUnsafeBytes__")
46+
public func swiftjava_SwiftRuntimeFunctions_Data_withUnsafeBytes__(_ body: @convention(c) (UnsafeRawPointer?, Int) -> Void, _ self: UnsafeRawPointer) {
47+
self.assumingMemoryBound(to: Data.self).pointee.withUnsafeBytes({ (_0) in
48+
return body(_0.baseAddress, _0.count)
49+
})
50+
}
51+
52+
@_cdecl("swiftjava_SwiftRuntimeFunctions_Data_copyBytes__")
53+
public func swiftjava_SwiftRuntimeFunctions_Data_copyBytes__(
54+
selfPointer: UnsafeRawPointer,
55+
destinationPointer: UnsafeMutableRawPointer,
56+
count: Int
57+
) {
58+
let data = selfPointer.assumingMemoryBound(to: Data.self).pointee
59+
data.withUnsafeBytes { buffer in
60+
destinationPointer.copyMemory(from: buffer.baseAddress!, byteCount: count)
61+
}
62+
}
63+
64+
// ==== --------------------------------------------------
65+
// Thunks for DataProtocol
66+
67+
@_cdecl("swiftjava_getType_SwiftRuntimeFunctions_DataProtocol")
68+
public func swiftjava_getType_SwiftRuntimeFunctions_DataProtocol() -> UnsafeMutableRawPointer /* Any.Type */ {
69+
return unsafeBitCast((any DataProtocol).self, to: UnsafeMutableRawPointer.self)
70+
}

0 commit comments

Comments
 (0)