mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-08-03 12:49:50 +00:00
fix string literal table implementations
This commit is contained in:
parent
ff3a85cf55
commit
06eaf3f0ec
10 changed files with 220 additions and 503 deletions
|
@ -15,58 +15,12 @@
|
|||
#include <sprout/tuple/tuple.hpp>
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
#include <sprout/algorithm/find.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace weed {
|
||||
namespace detail {
|
||||
template<typename Elem>
|
||||
struct bdigits;
|
||||
|
||||
template<>
|
||||
struct bdigits<char> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char, 2> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string("01"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char, 2> sprout::weed::detail::bdigits<char>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string("01"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct bdigits<wchar_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<wchar_t, 2> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(L"01"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<wchar_t, 2> sprout::weed::detail::bdigits<wchar_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(L"01"))
|
||||
;
|
||||
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
struct bdigits<char16_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char16_t, 2> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(u"01"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char16_t, 2> sprout::weed::detail::bdigits<char16_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(u"01"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct bdigits<char32_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char32_t, 2> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(U"01"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char32_t, 2> sprout::weed::detail::bdigits<char32_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(U"01"))
|
||||
;
|
||||
#endif
|
||||
SPROUT_LITERAL_STRING_DEF(bdigits, "01", 2);
|
||||
|
||||
template<typename Dummy>
|
||||
struct bvalues;
|
||||
|
@ -77,14 +31,14 @@ namespace sprout {
|
|||
template<>
|
||||
struct bvalues<void> {
|
||||
public:
|
||||
typedef sprout::array<std::uint8_t, 2> table_type;
|
||||
typedef sprout::array<std::uint8_t, 2> value_type;
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR table_type table
|
||||
SPROUT_STATIC_CONSTEXPR value_type value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(SPROUT_WEED_BDIGITS_TABLE_DEF)
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::bvalues<void>::table_type
|
||||
sprout::weed::detail::bvalues<void>::table
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::bvalues<void>::value_type
|
||||
sprout::weed::detail::bvalues<void>::value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(SPROUT_WEED_BDIGITS_TABLE_DEF)
|
||||
;
|
||||
|
||||
|
@ -94,7 +48,7 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> bvalue_at(std::size_t i) {
|
||||
return i < 2
|
||||
? sprout::tuples::tuple<IntType, bool>(
|
||||
static_cast<IntType>(sprout::weed::detail::bvalues<void>::table[i]),
|
||||
static_cast<IntType>(sprout::weed::detail::bvalues<void>::value[i]),
|
||||
true
|
||||
)
|
||||
: sprout::tuples::tuple<IntType, bool>(
|
||||
|
@ -107,10 +61,10 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> from_bdigit(Elem c) {
|
||||
return sprout::weed::detail::bvalue_at<IntType>(
|
||||
sprout::distance(
|
||||
sprout::weed::detail::bdigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::bdigits<Elem>::value.begin(),
|
||||
sprout::find(
|
||||
sprout::weed::detail::bdigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::bdigits<Elem>::table.end(),
|
||||
sprout::weed::detail::bdigits<Elem>::value.begin(),
|
||||
sprout::weed::detail::bdigits<Elem>::value.end(),
|
||||
c
|
||||
)
|
||||
)
|
||||
|
|
|
@ -15,58 +15,12 @@
|
|||
#include <sprout/tuple/tuple.hpp>
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
#include <sprout/algorithm/find.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace weed {
|
||||
namespace detail {
|
||||
template<typename Elem>
|
||||
struct digits;
|
||||
|
||||
template<>
|
||||
struct digits<char> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char, 10> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string("0123456789"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char, 10> sprout::weed::detail::digits<char>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string("0123456789"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct digits<wchar_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<wchar_t, 10> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(L"0123456789"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<wchar_t, 10> sprout::weed::detail::digits<wchar_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(L"0123456789"))
|
||||
;
|
||||
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
struct digits<char16_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char16_t, 10> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(u"0123456789"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char16_t, 10> sprout::weed::detail::digits<char16_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(u"0123456789"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct digits<char32_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char32_t, 10> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(U"0123456789"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char32_t, 10> sprout::weed::detail::digits<char32_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(U"0123456789"))
|
||||
;
|
||||
#endif
|
||||
SPROUT_LITERAL_STRING_DEF(digits, "0123456789", 10);
|
||||
|
||||
template<typename Dummy>
|
||||
struct values;
|
||||
|
@ -77,14 +31,14 @@ namespace sprout {
|
|||
template<>
|
||||
struct values<void> {
|
||||
public:
|
||||
typedef sprout::array<std::uint8_t, 10> table_type;
|
||||
typedef sprout::array<std::uint8_t, 10> value_type;
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR table_type table
|
||||
SPROUT_STATIC_CONSTEXPR value_type value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(SPROUT_WEED_DIGITS_TABLE_DEF)
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::values<void>::table_type
|
||||
sprout::weed::detail::values<void>::table
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::values<void>::value_type
|
||||
sprout::weed::detail::values<void>::value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(SPROUT_WEED_DIGITS_TABLE_DEF)
|
||||
;
|
||||
|
||||
|
@ -94,7 +48,7 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> value_at(std::size_t i) {
|
||||
return i < 10
|
||||
? sprout::tuples::tuple<IntType, bool>(
|
||||
static_cast<IntType>(sprout::weed::detail::values<void>::table[i]),
|
||||
static_cast<IntType>(sprout::weed::detail::values<void>::value[i]),
|
||||
true
|
||||
)
|
||||
: sprout::tuples::tuple<IntType, bool>(
|
||||
|
@ -107,10 +61,10 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> from_digit(Elem c) {
|
||||
return sprout::weed::detail::value_at<IntType>(
|
||||
sprout::distance(
|
||||
sprout::weed::detail::digits<Elem>::table.begin(),
|
||||
sprout::weed::detail::digits<Elem>::value.begin(),
|
||||
sprout::find(
|
||||
sprout::weed::detail::digits<Elem>::table.begin(),
|
||||
sprout::weed::detail::digits<Elem>::table.end(),
|
||||
sprout::weed::detail::digits<Elem>::value.begin(),
|
||||
sprout::weed::detail::digits<Elem>::value.end(),
|
||||
c
|
||||
)
|
||||
)
|
||||
|
|
|
@ -15,58 +15,12 @@
|
|||
#include <sprout/tuple/tuple.hpp>
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
#include <sprout/algorithm/find.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace weed {
|
||||
namespace detail {
|
||||
template<typename Elem>
|
||||
struct odigits;
|
||||
|
||||
template<>
|
||||
struct odigits<char> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char, 8> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string("01234567"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char, 8> sprout::weed::detail::odigits<char>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string("01234567"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct odigits<wchar_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<wchar_t, 8> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(L"01234567"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<wchar_t, 8> sprout::weed::detail::odigits<wchar_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(L"01234567"))
|
||||
;
|
||||
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
struct odigits<char16_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char16_t, 8> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(u"01234567"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char16_t, 8> sprout::weed::detail::odigits<char16_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(u"01234567"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct odigits<char32_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char32_t, 8> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(U"01234567"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char32_t, 8> sprout::weed::detail::odigits<char32_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(U"01234567"))
|
||||
;
|
||||
#endif
|
||||
SPROUT_LITERAL_STRING_DEF(odigits, "01234567", 8);
|
||||
|
||||
template<typename Dummy>
|
||||
struct ovalues;
|
||||
|
@ -77,14 +31,14 @@ namespace sprout {
|
|||
template<>
|
||||
struct ovalues<void> {
|
||||
public:
|
||||
typedef sprout::array<std::uint8_t, 8> table_type;
|
||||
typedef sprout::array<std::uint8_t, 8> value_type;
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR table_type table
|
||||
SPROUT_STATIC_CONSTEXPR value_type value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(SPROUT_WEED_ODIGITS_TABLE_DEF)
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::ovalues<void>::table_type
|
||||
sprout::weed::detail::ovalues<void>::table
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::ovalues<void>::value_type
|
||||
sprout::weed::detail::ovalues<void>::value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(SPROUT_WEED_ODIGITS_TABLE_DEF)
|
||||
;
|
||||
|
||||
|
@ -94,7 +48,7 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> ovalue_at(std::size_t i) {
|
||||
return i < 8
|
||||
? sprout::tuples::tuple<IntType, bool>(
|
||||
static_cast<IntType>(sprout::weed::detail::ovalues<void>::table[i]),
|
||||
static_cast<IntType>(sprout::weed::detail::ovalues<void>::value[i]),
|
||||
true
|
||||
)
|
||||
: sprout::tuples::tuple<IntType, bool>(
|
||||
|
@ -107,10 +61,10 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> from_odigit(Elem c) {
|
||||
return sprout::weed::detail::ovalue_at<IntType>(
|
||||
sprout::distance(
|
||||
sprout::weed::detail::odigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::odigits<Elem>::value.begin(),
|
||||
sprout::find(
|
||||
sprout::weed::detail::odigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::odigits<Elem>::table.end(),
|
||||
sprout::weed::detail::odigits<Elem>::value.begin(),
|
||||
sprout::weed::detail::odigits<Elem>::value.end(),
|
||||
c
|
||||
)
|
||||
)
|
||||
|
|
|
@ -15,58 +15,12 @@
|
|||
#include <sprout/tuple/tuple.hpp>
|
||||
#include <sprout/iterator/operation.hpp>
|
||||
#include <sprout/algorithm/find.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace weed {
|
||||
namespace detail {
|
||||
template<typename Elem>
|
||||
struct xdigits;
|
||||
|
||||
template<>
|
||||
struct xdigits<char> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char, 22> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string("0123456789abcdefABCDEF"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char, 22> sprout::weed::detail::xdigits<char>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string("0123456789abcdefABCDEF"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct xdigits<wchar_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<wchar_t, 22> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(L"0123456789abcdefABCDEF"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<wchar_t, 22> sprout::weed::detail::xdigits<wchar_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(L"0123456789abcdefABCDEF"))
|
||||
;
|
||||
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
struct xdigits<char16_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char16_t, 22> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(u"0123456789abcdefABCDEF"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char16_t, 22> sprout::weed::detail::xdigits<char16_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(u"0123456789abcdefABCDEF"))
|
||||
;
|
||||
|
||||
template<>
|
||||
struct xdigits<char32_t> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char32_t, 22> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(U"0123456789abcdefABCDEF"))
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char32_t, 22> sprout::weed::detail::xdigits<char32_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(U"0123456789abcdefABCDEF"))
|
||||
;
|
||||
#endif
|
||||
SPROUT_LITERAL_STRING_DEF(xdigits, "0123456789abcdefABCDEF", 22);
|
||||
|
||||
template<typename Dummy>
|
||||
struct xvalues;
|
||||
|
@ -77,14 +31,14 @@ namespace sprout {
|
|||
template<>
|
||||
struct xvalues<void> {
|
||||
public:
|
||||
typedef sprout::array<std::uint8_t, 22> table_type;
|
||||
typedef sprout::array<std::uint8_t, 22> value_type;
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR table_type table
|
||||
SPROUT_STATIC_CONSTEXPR value_type value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(SPROUT_WEED_XDIGITS_TABLE_DEF)
|
||||
;
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::xvalues<void>::table_type
|
||||
sprout::weed::detail::xvalues<void>::table
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::weed::detail::xvalues<void>::value_type
|
||||
sprout::weed::detail::xvalues<void>::value
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(SPROUT_WEED_XDIGITS_TABLE_DEF)
|
||||
;
|
||||
|
||||
|
@ -94,7 +48,7 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> xvalue_at(std::size_t i) {
|
||||
return i < 22
|
||||
? sprout::tuples::tuple<IntType, bool>(
|
||||
static_cast<IntType>(sprout::weed::detail::xvalues<void>::table[i]),
|
||||
static_cast<IntType>(sprout::weed::detail::xvalues<void>::value[i]),
|
||||
true
|
||||
)
|
||||
: sprout::tuples::tuple<IntType, bool>(
|
||||
|
@ -107,10 +61,10 @@ namespace sprout {
|
|||
inline SPROUT_CONSTEXPR sprout::tuples::tuple<IntType, bool> from_xdigit(Elem c) {
|
||||
return sprout::weed::detail::xvalue_at<IntType>(
|
||||
sprout::distance(
|
||||
sprout::weed::detail::xdigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::xdigits<Elem>::value.begin(),
|
||||
sprout::find(
|
||||
sprout::weed::detail::xdigits<Elem>::table.begin(),
|
||||
sprout::weed::detail::xdigits<Elem>::table.end(),
|
||||
sprout::weed::detail::xdigits<Elem>::value.begin(),
|
||||
sprout::weed::detail::xdigits<Elem>::value.end(),
|
||||
c
|
||||
)
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue