mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
add inline, make string_view arrays const, and make sure the templated conversion routines use template on it
This commit is contained in:
parent
f48ba8b101
commit
5029751569
|
@ -454,13 +454,14 @@ namespace stack {
|
|||
|
||||
template <typename Traits, typename Al>
|
||||
struct getter<std::basic_string<wchar_t, Traits, Al>> {
|
||||
static std::basic_string<wchar_t, Traits, Al> get(lua_State* L, int index, record& tracking) {
|
||||
typedef std::basic_string<wchar_t, Traits, Al> S;
|
||||
static S get(lua_State* L, int index, record& tracking) {
|
||||
typedef std::conditional_t<sizeof(wchar_t) == 2, char16_t, char32_t> Ch;
|
||||
typedef std::allocator_traits<Al>::rebind_alloc<Ch> ChAl;
|
||||
typedef typename std::allocator_traits<Al>::template rebind_alloc<Ch> ChAl;
|
||||
typedef std::char_traits<Ch> ChTraits;
|
||||
getter<std::basic_string<Ch, ChTraits, ChAl>> g;
|
||||
(void)g;
|
||||
return g.get_into<std::basic_string<wchar_t, Traits, Al>>(L, index, tracking);
|
||||
return g.template get_into<S>(L, index, tracking);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "string_view.hpp"
|
||||
#include <array>
|
||||
#include <cstring>
|
||||
|
||||
namespace sol {
|
||||
// Everything here was lifted pretty much straight out of
|
||||
|
@ -18,7 +19,7 @@ namespace sol {
|
|||
};
|
||||
|
||||
inline const string_view& to_string(error_code ec) {
|
||||
const string_view arr[4] = {
|
||||
static const string_view arr[4] = {
|
||||
"ok",
|
||||
"invalid code points",
|
||||
"invalid code unit",
|
||||
|
@ -172,8 +173,13 @@ namespace sol {
|
|||
}
|
||||
|
||||
template <typename It>
|
||||
inline decoded_result<It> utf8_to_code_point(It it, It) {
|
||||
inline decoded_result<It> utf8_to_code_point(It it, It last) {
|
||||
decoded_result<It> dr;
|
||||
if (it == last) {
|
||||
dr.next = it;
|
||||
dr.error = error_code::sequence_too_short;
|
||||
return dr;
|
||||
}
|
||||
|
||||
unsigned char b0 = *it;
|
||||
std::size_t length = unicode_detail::sequence_length(b0);
|
||||
|
@ -200,7 +206,7 @@ namespace sol {
|
|||
++it;
|
||||
std::array<unsigned char, 4> b;
|
||||
b[0] = b0;
|
||||
for (int i = 1; i < length; ++i) {
|
||||
for (std::size_t i = 1; i < length; ++i) {
|
||||
b[i] = *it;
|
||||
if (!is_continuation(b[i])) {
|
||||
dr.error = error_code::invalid_code_unit;
|
||||
|
@ -245,8 +251,13 @@ namespace sol {
|
|||
}
|
||||
|
||||
template <typename It>
|
||||
inline decoded_result<It> utf16_to_code_point(It it, It) {
|
||||
inline decoded_result<It> utf16_to_code_point(It it, It last) {
|
||||
decoded_result<It> dr;
|
||||
if (it == last) {
|
||||
dr.next = it;
|
||||
dr.error = error_code::sequence_too_short;
|
||||
return dr;
|
||||
}
|
||||
|
||||
char16_t lead = static_cast<char16_t>(*it);
|
||||
|
||||
|
@ -278,8 +289,13 @@ namespace sol {
|
|||
}
|
||||
|
||||
template <typename It>
|
||||
inline decoded_result<It> utf32_to_code_point(It it, It) {
|
||||
inline decoded_result<It> utf32_to_code_point(It it, It last) {
|
||||
decoded_result<It> dr;
|
||||
if (it == last) {
|
||||
dr.next = it;
|
||||
dr.error = error_code::sequence_too_short;
|
||||
return dr;
|
||||
}
|
||||
dr.codepoint = static_cast<char32_t>(*it);
|
||||
dr.next = ++it;
|
||||
dr.error = error_code::ok;
|
||||
|
|
Loading…
Reference in New Issue
Block a user