MCPcopy Create free account
hub / github.com/chen3feng/toft / ParseNumberT

Function ParseNumberT

base/string/number.cpp:75–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73
74template <typename IntermediaType, typename T>
75bool ParseNumberT(const char* str, T* value, char** endptr, int base)
76{
77 TOFT_STATIC_ASSERT(std::is_signed<T>::value ==
78 std::is_signed<IntermediaType>::value);
79 TOFT_STATIC_ASSERT(sizeof(T) <= sizeof(IntermediaType));
80
81 char* tmp_endptr;
82 if (endptr == NULL) // Allow NULL endptr
83 endptr = &tmp_endptr;
84
85 int old_errno = errno;
86 errno = 0;
87 IntermediaType number = StringToNumber<IntermediaType>::Convert(str, endptr, base);
88 if (errno != 0)
89 return false;
90
91 if (sizeof(T) < sizeof(IntermediaType) &&
92 (number > std::numeric_limits<T>::max() || number < std::numeric_limits<T>::min()))
93 {
94 errno = ERANGE;
95 return false;
96 }
97
98 if (*endptr == str)
99 {
100 errno = EINVAL;
101 return false;
102 }
103
104 errno = old_errno;
105 *value = static_cast<T>(number);
106 return true;
107}
108
109} // namespace
110

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected