File Coverage

/usr/include/c++/5/ext/string_conversions.h
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 6 6 100.0


line stmt bran cond sub pod time code
1             // String Conversions -*- C++ -*-
2              
3             // Copyright (C) 2008-2015 Free Software Foundation, Inc.
4             //
5             // This file is part of the GNU ISO C++ Library. This library is free
6             // software; you can redistribute it and/or modify it under the
7             // terms of the GNU General Public License as published by the
8             // Free Software Foundation; either version 3, or (at your option)
9             // any later version.
10              
11             // This library is distributed in the hope that it will be useful,
12             // but WITHOUT ANY WARRANTY; without even the implied warranty of
13             // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14             // GNU General Public License for more details.
15              
16             // Under Section 7 of GPL version 3, you are granted additional
17             // permissions described in the GCC Runtime Library Exception, version
18             // 3.1, as published by the Free Software Foundation.
19              
20             // You should have received a copy of the GNU General Public License and
21             // a copy of the GCC Runtime Library Exception along with this program;
22             // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23             // .
24              
25             /** @file ext/string_conversions.h
26             * This file is a GNU extension to the Standard C++ Library.
27             */
28              
29             #ifndef _STRING_CONVERSIONS_H
30             #define _STRING_CONVERSIONS_H 1
31              
32             #pragma GCC system_header
33              
34             #if __cplusplus < 201103L
35             # include
36             #else
37              
38             #include
39             #include
40             #include
41             #include
42             #include
43             #include
44             #include
45              
46             namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
47             {
48             _GLIBCXX_BEGIN_NAMESPACE_VERSION
49              
50             // Helper for all the sto* functions.
51             template
52             typename... _Base>
53             _Ret
54             __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...),
55             const char* __name, const _CharT* __str, std::size_t* __idx,
56             _Base... __base)
57             {
58             _Ret __ret;
59              
60             _CharT* __endptr;
61             errno = 0;
62             const _TRet __tmp = __convf(__str, &__endptr, __base...);
63              
64             if (__endptr == __str)
65             std::__throw_invalid_argument(__name);
66             else if (errno == ERANGE
67             || (std::__are_same<_Ret, int>::__value
68             && (__tmp < __numeric_traits::__min
69             || __tmp > __numeric_traits::__max)))
70             std::__throw_out_of_range(__name);
71             else
72             __ret = __tmp;
73              
74             if (__idx)
75             *__idx = __endptr - __str;
76              
77             return __ret;
78             }
79              
80             // Helper for the to_string / to_wstring functions.
81             template
82             _String
83 1           __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*,
84             __builtin_va_list), std::size_t __n,
85             const _CharT* __fmt, ...)
86             {
87             // XXX Eventually the result will be constructed in place in
88             // the C++0x string, likely with the help of internal hooks.
89             _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
90 1           * __n));
91              
92             __builtin_va_list __args;
93 1           __builtin_va_start(__args, __fmt);
94              
95 1           const int __len = __convf(__s, __n, __fmt, __args);
96              
97 1           __builtin_va_end(__args);
98              
99 2           return _String(__s, __s + __len);
100             }
101              
102             _GLIBCXX_END_NAMESPACE_VERSION
103             } // namespace
104              
105             #endif // C++11
106              
107             #endif // _STRING_CONVERSIONS_H