From e23c15bb3626515ce915e08b3d14b4dfeaa73a39 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 19 May 2021 14:13:33 -0400 Subject: [PATCH] Add string_view overloads to parse functions --- include/date/date.h | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/include/date/date.h b/include/date/date.h index 7b6b4e4..e97175b 100644 --- a/include/date/date.h +++ b/include/date/date.h @@ -8070,6 +8070,16 @@ public: , offset_(offset) {} +#if HAS_STRING_VIEW + parse_manip(std::basic_string_view format, Parsable& tp, + std::basic_string* abbrev = nullptr, + std::chrono::minutes* offset = nullptr) + : format_(format) + , tp_(tp) + , abbrev_(abbrev) + , offset_(offset) + {} +#endif // HAS_STRING_VIEW }; template @@ -8175,6 +8185,57 @@ parse(const CharT* format, Parsable& tp, return {format, tp, &abbrev, &offset}; } +#if HAS_STRING_VIEW + +// basic_string_view formats + +template +inline +auto +parse(std::basic_string_view format, Parsable& tp) + -> decltype(from_stream(std::declval&>(), format.data(), tp), + parse_manip{format, tp}) +{ + return {format, tp}; +} + +template +inline +auto +parse(std::basic_string_view format, + Parsable& tp, std::basic_string& abbrev) + -> decltype(from_stream(std::declval&>(), format.data(), + tp, &abbrev), + parse_manip{format, tp, &abbrev}) +{ + return {format, tp, &abbrev}; +} + +template +inline +auto +parse(std::basic_string_view format, Parsable& tp, std::chrono::minutes& offset) + -> decltype(from_stream(std::declval&>(), format.data(), + tp, std::declval*>(), &offset), + parse_manip{format, tp, nullptr, &offset}) +{ + return {format, tp, nullptr, &offset}; +} + +template +inline +auto +parse(std::basic_string_view format, Parsable& tp, + std::basic_string& abbrev, std::chrono::minutes& offset) + -> decltype(from_stream(std::declval&>(), format.data(), + tp, &abbrev, &offset), + parse_manip{format, tp, &abbrev, &offset}) +{ + return {format, tp, &abbrev, &offset}; +} + +#endif // HAS_STRING_VIEW + // duration streaming template