63 lines · cpp
1//===-- StringConvert.cpp -------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include <cstdlib>10 11#include "StringConvert.h"12 13namespace StringConvert {14 15int64_t ToSInt64(const char *s, int64_t fail_value, int base,16 bool *success_ptr) {17 if (s && s[0]) {18 char *end = nullptr;19 int64_t uval = ::strtoll(s, &end, base);20 if (*end == '\0') {21 if (success_ptr)22 *success_ptr = true;23 return uval; // All characters were used, return the result24 }25 }26 if (success_ptr)27 *success_ptr = false;28 return fail_value;29}30 31uint64_t ToUInt64(const char *s, uint64_t fail_value, int base,32 bool *success_ptr) {33 if (s && s[0]) {34 char *end = nullptr;35 uint64_t uval = ::strtoull(s, &end, base);36 if (*end == '\0') {37 if (success_ptr)38 *success_ptr = true;39 return uval; // All characters were used, return the result40 }41 }42 if (success_ptr)43 *success_ptr = false;44 return fail_value;45}46 47double ToDouble(const char *s, double fail_value, bool *success_ptr) {48 if (s && s[0]) {49 char *end = nullptr;50 double val = strtod(s, &end);51 if (*end == '\0') {52 if (success_ptr)53 *success_ptr = true;54 return val; // All characters were used, return the result55 }56 }57 if (success_ptr)58 *success_ptr = false;59 return fail_value;60}61 62} // namespace StringConvert63