blob: 48de433d36c1984f6f67bd92e012583ab27213bb [file] [log] [blame]
Greg Clayton67cc0632012-08-22 17:17:09 +00001//===-- OptionValueUInt64.cpp ------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Interpreter/OptionValueUInt64.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "lldb/Core/Stream.h"
Vince Harron5275aaa2015-01-15 20:08:35 +000017#include "lldb/Host/StringConvert.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000018
19using namespace lldb;
20using namespace lldb_private;
21
22lldb::OptionValueSP
23OptionValueUInt64::Create (const char *value_cstr, Error &error)
24{
25 lldb::OptionValueSP value_sp (new OptionValueUInt64());
26 error = value_sp->SetValueFromCString (value_cstr);
27 if (error.Fail())
28 value_sp.reset();
29 return value_sp;
30}
31
32
33void
34OptionValueUInt64::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
35{
36 if (dump_mask & eDumpOptionType)
37 strm.Printf ("(%s)", GetTypeAsCString ());
38 if (dump_mask & eDumpOptionValue)
39 {
40 if (dump_mask & eDumpOptionType)
41 strm.PutCString (" = ");
Daniel Malead01b2952012-11-29 21:49:15 +000042 strm.Printf ("%" PRIu64, m_current_value);
Greg Clayton67cc0632012-08-22 17:17:09 +000043 }
44}
45
46Error
47OptionValueUInt64::SetValueFromCString (const char *value_cstr, VarSetOperationType op)
48{
49 Error error;
50 switch (op)
51 {
52 case eVarSetOperationClear:
53 Clear ();
Greg Clayton332e8b12015-01-13 21:13:08 +000054 NotifyValueChanged();
Greg Clayton67cc0632012-08-22 17:17:09 +000055 break;
56
57 case eVarSetOperationReplace:
58 case eVarSetOperationAssign:
59 {
60 bool success = false;
Vince Harron5275aaa2015-01-15 20:08:35 +000061 uint64_t value = StringConvert::ToUInt64 (value_cstr, 0, 0, &success);
Greg Clayton67cc0632012-08-22 17:17:09 +000062 if (success)
63 {
64 m_value_was_set = true;
65 m_current_value = value;
Greg Clayton332e8b12015-01-13 21:13:08 +000066 NotifyValueChanged();
Greg Clayton67cc0632012-08-22 17:17:09 +000067 }
68 else
69 {
70 error.SetErrorStringWithFormat ("invalid uint64_t string value: '%s'", value_cstr);
71 }
72 }
73 break;
74
75 case eVarSetOperationInsertBefore:
76 case eVarSetOperationInsertAfter:
77 case eVarSetOperationRemove:
78 case eVarSetOperationAppend:
79 case eVarSetOperationInvalid:
80 error = OptionValue::SetValueFromCString (value_cstr, op);
81 break;
82 }
83 return error;
84}
85
86lldb::OptionValueSP
87OptionValueUInt64::DeepCopy () const
88{
89 return OptionValueSP(new OptionValueUInt64(*this));
90}
91