Files
bun.sh/src/bun.js/bindings/bun-simdutf.cpp
Jarred Sumner 10996a797a Faster UTF16 -> UTF8 and UTF8 -> UTF16 (#1552)
* Fix freezing test

* Add SIMDUTF

* More micro bench snippets

* Update .gitattributes

* Update .gitattributes

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2022-11-26 21:04:38 -08:00

327 lines
9.2 KiB
C++

#include "simdutf.h"
typedef struct SIMDUTFResult {
int error;
size_t count;
} SIMDUTFResult;
extern "C" {
int simdutf__detect_encodings(const char* input, size_t length)
{
return simdutf::detect_encodings(input, length);
}
bool simdutf__validate_utf8(const char* buf, size_t len)
{
return simdutf::validate_utf8(buf, len);
}
SIMDUTFResult simdutf__validate_utf8_with_errors(const char* buf, size_t len)
{
auto res = simdutf::validate_utf8_with_errors(buf, len);
return { res.error, res.count };
}
bool simdutf__validate_ascii(const char* buf, size_t len)
{
return simdutf::validate_ascii(buf, len);
}
SIMDUTFResult simdutf__validate_ascii_with_errors(const char* buf, size_t len)
{
auto res = simdutf::validate_ascii_with_errors(buf, len);
return { res.error, res.count };
}
bool simdutf__validate_utf16le(const char16_t* buf, size_t len)
{
return simdutf::validate_utf16le(buf, len);
}
bool simdutf__validate_utf16be(const char16_t* buf, size_t len)
{
return simdutf::validate_utf16be(buf, len);
}
SIMDUTFResult simdutf__validate_utf16le_with_errors(const char16_t* buf,
size_t len)
{
auto res = simdutf::validate_utf16le_with_errors(buf, len);
return { res.error, res.count };
}
SIMDUTFResult simdutf__validate_utf16be_with_errors(const char16_t* buf,
size_t len)
{
auto res = simdutf::validate_utf16be_with_errors(buf, len);
return { res.error, res.count };
}
bool simdutf__validate_utf32(const char32_t* buf, size_t len)
{
return simdutf::validate_utf32(buf, len);
}
SIMDUTFResult simdutf__validate_utf32_with_errors(const char32_t* buf,
size_t len)
{
auto res = simdutf::validate_utf32_with_errors(buf, len);
return { res.error, res.count };
}
size_t simdutf__convert_utf8_to_utf16le(const char* buf, size_t len,
char16_t* utf16_output)
{
return simdutf::convert_utf8_to_utf16le(buf, len, utf16_output);
}
size_t simdutf__convert_utf8_to_utf16be(const char* buf, size_t len,
char16_t* utf16_output)
{
return simdutf::convert_utf8_to_utf16be(buf, len, utf16_output);
}
SIMDUTFResult
simdutf__convert_utf8_to_utf16le_with_errors(const char* buf, size_t len,
char16_t* utf16_output)
{
auto res = simdutf::convert_utf8_to_utf16le_with_errors(buf, len, utf16_output);
return { res.error, res.count };
}
SIMDUTFResult
simdutf__convert_utf8_to_utf16be_with_errors(const char* buf, size_t len,
char16_t* utf16_output)
{
auto res = simdutf::convert_utf8_to_utf16be_with_errors(buf, len, utf16_output);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf8_to_utf16le(const char* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_valid_utf8_to_utf16le(buf, len, utf16_buffer);
}
size_t simdutf__convert_valid_utf8_to_utf16be(const char* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_valid_utf8_to_utf16be(buf, len, utf16_buffer);
}
size_t simdutf__convert_utf8_to_utf32(const char* buf, size_t len,
char32_t* utf32_output)
{
return simdutf::convert_utf8_to_utf32(buf, len, utf32_output);
}
SIMDUTFResult
simdutf__convert_utf8_to_utf32_with_errors(const char* buf, size_t len,
char32_t* utf32_output)
{
auto res = simdutf::convert_utf8_to_utf32_with_errors(buf, len, utf32_output);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf8_to_utf32(const char* buf, size_t len,
char32_t* utf32_buffer)
{
return simdutf::convert_valid_utf8_to_utf32(buf, len, utf32_buffer);
}
size_t simdutf__convert_utf16le_to_utf8(const char16_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_utf16le_to_utf8(buf, len, utf8_buffer);
}
size_t simdutf__convert_utf16be_to_utf8(const char16_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_utf16be_to_utf8(buf, len, utf8_buffer);
}
SIMDUTFResult simdutf__convert_utf16le_to_utf8_with_errors(const char16_t* buf,
size_t len,
char* utf8_buffer)
{
auto res = simdutf::convert_utf16le_to_utf8_with_errors(buf, len, utf8_buffer);
return { res.error, res.count };
}
SIMDUTFResult simdutf__convert_utf16be_to_utf8_with_errors(const char16_t* buf,
size_t len,
char* utf8_buffer)
{
auto res = simdutf::convert_utf16be_to_utf8_with_errors(buf, len, utf8_buffer);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf16le_to_utf8(const char16_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_valid_utf16le_to_utf8(buf, len, utf8_buffer);
}
size_t simdutf__convert_valid_utf16be_to_utf8(const char16_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_valid_utf16be_to_utf8(buf, len, utf8_buffer);
}
size_t simdutf__convert_utf32_to_utf8(const char32_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_utf32_to_utf8(buf, len, utf8_buffer);
}
SIMDUTFResult simdutf__convert_utf32_to_utf8_with_errors(const char32_t* buf,
size_t len,
char* utf8_buffer)
{
auto res = simdutf::convert_utf32_to_utf8_with_errors(buf, len, utf8_buffer);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf32_to_utf8(const char32_t* buf, size_t len,
char* utf8_buffer)
{
return simdutf::convert_valid_utf32_to_utf8(buf, len, utf8_buffer);
}
size_t simdutf__convert_utf32_to_utf16le(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_utf32_to_utf16le(buf, len, utf16_buffer);
}
size_t simdutf__convert_utf32_to_utf16be(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_utf32_to_utf16be(buf, len, utf16_buffer);
}
SIMDUTFResult
simdutf__convert_utf32_to_utf16le_with_errors(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
auto res = simdutf::convert_utf32_to_utf16le_with_errors(buf, len, utf16_buffer);
return { res.error, res.count };
}
SIMDUTFResult
simdutf__convert_utf32_to_utf16be_with_errors(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
auto res = simdutf::convert_utf32_to_utf16be_with_errors(buf, len, utf16_buffer);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf32_to_utf16le(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_valid_utf32_to_utf16le(buf, len, utf16_buffer);
}
size_t simdutf__convert_valid_utf32_to_utf16be(const char32_t* buf, size_t len,
char16_t* utf16_buffer)
{
return simdutf::convert_valid_utf32_to_utf16be(buf, len, utf16_buffer);
}
size_t simdutf__convert_utf16le_to_utf32(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
return simdutf::convert_utf16le_to_utf32(buf, len, utf32_buffer);
}
size_t simdutf__convert_utf16be_to_utf32(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
return simdutf::convert_utf16be_to_utf32(buf, len, utf32_buffer);
}
SIMDUTFResult
simdutf__convert_utf16le_to_utf32_with_errors(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
auto res = simdutf::convert_utf16le_to_utf32_with_errors(buf, len, utf32_buffer);
return { res.error, res.count };
}
SIMDUTFResult
simdutf__convert_utf16be_to_utf32_with_errors(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
auto res = simdutf::convert_utf16be_to_utf32_with_errors(buf, len, utf32_buffer);
return { res.error, res.count };
}
size_t simdutf__convert_valid_utf16le_to_utf32(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
return simdutf::convert_valid_utf16le_to_utf32(buf, len, utf32_buffer);
}
size_t simdutf__convert_valid_utf16be_to_utf32(const char16_t* buf, size_t len,
char32_t* utf32_buffer)
{
return simdutf::convert_valid_utf16be_to_utf32(buf, len, utf32_buffer);
}
void simdutf__change_endianness_utf16(const char16_t* buf, size_t length,
char16_t* output)
{
simdutf::change_endianness_utf16(buf, length, output);
}
size_t simdutf__count_utf16le(const char16_t* buf, size_t length)
{
return simdutf::count_utf16le(buf, length);
}
size_t simdutf__count_utf16be(const char16_t* buf, size_t length)
{
return simdutf::count_utf16be(buf, length);
}
size_t simdutf__count_utf8(const char* buf, size_t length)
{
return simdutf::count_utf8(buf, length);
}
size_t simdutf__utf8_length_from_utf16le(const char16_t* input, size_t length)
{
return simdutf::utf8_length_from_utf16le(input, length);
}
size_t simdutf__utf8_length_from_utf16be(const char16_t* input, size_t length)
{
return simdutf::utf8_length_from_utf16be(input, length);
}
size_t simdutf__utf32_length_from_utf16le(const char16_t* input, size_t length)
{
return simdutf::utf32_length_from_utf16le(input, length);
}
size_t simdutf__utf32_length_from_utf16be(const char16_t* input, size_t length)
{
return simdutf::utf32_length_from_utf16be(input, length);
}
size_t simdutf__utf16_length_from_utf8(const char* input, size_t length)
{
return simdutf::utf16_length_from_utf8(input, length);
}
size_t simdutf__utf8_length_from_utf32(const char32_t* input, size_t length)
{
return simdutf::utf8_length_from_utf32(input, length);
}
size_t simdutf__utf16_length_from_utf32(const char32_t* input, size_t length)
{
return simdutf::utf16_length_from_utf32(input, length);
}
size_t simdutf__utf32_length_from_utf8(const char* input, size_t length)
{
return simdutf::utf32_length_from_utf8(input, length);
}
}