Skip to content

Commit 8bfe3d0

Browse files
committed
feat: update NativeCxxModuleExample
1 parent 9382bf5 commit 8bfe3d0

5 files changed

Lines changed: 36 additions & 27 deletions

File tree

packages/rn-tester/NativeCxxModuleExample/NativeCxxModuleExample.cpp

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <react/bridging/ArrayBuffer.h>
1010
#include <react/debug/react_native_assert.h>
1111
#include <iomanip>
12+
#include <numeric>
1213
#include <ostream>
1314
#include <sstream>
1415
#include <thread>
@@ -24,6 +25,20 @@ std::string to_string_with_precision(double value, int precision = 2) {
2425
return oss.str();
2526
}
2627

28+
struct IntegerSequence : jsi::MutableBuffer {
29+
explicit IntegerSequence(int32_t size) : data_(size) {
30+
std::iota(data_.begin(), data_.end(), 1);
31+
}
32+
33+
size_t size() const override {
34+
return data_.size();
35+
}
36+
uint8_t* data() override {
37+
return data_.data();
38+
}
39+
std::vector<uint8_t> data_;
40+
};
41+
2742
} // namespace
2843

2944
NativeCxxModuleExample::NativeCxxModuleExample(
@@ -62,29 +77,16 @@ jsi::ArrayBuffer NativeCxxModuleExample::getArrayBuffer(
6277

6378
jsi::ArrayBuffer NativeCxxModuleExample::createNativeBuffer(
6479
jsi::Runtime& rt,
65-
int32_t size) {
66-
struct VectorBuffer : jsi::MutableBuffer {
67-
explicit VectorBuffer(std::initializer_list<uint8_t> init) : data_(init) {}
68-
69-
size_t size() const override {
70-
return data_.size();
71-
}
72-
uint8_t* data() override {
73-
return data_.data();
74-
}
75-
std::vector<uint8_t> data_;
76-
};
77-
78-
auto buf = std::make_shared<VectorBuffer>(
79-
std::initializer_list<uint8_t>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
80+
int32_t arg) {
81+
auto buf = std::make_shared<IntegerSequence>(arg);
8082
return jsi::ArrayBuffer(rt, std::move(buf));
8183
}
8284

8385
AsyncPromise<double> NativeCxxModuleExample::processAsyncBuffer(
8486
jsi::Runtime& rt,
8587
jsi::ArrayBuffer arg) {
8688
auto promise = AsyncPromise<double>(rt, jsInvoker_);
87-
auto storage = SafeAsyncArrayBuffer::acquire(rt, arg);
89+
auto storage = AsyncArrayBuffer::acquire(rt, arg);
8890
std::thread([promise, storage = std::move(storage)]() mutable {
8991
auto sum = 0.0;
9092
auto bytes = storage.data();
@@ -97,11 +99,13 @@ AsyncPromise<double> NativeCxxModuleExample::processAsyncBuffer(
9799
return promise;
98100
}
99101

100-
AsyncPromise<SafeAsyncArrayBuffer> NativeCxxModuleExample::getAsyncBuffer(
101-
jsi::Runtime& rt) {
102-
auto promise = AsyncPromise<SafeAsyncArrayBuffer>(rt, jsInvoker_);
103-
std::thread([promise]() mutable {
104-
promise.resolve(SafeAsyncArrayBuffer::wrap({10, 20, 30, 40, 50}));
102+
AsyncPromise<AsyncArrayBuffer> NativeCxxModuleExample::getAsyncBuffer(
103+
jsi::Runtime& rt,
104+
int32_t arg) {
105+
auto promise = AsyncPromise<AsyncArrayBuffer>(rt, jsInvoker_);
106+
std::thread([promise, arg]() mutable {
107+
promise.resolve(
108+
AsyncArrayBuffer::wrap(std::make_shared<IntegerSequence>(arg)));
105109
}).detach();
106110
return promise;
107111
}

packages/rn-tester/NativeCxxModuleExample/NativeCxxModuleExample.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ class NativeCxxModuleExample : public NativeCxxModuleExampleCxxSpec<NativeCxxMod
124124

125125
std::vector<std::optional<ObjectStruct>> getArray(jsi::Runtime &rt, std::vector<std::optional<ObjectStruct>> arg);
126126

127-
jsi::ArrayBuffer getArrayBuffer(jsi::Runtime &rt, jsi::ArrayBuffer payload);
127+
jsi::ArrayBuffer getArrayBuffer(jsi::Runtime &rt, jsi::ArrayBuffer arg);
128128

129-
jsi::ArrayBuffer createNativeBuffer(jsi::Runtime& rt, int32_t size);
129+
jsi::ArrayBuffer createNativeBuffer(jsi::Runtime& rt, int32_t arg);
130130

131131
AsyncPromise<double> processAsyncBuffer(jsi::Runtime& rt, jsi::ArrayBuffer arg);
132132

133-
AsyncPromise<SafeAsyncArrayBuffer> getAsyncBuffer(jsi::Runtime& rt);
133+
AsyncPromise<AsyncArrayBuffer> getAsyncBuffer(jsi::Runtime& rt, int32_t arg);
134134

135135
bool getBool(jsi::Runtime &rt, bool arg);
136136

packages/rn-tester/NativeCxxModuleExample/NativeCxxModuleExample.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export interface Spec extends TurboModule {
8585
+getArrayBuffer: (payload: ArrayBuffer) => ArrayBuffer;
8686
+createNativeBuffer: (size: number) => ArrayBuffer;
8787
+processAsyncBuffer: (payload: ArrayBuffer) => Promise<number>;
88-
+getAsyncBuffer: () => Promise<ArrayBuffer>;
88+
+getAsyncBuffer: (size: number) => Promise<ArrayBuffer>;
8989
+getBool: (arg: boolean) => boolean;
9090
+getConstants: () => ConstantsStruct;
9191
+getCustomEnum: (arg: EnumInt) => EnumInt;

packages/rn-tester/NativeCxxModuleExample/tests/NativeCxxModuleExampleTests.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ TEST_F(NativeCxxModuleExampleTests, GetArrayBufferReturnsCorrectValues) {
4545
EXPECT_EQ(bytes[2], 3);
4646
}
4747

48+
TEST_F(NativeCxxModuleExampleTests, CreateNativeBufferReturnsCorrectSize) {
49+
jsi::ArrayBuffer buf = module_->createNativeBuffer(*runtime_, 42);
50+
EXPECT_EQ(buf.size(*runtime_), 42);
51+
}
52+
4853
TEST_F(NativeCxxModuleExampleTests, GetBoolReturnsCorrectValues) {
4954
EXPECT_FALSE(module_->getBool(*runtime_, false));
5055
EXPECT_TRUE(module_->getBool(*runtime_, true));

packages/rn-tester/js/examples/TurboModule/NativeCxxModuleExampleExample.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class NativeCxxModuleExampleExample extends React.Component<{}, State> {
112112
},
113113
processAsyncBuffer: async () => {
114114
const view = new Uint8Array([10, 20, 30, 40, 50]);
115-
const nativeBuffer = NativeCxxModuleExample?.createNativeBuffer(4);
115+
const nativeBuffer = NativeCxxModuleExample?.createNativeBuffer(10);
116116

117117
const [byteSum, zeroCopyByteSum] = await Promise.all([
118118
NativeCxxModuleExample?.processAsyncBuffer(view.buffer),
@@ -125,7 +125,7 @@ class NativeCxxModuleExampleExample extends React.Component<{}, State> {
125125
);
126126
},
127127
getAsyncBuffer: () =>
128-
NativeCxxModuleExample?.getAsyncBuffer().then(buffer => {
128+
NativeCxxModuleExample?.getAsyncBuffer(10).then(buffer => {
129129
this._setResult('getAsyncBuffer', new Uint8Array(buffer).toString());
130130
}),
131131
getBool: () => NativeCxxModuleExample?.getBool(true),

0 commit comments

Comments
 (0)