#ifndef SPROUT_CWCHAR_WMEMCHR_HPP #define SPROUT_CWCHAR_WMEMCHR_HPP #include #include #include #include namespace sprout { namespace detail { inline SPROUT_CONSTEXPR wchar_t const* wmemchr_impl(wchar_t const* found, wchar_t const* last) { return found == last ? nullptr : found ; } inline SPROUT_CONSTEXPR wchar_t* wmemchr_impl(wchar_t* found, wchar_t* last) { return found == last ? nullptr : found ; } } // namespace detail // // wmemchr // // recursion depth: // O(log N) // inline SPROUT_CONSTEXPR wchar_t const* wmemchr(wchar_t const* s, wchar_t c, size_t n) { return sprout::detail::wmemchr_impl( sprout::ptr_unindex( sprout::find( sprout::ptr_index(s), sprout::ptr_index(s, n), c ) ), s + n ); } inline SPROUT_CONSTEXPR wchar_t* wmemchr(wchar_t* s, wchar_t c, size_t n) { return sprout::detail::wmemchr_impl( sprout::ptr_unindex( sprout::find( sprout::ptr_index(s), sprout::ptr_index(s, n), c ) ), s + n ); } } // namespace sprout #endif // #ifndef SPROUT_CWCHAR_WMEMCHR_HPP