/*============================================================================= Copyright (c) 2011-2017 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_UTILITY_STRING_VIEW_STRING_REF_HPP #define SPROUT_UTILITY_STRING_VIEW_STRING_REF_HPP #include #include #include #include #include namespace sprout { // // string_ref // wstring_ref // u16string_ref // u32string_ref // typedef sprout::basic_string_view string_ref; typedef sprout::basic_string_view wstring_ref; #if SPROUT_USE_UNICODE_LITERALS typedef sprout::basic_string_view u16string_ref; typedef sprout::basic_string_view u32string_ref; #endif #if SPROUT_USE_TEMPLATE_ALIASES // // basic_string_ref // template > using basic_string_ref = sprout::basic_string_view; #endif // #if SPROUT_USE_TEMPLATE_ALIASES // // to_string_ref // template inline SPROUT_CONSTEXPR sprout::basic_string_view to_string_ref(sprout::basic_string_view const& s) { return sprout::to_string_view(s); } template inline SPROUT_CONSTEXPR sprout::basic_string_view to_string_ref(sprout::basic_string const& s) { return sprout::to_string_view(s); } template inline SPROUT_NON_CONSTEXPR sprout::basic_string_view to_string_ref(std::basic_string const& s) { return sprout::to_string_view(s); } template inline SPROUT_CONSTEXPR sprout::basic_string_view to_string_ref(T const* str) { return sprout::to_string_view(str); } template inline SPROUT_CONSTEXPR sprout::basic_string_view to_string_ref(T const* str, std::size_t len) { return sprout::to_string_view(str, len); } // // is_basic_string_ref // #if SPROUT_USE_TEMPLATE_ALIASES template using is_basic_string_ref = sprout::is_basic_string_view; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_basic_string_ref : public sprout::is_basic_string_view {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES // // is_string_ref_of // #if SPROUT_USE_TEMPLATE_ALIASES template using is_string_ref_of = sprout::is_string_view_of; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_string_ref_of : public sprout::is_string_view_of {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES // // is_string_ref // #if SPROUT_USE_TEMPLATE_ALIASES template using is_string_ref = sprout::is_string_view; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_string_ref : public sprout::is_string_view {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES // // is_wstring_ref // #if SPROUT_USE_TEMPLATE_ALIASES template using is_wstring_ref = sprout::is_wstring_view; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_wstring_ref : public sprout::is_wstring_view {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES #if SPROUT_USE_UNICODE_LITERALS // // is_u16string_ref // #if SPROUT_USE_TEMPLATE_ALIASES template using is_u16string_ref = sprout::is_u16string_view; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_u16string_ref : public sprout::is_u16string_view {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES // // is_u32string_ref // #if SPROUT_USE_TEMPLATE_ALIASES template using is_u32string_ref = sprout::is_u32string_view; #else // #if SPROUT_USE_TEMPLATE_ALIASES template struct is_u32string_ref : public sprout::is_u32string_view {}; #endif // #if SPROUT_USE_TEMPLATE_ALIASES #endif #if SPROUT_USE_VARIABLE_TEMPLATES template SPROUT_STATIC_CONSTEXPR bool is_basic_string_ref_v = sprout::is_basic_string_view::value; template SPROUT_STATIC_CONSTEXPR bool is_string_ref_of_v = sprout::is_string_view_of::value; template SPROUT_STATIC_CONSTEXPR bool is_string_ref_v = sprout::is_string_view::value; template SPROUT_STATIC_CONSTEXPR bool is_wstring_ref_v = sprout::is_wstring_view::value; #if SPROUT_USE_UNICODE_LITERALS template SPROUT_STATIC_CONSTEXPR bool is_u16string_ref_v = sprout::is_u16string_view::value; template SPROUT_STATIC_CONSTEXPR bool is_u32string_ref_v = sprout::is_u32string_view::value; #endif #endif // #if SPROUT_USE_VARIABLE_TEMPLATES namespace literals { namespace strings { // // _sr // inline SPROUT_CONSTEXPR sprout::basic_string_view operator"" _sr(char const* s, std::size_t size) { return sprout::basic_string_view(s, size); } inline SPROUT_CONSTEXPR sprout::basic_string_view operator"" _sr(wchar_t const* s, std::size_t size) { return sprout::basic_string_view(s, size); } #if SPROUT_USE_UNICODE_LITERALS inline SPROUT_CONSTEXPR sprout::basic_string_view operator"" _sr(char16_t const* s, std::size_t size) { return sprout::basic_string_view(s, size); } inline SPROUT_CONSTEXPR sprout::basic_string_view operator"" _sr(char32_t const* s, std::size_t size) { return sprout::basic_string_view(s, size); } #endif } // namespace strings using sprout::literals::strings::operator"" _sr; } // namespace literals using sprout::literals::strings::operator"" _sr; } // namespace sprout #endif // #ifndef SPROUT_UTILITY_STRING_VIEW_STRING_REF_HPP