1cfa1376aSLouis Dionne //===----------------------------------------------------------------------===// 2cfa1376aSLouis Dionne // 3cfa1376aSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4cfa1376aSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5cfa1376aSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6cfa1376aSLouis Dionne // 7cfa1376aSLouis Dionne //===----------------------------------------------------------------------===// 8cfa1376aSLouis Dionne 9cfa1376aSLouis Dionne #ifndef LIBCPP_TEST_SUPPORT_PARSE_INTEGER_H 10cfa1376aSLouis Dionne #define LIBCPP_TEST_SUPPORT_PARSE_INTEGER_H 11cfa1376aSLouis Dionne 12cfa1376aSLouis Dionne #include <string> 13cfa1376aSLouis Dionne 14cfa1376aSLouis Dionne namespace detail { 15cfa1376aSLouis Dionne template <class T> 16cfa1376aSLouis Dionne struct parse_integer_impl; 17cfa1376aSLouis Dionne 18cfa1376aSLouis Dionne template <> 19cfa1376aSLouis Dionne struct parse_integer_impl<int> { 20cfa1376aSLouis Dionne template <class CharT> 21cfa1376aSLouis Dionne int operator()(std::basic_string<CharT> const& str) const { 22cfa1376aSLouis Dionne return std::stoi(str); 23cfa1376aSLouis Dionne } 24cfa1376aSLouis Dionne }; 25cfa1376aSLouis Dionne 26cfa1376aSLouis Dionne template <> 27cfa1376aSLouis Dionne struct parse_integer_impl<long> { 28cfa1376aSLouis Dionne template <class CharT> 29cfa1376aSLouis Dionne long operator()(std::basic_string<CharT> const& str) const { 30cfa1376aSLouis Dionne return std::stol(str); 31cfa1376aSLouis Dionne } 32cfa1376aSLouis Dionne }; 33cfa1376aSLouis Dionne 34cfa1376aSLouis Dionne template <> 35cfa1376aSLouis Dionne struct parse_integer_impl<long long> { 36cfa1376aSLouis Dionne template <class CharT> 37cfa1376aSLouis Dionne long long operator()(std::basic_string<CharT> const& str) const { 38cfa1376aSLouis Dionne return std::stoll(str); 39cfa1376aSLouis Dionne } 40cfa1376aSLouis Dionne }; 41cfa1376aSLouis Dionne 42cfa1376aSLouis Dionne template <> 43cfa1376aSLouis Dionne struct parse_integer_impl<unsigned int> { 44cfa1376aSLouis Dionne template <class CharT> 45cfa1376aSLouis Dionne unsigned int operator()(std::basic_string<CharT> const& str) const { 46cfa1376aSLouis Dionne return std::stoul(str); 47cfa1376aSLouis Dionne } 48cfa1376aSLouis Dionne }; 49cfa1376aSLouis Dionne 50cfa1376aSLouis Dionne template <> 51cfa1376aSLouis Dionne struct parse_integer_impl<unsigned long> { 52cfa1376aSLouis Dionne template <class CharT> 53cfa1376aSLouis Dionne unsigned long operator()(std::basic_string<CharT> const& str) const { 54cfa1376aSLouis Dionne return std::stoul(str); 55cfa1376aSLouis Dionne } 56cfa1376aSLouis Dionne }; 57cfa1376aSLouis Dionne 58cfa1376aSLouis Dionne template <> 59cfa1376aSLouis Dionne struct parse_integer_impl<unsigned long long> { 60cfa1376aSLouis Dionne template <class CharT> 61cfa1376aSLouis Dionne unsigned long long operator()(std::basic_string<CharT> const& str) const { 62cfa1376aSLouis Dionne return std::stoull(str); 63cfa1376aSLouis Dionne } 64cfa1376aSLouis Dionne }; 65*953af0e7SLouis Dionne } // namespace detail 66cfa1376aSLouis Dionne 67cfa1376aSLouis Dionne template <class T, class CharT> 68cfa1376aSLouis Dionne T parse_integer(std::basic_string<CharT> const& str) { 69cfa1376aSLouis Dionne return detail::parse_integer_impl<T>()(str); 70cfa1376aSLouis Dionne } 71cfa1376aSLouis Dionne 72cfa1376aSLouis Dionne #endif // LIBCPP_TEST_SUPPORT_PARSE_INTEGER_H 73