xref: /llvm-project/lldb/tools/debugserver/source/StringConvert.cpp (revision 9da2fa277e818e94e45b836a3d416623c838e02a)
1*9da2fa27SMichał Górny //===-- StringConvert.cpp -------------------------------------------------===//
2*9da2fa27SMichał Górny //
3*9da2fa27SMichał Górny // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*9da2fa27SMichał Górny // See https://llvm.org/LICENSE.txt for license information.
5*9da2fa27SMichał Górny // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*9da2fa27SMichał Górny //
7*9da2fa27SMichał Górny //===----------------------------------------------------------------------===//
8*9da2fa27SMichał Górny 
9*9da2fa27SMichał Górny #include <cstdlib>
10*9da2fa27SMichał Górny 
11*9da2fa27SMichał Górny #include "StringConvert.h"
12*9da2fa27SMichał Górny 
13*9da2fa27SMichał Górny namespace StringConvert {
14*9da2fa27SMichał Górny 
ToSInt64(const char * s,int64_t fail_value,int base,bool * success_ptr)15*9da2fa27SMichał Górny int64_t ToSInt64(const char *s, int64_t fail_value, int base,
16*9da2fa27SMichał Górny                  bool *success_ptr) {
17*9da2fa27SMichał Górny   if (s && s[0]) {
18*9da2fa27SMichał Górny     char *end = nullptr;
19*9da2fa27SMichał Górny     int64_t uval = ::strtoll(s, &end, base);
20*9da2fa27SMichał Górny     if (*end == '\0') {
21*9da2fa27SMichał Górny       if (success_ptr)
22*9da2fa27SMichał Górny         *success_ptr = true;
23*9da2fa27SMichał Górny       return uval; // All characters were used, return the result
24*9da2fa27SMichał Górny     }
25*9da2fa27SMichał Górny   }
26*9da2fa27SMichał Górny   if (success_ptr)
27*9da2fa27SMichał Górny     *success_ptr = false;
28*9da2fa27SMichał Górny   return fail_value;
29*9da2fa27SMichał Górny }
30*9da2fa27SMichał Górny 
ToUInt64(const char * s,uint64_t fail_value,int base,bool * success_ptr)31*9da2fa27SMichał Górny uint64_t ToUInt64(const char *s, uint64_t fail_value, int base,
32*9da2fa27SMichał Górny                   bool *success_ptr) {
33*9da2fa27SMichał Górny   if (s && s[0]) {
34*9da2fa27SMichał Górny     char *end = nullptr;
35*9da2fa27SMichał Górny     uint64_t uval = ::strtoull(s, &end, base);
36*9da2fa27SMichał Górny     if (*end == '\0') {
37*9da2fa27SMichał Górny       if (success_ptr)
38*9da2fa27SMichał Górny         *success_ptr = true;
39*9da2fa27SMichał Górny       return uval; // All characters were used, return the result
40*9da2fa27SMichał Górny     }
41*9da2fa27SMichał Górny   }
42*9da2fa27SMichał Górny   if (success_ptr)
43*9da2fa27SMichał Górny     *success_ptr = false;
44*9da2fa27SMichał Górny   return fail_value;
45*9da2fa27SMichał Górny }
46*9da2fa27SMichał Górny 
ToDouble(const char * s,double fail_value,bool * success_ptr)47*9da2fa27SMichał Górny double ToDouble(const char *s, double fail_value, bool *success_ptr) {
48*9da2fa27SMichał Górny   if (s && s[0]) {
49*9da2fa27SMichał Górny     char *end = nullptr;
50*9da2fa27SMichał Górny     double val = strtod(s, &end);
51*9da2fa27SMichał Górny     if (*end == '\0') {
52*9da2fa27SMichał Górny       if (success_ptr)
53*9da2fa27SMichał Górny         *success_ptr = true;
54*9da2fa27SMichał Górny       return val; // All characters were used, return the result
55*9da2fa27SMichał Górny     }
56*9da2fa27SMichał Górny   }
57*9da2fa27SMichał Górny   if (success_ptr)
58*9da2fa27SMichał Górny     *success_ptr = false;
59*9da2fa27SMichał Górny   return fail_value;
60*9da2fa27SMichał Górny }
61*9da2fa27SMichał Górny 
62*9da2fa27SMichał Górny } // namespace StringConvert
63