1314564Sdim//===-- OptionValueUInt64.cpp ------------------------------------*- C++ 2314564Sdim//-*-===// 3254721Semaste// 4353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5353358Sdim// See https://llvm.org/LICENSE.txt for license information. 6353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/Interpreter/OptionValueUInt64.h" 11254721Semaste 12288943Sdim#include "lldb/Host/StringConvert.h" 13321369Sdim#include "lldb/Utility/Stream.h" 14254721Semaste 15254721Semasteusing namespace lldb; 16254721Semasteusing namespace lldb_private; 17254721Semaste 18314564Sdimlldb::OptionValueSP OptionValueUInt64::Create(llvm::StringRef value_str, 19321369Sdim Status &error) { 20314564Sdim lldb::OptionValueSP value_sp(new OptionValueUInt64()); 21314564Sdim error = value_sp->SetValueFromString(value_str); 22314564Sdim if (error.Fail()) 23314564Sdim value_sp.reset(); 24314564Sdim return value_sp; 25254721Semaste} 26254721Semaste 27314564Sdimvoid OptionValueUInt64::DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 28314564Sdim uint32_t dump_mask) { 29314564Sdim if (dump_mask & eDumpOptionType) 30314564Sdim strm.Printf("(%s)", GetTypeAsCString()); 31314564Sdim if (dump_mask & eDumpOptionValue) { 32254721Semaste if (dump_mask & eDumpOptionType) 33314564Sdim strm.PutCString(" = "); 34314564Sdim strm.Printf("%" PRIu64, m_current_value); 35314564Sdim } 36254721Semaste} 37254721Semaste 38321369SdimStatus OptionValueUInt64::SetValueFromString(llvm::StringRef value_ref, 39321369Sdim VarSetOperationType op) { 40321369Sdim Status error; 41314564Sdim switch (op) { 42314564Sdim case eVarSetOperationClear: 43314564Sdim Clear(); 44314564Sdim NotifyValueChanged(); 45314564Sdim break; 46314564Sdim 47314564Sdim case eVarSetOperationReplace: 48314564Sdim case eVarSetOperationAssign: { 49314564Sdim bool success = false; 50314564Sdim std::string value_str = value_ref.trim().str(); 51314564Sdim uint64_t value = StringConvert::ToUInt64(value_str.c_str(), 0, 0, &success); 52314564Sdim if (success) { 53314564Sdim m_value_was_set = true; 54314564Sdim m_current_value = value; 55314564Sdim NotifyValueChanged(); 56314564Sdim } else { 57314564Sdim error.SetErrorStringWithFormat("invalid uint64_t string value: '%s'", 58314564Sdim value_str.c_str()); 59254721Semaste } 60314564Sdim } break; 61314564Sdim 62314564Sdim case eVarSetOperationInsertBefore: 63314564Sdim case eVarSetOperationInsertAfter: 64314564Sdim case eVarSetOperationRemove: 65314564Sdim case eVarSetOperationAppend: 66314564Sdim case eVarSetOperationInvalid: 67314564Sdim error = OptionValue::SetValueFromString(value_ref, op); 68314564Sdim break; 69314564Sdim } 70314564Sdim return error; 71254721Semaste} 72254721Semaste 73314564Sdimlldb::OptionValueSP OptionValueUInt64::DeepCopy() const { 74314564Sdim return OptionValueSP(new OptionValueUInt64(*this)); 75254721Semaste} 76