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