OptionValueUInt64.cpp revision 288943
1254721Semaste//===-- OptionValueUInt64.cpp ------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/Interpreter/OptionValueUInt64.h"
11254721Semaste
12254721Semaste// C Includes
13254721Semaste// C++ Includes
14254721Semaste// Other libraries and framework includes
15254721Semaste// Project includes
16254721Semaste#include "lldb/Core/Stream.h"
17288943Sdim#include "lldb/Host/StringConvert.h"
18254721Semaste
19254721Semasteusing namespace lldb;
20254721Semasteusing namespace lldb_private;
21254721Semaste
22254721Semastelldb::OptionValueSP
23254721SemasteOptionValueUInt64::Create (const char *value_cstr, Error &error)
24254721Semaste{
25254721Semaste    lldb::OptionValueSP value_sp (new OptionValueUInt64());
26288943Sdim    error = value_sp->SetValueFromString (value_cstr);
27254721Semaste    if (error.Fail())
28254721Semaste        value_sp.reset();
29254721Semaste    return value_sp;
30254721Semaste}
31254721Semaste
32254721Semaste
33254721Semastevoid
34254721SemasteOptionValueUInt64::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
35254721Semaste{
36254721Semaste    if (dump_mask & eDumpOptionType)
37254721Semaste        strm.Printf ("(%s)", GetTypeAsCString ());
38254721Semaste    if (dump_mask & eDumpOptionValue)
39254721Semaste    {
40254721Semaste        if (dump_mask & eDumpOptionType)
41254721Semaste            strm.PutCString (" = ");
42254721Semaste        strm.Printf ("%" PRIu64, m_current_value);
43254721Semaste    }
44254721Semaste}
45254721Semaste
46254721SemasteError
47288943SdimOptionValueUInt64::SetValueFromString (llvm::StringRef value_ref, VarSetOperationType op)
48254721Semaste{
49254721Semaste    Error error;
50254721Semaste    switch (op)
51254721Semaste    {
52254721Semaste        case eVarSetOperationClear:
53254721Semaste            Clear ();
54280031Sdim            NotifyValueChanged();
55254721Semaste            break;
56254721Semaste
57254721Semaste        case eVarSetOperationReplace:
58254721Semaste        case eVarSetOperationAssign:
59254721Semaste        {
60254721Semaste            bool success = false;
61288943Sdim            std::string value_str = value_ref.trim().str();
62288943Sdim            uint64_t value = StringConvert::ToUInt64 (value_str.c_str(), 0, 0, &success);
63254721Semaste            if (success)
64254721Semaste            {
65254721Semaste                m_value_was_set = true;
66254721Semaste                m_current_value = value;
67280031Sdim                NotifyValueChanged();
68254721Semaste            }
69254721Semaste            else
70254721Semaste            {
71288943Sdim                error.SetErrorStringWithFormat ("invalid uint64_t string value: '%s'", value_str.c_str());
72254721Semaste            }
73254721Semaste        }
74254721Semaste            break;
75254721Semaste
76254721Semaste        case eVarSetOperationInsertBefore:
77254721Semaste        case eVarSetOperationInsertAfter:
78254721Semaste        case eVarSetOperationRemove:
79254721Semaste        case eVarSetOperationAppend:
80254721Semaste        case eVarSetOperationInvalid:
81288943Sdim            error = OptionValue::SetValueFromString (value_ref, op);
82254721Semaste            break;
83254721Semaste    }
84254721Semaste    return error;
85254721Semaste}
86254721Semaste
87254721Semastelldb::OptionValueSP
88254721SemasteOptionValueUInt64::DeepCopy () const
89254721Semaste{
90254721Semaste    return OptionValueSP(new OptionValueUInt64(*this));
91254721Semaste}
92254721Semaste
93