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"
17254721Semaste#include "lldb/Interpreter/Args.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());
26254721Semaste    error = value_sp->SetValueFromCString (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
47254721SemasteOptionValueUInt64::SetValueFromCString (const char *value_cstr, VarSetOperationType op)
48254721Semaste{
49254721Semaste    Error error;
50254721Semaste    switch (op)
51254721Semaste    {
52254721Semaste        case eVarSetOperationClear:
53254721Semaste            Clear ();
54254721Semaste            break;
55254721Semaste
56254721Semaste        case eVarSetOperationReplace:
57254721Semaste        case eVarSetOperationAssign:
58254721Semaste        {
59254721Semaste            bool success = false;
60254721Semaste            uint64_t value = Args::StringToUInt64 (value_cstr, 0, 0, &success);
61254721Semaste            if (success)
62254721Semaste            {
63254721Semaste                m_value_was_set = true;
64254721Semaste                m_current_value = value;
65254721Semaste            }
66254721Semaste            else
67254721Semaste            {
68254721Semaste                error.SetErrorStringWithFormat ("invalid uint64_t string value: '%s'", value_cstr);
69254721Semaste            }
70254721Semaste        }
71254721Semaste            break;
72254721Semaste
73254721Semaste        case eVarSetOperationInsertBefore:
74254721Semaste        case eVarSetOperationInsertAfter:
75254721Semaste        case eVarSetOperationRemove:
76254721Semaste        case eVarSetOperationAppend:
77254721Semaste        case eVarSetOperationInvalid:
78254721Semaste            error = OptionValue::SetValueFromCString (value_cstr, op);
79254721Semaste            break;
80254721Semaste    }
81254721Semaste    return error;
82254721Semaste}
83254721Semaste
84254721Semastelldb::OptionValueSP
85254721SemasteOptionValueUInt64::DeepCopy () const
86254721Semaste{
87254721Semaste    return OptionValueSP(new OptionValueUInt64(*this));
88254721Semaste}
89254721Semaste
90