react-native-nitro-buffer 0.0.14 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +3 -0
- package/cpp/HybridNitroBuffer.cpp +69 -7
- package/nitrogen/generated/android/NitroBuffer+autolinking.cmake +1 -1
- package/nitrogen/generated/android/NitroBuffer+autolinking.gradle +1 -1
- package/nitrogen/generated/android/NitroBufferOnLoad.cpp +1 -1
- package/nitrogen/generated/android/NitroBufferOnLoad.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/buffer/NitroBufferOnLoad.kt +1 -1
- package/nitrogen/generated/ios/NitroBuffer+autolinking.rb +1 -1
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Bridge.hpp +1 -1
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Umbrella.hpp +1 -1
- package/nitrogen/generated/ios/NitroBufferAutolinking.mm +1 -1
- package/nitrogen/generated/ios/NitroBufferAutolinking.swift +1 -1
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +1 -1
- package/package.json +1 -1
package/android/CMakeLists.txt
CHANGED
|
@@ -9,6 +9,9 @@ add_library(NitroBuffer SHARED
|
|
|
9
9
|
../cpp/HybridNitroBuffer.cpp
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
+
# Force both hash styles (sysv and gnu) for Android loader compatibility
|
|
13
|
+
target_link_options(NitroBuffer PRIVATE "-Wl,--hash-style=both")
|
|
14
|
+
|
|
12
15
|
# Include paths for our headers
|
|
13
16
|
include_directories(
|
|
14
17
|
${CMAKE_CURRENT_SOURCE_DIR}/../cpp
|
|
@@ -158,7 +158,7 @@ std::shared_ptr<ArrayBuffer> HybridNitroBuffer::allocUnsafe(double size) {
|
|
|
158
158
|
double HybridNitroBuffer::byteLength(const std::string &string,
|
|
159
159
|
const std::string &encoding) {
|
|
160
160
|
if (encoding == "hex") {
|
|
161
|
-
return string.length() / 2;
|
|
161
|
+
return (double)(string.length() / 2);
|
|
162
162
|
} else if (encoding == "base64") {
|
|
163
163
|
size_t len = string.length();
|
|
164
164
|
if (len == 0)
|
|
@@ -168,10 +168,33 @@ double HybridNitroBuffer::byteLength(const std::string &string,
|
|
|
168
168
|
padding++;
|
|
169
169
|
if (len > 1 && string[len - 2] == '=')
|
|
170
170
|
padding++;
|
|
171
|
-
return (len * 3) / 4 - padding;
|
|
171
|
+
return (double)((len * 3) / 4 - padding);
|
|
172
|
+
} else if (encoding == "binary" || encoding == "latin1") {
|
|
173
|
+
// Each character in the original string (0-255) maps to one byte.
|
|
174
|
+
// The input 'string' is UTF-8 encoded. We count Unicode code points.
|
|
175
|
+
size_t count = 0;
|
|
176
|
+
size_t i = 0;
|
|
177
|
+
size_t len = string.length();
|
|
178
|
+
const char *str = string.c_str();
|
|
179
|
+
while (i < len) {
|
|
180
|
+
unsigned char byte = static_cast<unsigned char>(str[i]);
|
|
181
|
+
if (byte <= 0x7F) {
|
|
182
|
+
i += 1;
|
|
183
|
+
} else if ((byte & 0xE0) == 0xC0) {
|
|
184
|
+
i += 2;
|
|
185
|
+
} else if ((byte & 0xF0) == 0xE0) {
|
|
186
|
+
i += 3;
|
|
187
|
+
} else if ((byte & 0xF8) == 0xF0) {
|
|
188
|
+
i += 4;
|
|
189
|
+
} else {
|
|
190
|
+
i += 1;
|
|
191
|
+
}
|
|
192
|
+
count++;
|
|
193
|
+
}
|
|
194
|
+
return (double)count;
|
|
172
195
|
}
|
|
173
196
|
// utf8 (default)
|
|
174
|
-
return string.length();
|
|
197
|
+
return (double)string.length();
|
|
175
198
|
}
|
|
176
199
|
|
|
177
200
|
double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
|
|
@@ -191,7 +214,7 @@ double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
|
|
|
191
214
|
size_t strLen = string.length();
|
|
192
215
|
size_t actualWrite = std::min(toWrite, strLen);
|
|
193
216
|
memcpy(data + start, string.c_str(), actualWrite);
|
|
194
|
-
return actualWrite;
|
|
217
|
+
return (double)actualWrite;
|
|
195
218
|
} else if (encoding == "hex") {
|
|
196
219
|
size_t strLen = string.length();
|
|
197
220
|
size_t bytesCount = strLen / 2;
|
|
@@ -202,19 +225,58 @@ double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
|
|
|
202
225
|
(unsigned char)strtol(byteString.c_str(), nullptr, 16);
|
|
203
226
|
data[start + i] = byte;
|
|
204
227
|
}
|
|
205
|
-
return actualWrite;
|
|
228
|
+
return (double)actualWrite;
|
|
206
229
|
} else if (encoding == "base64") {
|
|
207
230
|
std::vector<unsigned char> decoded = base64_decode(string);
|
|
208
231
|
size_t actualWrite = std::min(toWrite, decoded.size());
|
|
209
232
|
memcpy(data + start, decoded.data(), actualWrite);
|
|
210
|
-
return actualWrite;
|
|
233
|
+
return (double)actualWrite;
|
|
234
|
+
} else if (encoding == "binary" || encoding == "latin1") {
|
|
235
|
+
// Decode UTF-8 string back to raw bytes (0x00-0xFF)
|
|
236
|
+
size_t written = 0;
|
|
237
|
+
size_t i = 0;
|
|
238
|
+
const char *str = string.c_str();
|
|
239
|
+
size_t utf8Len = string.length();
|
|
240
|
+
|
|
241
|
+
while (i < utf8Len && written < toWrite) {
|
|
242
|
+
unsigned char byte = static_cast<unsigned char>(str[i]);
|
|
243
|
+
uint32_t codePoint = 0;
|
|
244
|
+
size_t seqLen = 0;
|
|
245
|
+
|
|
246
|
+
if (byte <= 0x7F) {
|
|
247
|
+
codePoint = byte;
|
|
248
|
+
seqLen = 1;
|
|
249
|
+
} else if ((byte & 0xE0) == 0xC0 && i + 1 < utf8Len) {
|
|
250
|
+
codePoint = ((byte & 0x1F) << 6) |
|
|
251
|
+
(static_cast<unsigned char>(str[i + 1]) & 0x3F);
|
|
252
|
+
seqLen = 2;
|
|
253
|
+
} else if ((byte & 0xF0) == 0xE0 && i + 2 < utf8Len) {
|
|
254
|
+
codePoint = ((byte & 0x0F) << 12) |
|
|
255
|
+
((static_cast<unsigned char>(str[i + 1]) & 0x3F) << 6) |
|
|
256
|
+
(static_cast<unsigned char>(str[i + 2]) & 0x3F);
|
|
257
|
+
seqLen = 3;
|
|
258
|
+
} else if ((byte & 0xF8) == 0xF0 && i + 3 < utf8Len) {
|
|
259
|
+
codePoint = ((byte & 0x07) << 18) |
|
|
260
|
+
((static_cast<unsigned char>(str[i + 1]) & 0x3F) << 12) |
|
|
261
|
+
((static_cast<unsigned char>(str[i + 2]) & 0x3F) << 6) |
|
|
262
|
+
(static_cast<unsigned char>(str[i + 3]) & 0x3F);
|
|
263
|
+
seqLen = 4;
|
|
264
|
+
} else {
|
|
265
|
+
codePoint = byte;
|
|
266
|
+
seqLen = 1;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
data[start + written++] = static_cast<uint8_t>(codePoint & 0xFF);
|
|
270
|
+
i += seqLen;
|
|
271
|
+
}
|
|
272
|
+
return (double)written;
|
|
211
273
|
}
|
|
212
274
|
|
|
213
275
|
// Fallback utf8
|
|
214
276
|
size_t strLen = string.length();
|
|
215
277
|
size_t actualWrite = std::min(toWrite, strLen);
|
|
216
278
|
memcpy(data + start, string.c_str(), actualWrite);
|
|
217
|
-
return actualWrite;
|
|
279
|
+
return (double)actualWrite;
|
|
218
280
|
}
|
|
219
281
|
|
|
220
282
|
// UTF-8 replacement character (U+FFFD) encoded as UTF-8
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# NitroBuffer+autolinking.cmake
|
|
3
3
|
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
# https://github.com/mrousavy/nitro
|
|
5
|
-
# Copyright ©
|
|
5
|
+
# Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
#
|
|
7
7
|
|
|
8
8
|
# This is a CMake file that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBuffer+autolinking.gradle
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBufferOnLoad.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#ifndef BUILDING_NITROBUFFER_WITH_GENERATED_CMAKE_PROJECT
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBufferOnLoad.kt
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
package com.margelo.nitro.buffer
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# NitroBuffer+autolinking.rb
|
|
3
3
|
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
# https://github.com/mrousavy/nitro
|
|
5
|
-
# Copyright ©
|
|
5
|
+
# Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
#
|
|
7
7
|
|
|
8
8
|
# This is a Ruby script that adds all files generated by Nitrogen
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBuffer-Swift-Cxx-Bridge.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#include "NitroBuffer-Swift-Cxx-Bridge.hpp"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBufferAutolinking.mm
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#import <Foundation/Foundation.h>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// NitroBufferAutolinking.swift
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
public final class NitroBufferAutolinking {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// HybridNitroBufferSpec.cpp
|
|
3
3
|
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
4
|
/// https://github.com/mrousavy/nitro
|
|
5
|
-
/// Copyright ©
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
6
|
///
|
|
7
7
|
|
|
8
8
|
#include "HybridNitroBufferSpec.hpp"
|
package/package.json
CHANGED