mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-05-10 09:23:30 +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
78
sprout/detail/literal_def.hpp
Normal file
78
sprout/detail/literal_def.hpp
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*=============================================================================
|
||||
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||
https://github.com/bolero-MURAKAMI/Sprout
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
=============================================================================*/
|
||||
#ifndef SPROUT_DETAIL_LITERAL_DEF_HPP
|
||||
#define SPROUT_DETAIL_LITERAL_DEF_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/string.hpp>
|
||||
#include <sprout/preprocessor/cat.hpp>
|
||||
|
||||
//
|
||||
// SPROUT_LITERAL_STRING_DEF
|
||||
//
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
# define SPROUT_LITERAL_STRING_DEF(NAME, STRING, LENGTH) \
|
||||
template<typename Elem> \
|
||||
struct NAME; \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, STRING, LENGTH, char); \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, SPROUT_PP_CAT(L, STRING), LENGTH, wchar_t); \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, SPROUT_PP_CAT(u, STRING), LENGTH, char16_t); \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, SPROUT_PP_CAT(U, STRING), LENGTH, char32_t); \
|
||||
template<typename Elem> \
|
||||
struct NAME {}
|
||||
#else
|
||||
# define SPROUT_LITERAL_STRING_DEF(NAME, STRING, LENGTH) \
|
||||
template<typename Elem> \
|
||||
struct NAME; \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, STRING, LENGTH, char); \
|
||||
SPROUT_LITERAL_STRING_DEF_IMPL(NAME, SPROUT_PP_CAT(L, STRING), LENGTH, wchar_t); \
|
||||
template<typename Elem> \
|
||||
struct NAME {}
|
||||
#endif
|
||||
#define SPROUT_LITERAL_STRING_DEF_IMPL(NAME, STRING, LENGTH, ELEM) \
|
||||
template<> \
|
||||
struct NAME<ELEM> { \
|
||||
public: \
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<ELEM, LENGTH> value \
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string(STRING)) \
|
||||
; \
|
||||
}; \
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<ELEM, LENGTH> NAME<ELEM>::value \
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(STRING))
|
||||
|
||||
//
|
||||
// SPROUT_LITERAL_CHAR_DEF
|
||||
//
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
# define SPROUT_LITERAL_CHAR_DEF(NAME, CHAR) \
|
||||
template<typename Elem> \
|
||||
struct NAME; \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, CHAR, char); \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, SPROUT_PP_CAT(L, CHAR), wchar_t); \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, SPROUT_PP_CAT(u, CHAR), char16_t); \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, SPROUT_PP_CAT(U, CHAR), char32_t); \
|
||||
template<typename Elem> \
|
||||
struct NAME {}
|
||||
#else
|
||||
# define SPROUT_LITERAL_CHAR_DEF(NAME, CHAR) \
|
||||
template<typename Elem> \
|
||||
struct NAME; \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, CHAR, char); \
|
||||
SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, SPROUT_PP_CAT(L, CHAR), wchar_t); \
|
||||
template<typename Elem> \
|
||||
struct NAME {}
|
||||
#endif
|
||||
#define SPROUT_LITERAL_CHAR_DEF_IMPL(NAME, CHAR, ELEM) \
|
||||
template<> \
|
||||
struct NAME<ELEM> { \
|
||||
public: \
|
||||
SPROUT_STATIC_CONSTEXPR ELEM value = CHAR; \
|
||||
}; \
|
||||
SPROUT_CONSTEXPR_OR_CONST ELEM NAME<ELEM>::value
|
||||
|
||||
#endif // #ifndef SPROUT_DETAIL_LITERAL_DEF_HPP
|
|
@ -15,48 +15,32 @@
|
|||
#include <sprout/config.hpp>
|
||||
#include <sprout/utility/noncopyable.hpp>
|
||||
#include <sprout/logic/tribool/tribool.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace logic {
|
||||
namespace detail {
|
||||
SPROUT_LITERAL_STRING_DEF(default_indeterminate_name, "indeterminate", 13);
|
||||
} // namespace detail
|
||||
//
|
||||
// get_default_indeterminate_name
|
||||
//
|
||||
template<typename Char>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<Char>
|
||||
get_default_indeterminate_name();
|
||||
template<>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<char>
|
||||
get_default_indeterminate_name<char>() {
|
||||
return "indeterminate";
|
||||
template<typename Elem>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<Elem>
|
||||
get_default_indeterminate_name() {
|
||||
return sprout::logic::detail::default_indeterminate_name<Elem>::value.c_str();
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<wchar_t>
|
||||
get_default_indeterminate_name<wchar_t>() {
|
||||
return L"indeterminate";
|
||||
}
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<char16_t>
|
||||
get_default_indeterminate_name<char16_t>() {
|
||||
return u"indeterminate";
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_string<char32_t>
|
||||
get_default_indeterminate_name<char32_t>() {
|
||||
return U"indeterminate";
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
// indeterminate_name
|
||||
//
|
||||
template<typename Char>
|
||||
template<typename Elem>
|
||||
class indeterminate_name
|
||||
: public std::locale::facet
|
||||
, private sprout::noncopyable
|
||||
{
|
||||
public:
|
||||
typedef Char char_type;
|
||||
typedef Elem char_type;
|
||||
typedef std::basic_string<char_type> string_type;
|
||||
public:
|
||||
static std::locale::id id;
|
||||
|
@ -73,28 +57,28 @@ namespace sprout {
|
|||
return name_;
|
||||
}
|
||||
};
|
||||
template<typename Char>
|
||||
std::locale::id sprout::logic::indeterminate_name<Char>::id;
|
||||
template<typename Elem>
|
||||
std::locale::id sprout::logic::indeterminate_name<Elem>::id;
|
||||
|
||||
//
|
||||
// operator<<
|
||||
//
|
||||
template<typename Char, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_ostream<Char, Traits>&
|
||||
operator<<(std::basic_ostream<Char, Traits>& lhs, sprout::logic::tribool rhs) {
|
||||
template<typename Elem, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_ostream<Elem, Traits>&
|
||||
operator<<(std::basic_ostream<Elem, Traits>& lhs, sprout::logic::tribool rhs) {
|
||||
if (!sprout::logic::indeterminate(rhs)) {
|
||||
lhs << static_cast<bool>(rhs);
|
||||
} else {
|
||||
typename std::basic_ostream<Char, Traits>::sentry cerberus(lhs);
|
||||
typename std::basic_ostream<Elem, Traits>::sentry cerberus(lhs);
|
||||
if (cerberus) {
|
||||
if (lhs.flags() & std::ios_base::boolalpha) {
|
||||
if (std::has_facet<sprout::logic::indeterminate_name<Char> >(lhs.getloc())) {
|
||||
indeterminate_name<Char> const& facet
|
||||
= std::use_facet<sprout::logic::indeterminate_name<Char> >(lhs.getloc())
|
||||
if (std::has_facet<sprout::logic::indeterminate_name<Elem> >(lhs.getloc())) {
|
||||
indeterminate_name<Elem> const& facet
|
||||
= std::use_facet<sprout::logic::indeterminate_name<Elem> >(lhs.getloc())
|
||||
;
|
||||
lhs << facet.name();
|
||||
} else {
|
||||
lhs << sprout::logic::get_default_indeterminate_name<Char>();
|
||||
lhs << sprout::logic::get_default_indeterminate_name<Elem>();
|
||||
}
|
||||
} else {
|
||||
lhs << 2;
|
||||
|
@ -103,30 +87,30 @@ namespace sprout {
|
|||
}
|
||||
return lhs;
|
||||
}
|
||||
template<typename Char, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_ostream<Char, Traits>&
|
||||
operator<<(std::basic_ostream<Char, Traits>& lhs, sprout::logic::indeterminate_keyword_t) {
|
||||
template<typename Elem, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_ostream<Elem, Traits>&
|
||||
operator<<(std::basic_ostream<Elem, Traits>& lhs, sprout::logic::indeterminate_keyword_t) {
|
||||
return lhs << sprout::logic::tribool(indeterminate);
|
||||
}
|
||||
|
||||
//
|
||||
// operator>>
|
||||
//
|
||||
template<typename Char, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_istream<Char, Traits>&
|
||||
operator>>(std::basic_istream<Char, Traits>& lhs, sprout::logic::tribool& rhs) {
|
||||
template<typename Elem, typename Traits>
|
||||
inline SPROUT_NON_CONSTEXPR std::basic_istream<Elem, Traits>&
|
||||
operator>>(std::basic_istream<Elem, Traits>& lhs, sprout::logic::tribool& rhs) {
|
||||
if (lhs.flags() & std::ios_base::boolalpha) {
|
||||
typename std::basic_istream<Char, Traits>::sentry cerberus(lhs);
|
||||
typename std::basic_istream<Elem, Traits>::sentry cerberus(lhs);
|
||||
if (cerberus) {
|
||||
typedef std::basic_string<Char> string_type;
|
||||
const std::numpunct<Char>& numpunct_facet =
|
||||
std::use_facet<std::numpunct<Char> >(lhs.getloc())
|
||||
typedef std::basic_string<Elem> string_type;
|
||||
const std::numpunct<Elem>& numpunct_facet =
|
||||
std::use_facet<std::numpunct<Elem> >(lhs.getloc())
|
||||
;
|
||||
string_type falsename = numpunct_facet.falsename();
|
||||
string_type truename = numpunct_facet.truename();
|
||||
string_type othername = std::has_facet<sprout::logic::indeterminate_name<Char> >(lhs.getloc())
|
||||
? std::use_facet<indeterminate_name<Char> >(lhs.getloc()).name()
|
||||
: sprout::logic::get_default_indeterminate_name<Char>()
|
||||
string_type othername = std::has_facet<sprout::logic::indeterminate_name<Elem> >(lhs.getloc())
|
||||
? std::use_facet<indeterminate_name<Elem> >(lhs.getloc()).name()
|
||||
: sprout::logic::get_default_indeterminate_name<Elem>()
|
||||
;
|
||||
typename string_type::size_type pos = 0;
|
||||
bool falsename_ok = true;
|
||||
|
|
|
@ -12,66 +12,15 @@
|
|||
#include <sprout/config.hpp>
|
||||
#include <sprout/array/array.hpp>
|
||||
#include <sprout/string.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace uuids {
|
||||
namespace detail {
|
||||
template<typename Elem>
|
||||
struct digits {};
|
||||
|
||||
template<>
|
||||
struct digits<char> {
|
||||
public:
|
||||
SPROUT_STATIC_CONSTEXPR sprout::basic_string<char, 22> table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_INNER(sprout::to_string("0123456789abcdefABCDEF"))
|
||||
;
|
||||
SPROUT_STATIC_CONSTEXPR char dash = '-';
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char, 22> sprout::uuids::detail::digits<char>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string("0123456789abcdefABCDEF"))
|
||||
;
|
||||
SPROUT_CONSTEXPR_OR_CONST char sprout::uuids::detail::digits<char>::dash;
|
||||
|
||||
template<>
|
||||
struct digits<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_STATIC_CONSTEXPR wchar_t dash = L'-';
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<wchar_t, 22> sprout::uuids::detail::digits<wchar_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(L"0123456789abcdefABCDEF"))
|
||||
;
|
||||
SPROUT_CONSTEXPR_OR_CONST wchar_t sprout::uuids::detail::digits<wchar_t>::dash;
|
||||
|
||||
#if SPROUT_USE_UNICODE_LITERALS
|
||||
template<>
|
||||
struct digits<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_STATIC_CONSTEXPR char16_t dash = u'-';
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char16_t, 22> sprout::uuids::detail::digits<char16_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(u"0123456789abcdefABCDEF"))
|
||||
;
|
||||
SPROUT_CONSTEXPR_OR_CONST char16_t sprout::uuids::detail::digits<char16_t>::dash;
|
||||
|
||||
template<>
|
||||
struct digits<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_STATIC_CONSTEXPR char32_t dash = U'-';
|
||||
};
|
||||
SPROUT_CONSTEXPR_OR_CONST sprout::basic_string<char32_t, 22> sprout::uuids::detail::digits<char32_t>::table
|
||||
SPROUT_STATIC_CONSTEXPR_DATA_MEMBER_OUTER(sprout::to_string(U"0123456789abcdefABCDEF"))
|
||||
;
|
||||
SPROUT_CONSTEXPR_OR_CONST char32_t sprout::uuids::detail::digits<char32_t>::dash;
|
||||
#endif
|
||||
SPROUT_LITERAL_STRING_DEF(digits, "0123456789abcdefABCDEF", 22);
|
||||
SPROUT_LITERAL_CHAR_DEF(dash, '-');
|
||||
SPROUT_LITERAL_CHAR_DEF(lbrace, '{');
|
||||
SPROUT_LITERAL_CHAR_DEF(rbrace, '}');
|
||||
|
||||
template<typename Dummy>
|
||||
struct values;
|
||||
|
|
|
@ -126,42 +126,42 @@ namespace sprout {
|
|||
typedef sprout::detail::string_construct_access<Elem, 36, Traits> access_type;
|
||||
return access_type::raw_construct(
|
||||
36,
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[0] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[0]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[1] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[1]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[2] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[2]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[3] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[3]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::dash,
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[4] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[4]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[5] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[5]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::dash,
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[6] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[6]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[7] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[7]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::dash,
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[8] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[8]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[9] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[9]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::dash,
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[10] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[10]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[11] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[11]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[12] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[12]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[13] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[13]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[14] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[14]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[15] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::table[(u[15]) & 0x0F]
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[0] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[0]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[1] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[1]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[2] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[2]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[3] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[3]) & 0x0F],
|
||||
sprout::uuids::detail::dash<Elem>::value,
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[4] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[4]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[5] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[5]) & 0x0F],
|
||||
sprout::uuids::detail::dash<Elem>::value,
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[6] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[6]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[7] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[7]) & 0x0F],
|
||||
sprout::uuids::detail::dash<Elem>::value,
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[8] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[8]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[9] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[9]) & 0x0F],
|
||||
sprout::uuids::detail::dash<Elem>::value,
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[10] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[10]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[11] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[11]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[12] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[12]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[13] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[13]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[14] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[14]) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[15] >> 4) & 0x0F],
|
||||
sprout::uuids::detail::digits<Elem>::value[(u[15]) & 0x0F]
|
||||
);
|
||||
}
|
||||
//
|
||||
|
|
|
@ -60,50 +60,30 @@ namespace sprout {
|
|||
SPROUT_CONSTEXPR std::uint8_t get_value(Elem c) const {
|
||||
return value_at(
|
||||
sprout::distance(
|
||||
sprout::uuids::detail::digits<Elem>::table.begin(),
|
||||
sprout::uuids::detail::digits<Elem>::value.begin(),
|
||||
sprout::find(
|
||||
sprout::uuids::detail::digits<Elem>::table.begin(),
|
||||
sprout::uuids::detail::digits<Elem>::table.end(),
|
||||
sprout::uuids::detail::digits<Elem>::value.begin(),
|
||||
sprout::uuids::detail::digits<Elem>::value.end(),
|
||||
c
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_dash(char c) {
|
||||
return c == '-';
|
||||
template<typename Elem>
|
||||
static SPROUT_CONSTEXPR bool is_dash(Elem c) {
|
||||
return c == sprout::uuids::detail::dash<Elem>::value;
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_dash(wchar_t c) {
|
||||
return c == L'-';
|
||||
template<typename Elem>
|
||||
static SPROUT_CONSTEXPR bool is_open_brace(Elem c) {
|
||||
return c == sprout::uuids::detail::lbrace<Elem>::value;
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_dash(char16_t c) {
|
||||
return c == u'-';
|
||||
template<typename Elem>
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(Elem c) {
|
||||
return c == sprout::uuids::detail::rbrace<Elem>::value;
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_dash(char32_t c) {
|
||||
return c == U'-';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_open_brace(char c) {
|
||||
return c == '{';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_open_brace(wchar_t c) {
|
||||
return c == L'{';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_open_brace(char16_t c) {
|
||||
return c == u'{';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_open_brace(char32_t c) {
|
||||
return c == U'{';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(char c, char open_brace) {
|
||||
return open_brace == '{' && c == '}';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(wchar_t c, char open_brace) {
|
||||
return open_brace == L'{' && c == L'}';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(char16_t c, char open_brace) {
|
||||
return open_brace == u'{' && c == u'}';
|
||||
}
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(char32_t c, char open_brace) {
|
||||
return open_brace == U'{' && c == U'}';
|
||||
template<typename Elem>
|
||||
static SPROUT_CONSTEXPR bool is_close_brace(Elem c, Elem open_brace) {
|
||||
return is_open_brace(open_brace) && is_close_brace(c);
|
||||
}
|
||||
template<typename ForwardIterator, typename Char, typename... Args>
|
||||
SPROUT_CONSTEXPR result_type
|
||||
|
|
|
@ -23,115 +23,25 @@
|
|||
#include <sprout/container/metafunctions.hpp>
|
||||
#include <sprout/range/algorithm/equal.hpp>
|
||||
#include <sprout/range/ptr_range.hpp>
|
||||
#include <sprout/detail/literal_def.hpp>
|
||||
|
||||
namespace sprout {
|
||||
namespace uuids {
|
||||
namespace detail {
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<T, 3>
|
||||
dns_token();
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char, 3>
|
||||
dns_token<char>() {
|
||||
return sprout::to_string("dns");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<wchar_t, 3>
|
||||
dns_token<wchar_t>() {
|
||||
return sprout::to_string(L"dns");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char16_t, 3>
|
||||
dns_token<char16_t>() {
|
||||
return sprout::to_string(u"dns");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char32_t, 3>
|
||||
dns_token<char32_t>() {
|
||||
return sprout::to_string(U"dns");
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<T, 3>
|
||||
url_token();
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char, 3>
|
||||
url_token<char>() {
|
||||
return sprout::to_string("url");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<wchar_t, 3>
|
||||
url_token<wchar_t>() {
|
||||
return sprout::to_string(L"url");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char16_t, 3>
|
||||
url_token<char16_t>() {
|
||||
return sprout::to_string(u"url");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char32_t, 3>
|
||||
url_token<char32_t>() {
|
||||
return sprout::to_string(U"url");
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<T, 3>
|
||||
oid_token();
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char, 3>
|
||||
oid_token<char>() {
|
||||
return sprout::to_string("oid");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<wchar_t, 3>
|
||||
oid_token<wchar_t>() {
|
||||
return sprout::to_string(L"oid");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char16_t, 3>
|
||||
oid_token<char16_t>() {
|
||||
return sprout::to_string(u"oid");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char32_t, 3>
|
||||
oid_token<char32_t>() {
|
||||
return sprout::to_string(U"oid");
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<T, 4>
|
||||
x500_token();
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char, 4>
|
||||
x500_token<char>() {
|
||||
return sprout::to_string("x500");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<wchar_t, 4>
|
||||
x500_token<wchar_t>() {
|
||||
return sprout::to_string(L"x500");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char16_t, 4>
|
||||
x500_token<char16_t>() {
|
||||
return sprout::to_string(u"x500");
|
||||
}
|
||||
template<>
|
||||
inline SPROUT_CONSTEXPR sprout::basic_string<char32_t, 4>
|
||||
x500_token<char32_t>() {
|
||||
return sprout::to_string(U"x500");
|
||||
}
|
||||
SPROUT_LITERAL_STRING_DEF(dns_token, "dns", 3);
|
||||
SPROUT_LITERAL_STRING_DEF(url_token, "url", 3);
|
||||
SPROUT_LITERAL_STRING_DEF(oid_token, "oid", 3);
|
||||
SPROUT_LITERAL_STRING_DEF(x500_token, "x500", 4);
|
||||
|
||||
template<typename InputRange>
|
||||
inline SPROUT_CONSTEXPR sprout::uuids::md5_name_generator
|
||||
uuid3_impl(InputRange const& rng) {
|
||||
typedef typename std::decay<typename sprout::containers::value_type<InputRange>::type>::type value_type;
|
||||
typedef sprout::ctypes::nocase_equal_to<value_type> predicate_type;
|
||||
return sprout::range::equal(rng, sprout::uuids::detail::dns_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid3_dns()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::url_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid3_url()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::oid_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid3_oid()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::x500_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid3_x500()
|
||||
return sprout::range::equal(rng, sprout::uuids::detail::dns_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid3_dns()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::url_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid3_url()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::oid_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid3_oid()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::x500_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid3_x500()
|
||||
: sprout::uuids::make_uuid3(sprout::uuids::make_uuid(sprout::begin(rng), sprout::end(rng)))
|
||||
;
|
||||
}
|
||||
|
@ -141,10 +51,10 @@ namespace sprout {
|
|||
uuid5_impl(InputRange const& rng) {
|
||||
typedef typename std::decay<typename sprout::containers::value_type<InputRange>::type>::type value_type;
|
||||
typedef sprout::ctypes::nocase_equal_to<value_type> predicate_type;
|
||||
return sprout::range::equal(rng, sprout::uuids::detail::dns_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid5_dns()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::url_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid5_url()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::oid_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid5_oid()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::x500_token<value_type>(), predicate_type()) ? sprout::uuids::make_uuid5_x500()
|
||||
return sprout::range::equal(rng, sprout::uuids::detail::dns_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid5_dns()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::url_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid5_url()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::oid_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid5_oid()
|
||||
: sprout::range::equal(rng, sprout::uuids::detail::x500_token<value_type>::value, predicate_type()) ? sprout::uuids::make_uuid5_x500()
|
||||
: sprout::uuids::make_uuid5(sprout::uuids::make_uuid(sprout::begin(rng), sprout::end(rng)))
|
||||
;
|
||||
}
|
||||
|
|
|
@ -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
Reference in a new issue