1
0
Fork 0
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:
bolero-MURAKAMI 2014-10-23 17:23:38 +09:00
parent ff3a85cf55
commit 06eaf3f0ec
10 changed files with 220 additions and 503 deletions

View file

@ -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
)
)

View file

@ -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
)
)

View file

@ -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
)
)

View file

@ -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
)
)