blob: 4db5a99ca3a489110b20f691d72d3eccdf17cabd [file] [log] [blame]
Greg Clayton73844aa2012-08-22 17:17:09 +00001//===-- OptionValueUUID.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/OptionValueUUID.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
Greg Clayton437b5bc2012-09-27 22:26:11 +000016#include "lldb/Core/Module.h"
Greg Clayton73844aa2012-08-22 17:17:09 +000017#include "lldb/Core/Stream.h"
Greg Clayton437b5bc2012-09-27 22:26:11 +000018#include "lldb/Core/StringList.h"
19#include "lldb/Interpreter/CommandInterpreter.h"
Greg Clayton73844aa2012-08-22 17:17:09 +000020
21using namespace lldb;
22using namespace lldb_private;
23
24void
25OptionValueUUID::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
26{
27 if (dump_mask & eDumpOptionType)
28 strm.Printf ("(%s)", GetTypeAsCString ());
29 if (dump_mask & eDumpOptionValue)
30 {
31 if (dump_mask & eDumpOptionType)
32 strm.PutCString (" = ");
33 m_uuid.Dump (&strm);
34 }
35}
36
37Error
38OptionValueUUID::SetValueFromCString (const char *value_cstr,
39 VarSetOperationType op)
40{
41 Error error;
42 switch (op)
43 {
44 case eVarSetOperationClear:
45 Clear();
46 break;
47
48 case eVarSetOperationReplace:
49 case eVarSetOperationAssign:
50 {
Greg Clayton437b5bc2012-09-27 22:26:11 +000051 if (m_uuid.SetFromCString(value_cstr) == 0)
Greg Clayton73844aa2012-08-22 17:17:09 +000052 error.SetErrorStringWithFormat ("invalid uuid string value '%s'", value_cstr);
53 else
54 m_value_was_set = true;
55 }
56 break;
57
58 case eVarSetOperationInsertBefore:
59 case eVarSetOperationInsertAfter:
60 case eVarSetOperationRemove:
61 case eVarSetOperationAppend:
62 case eVarSetOperationInvalid:
63 error = OptionValue::SetValueFromCString (value_cstr, op);
64 break;
65 }
66 return error;
67}
68
69lldb::OptionValueSP
70OptionValueUUID::DeepCopy () const
71{
72 return OptionValueSP(new OptionValueUUID(*this));
73}
Greg Clayton437b5bc2012-09-27 22:26:11 +000074
75size_t
76OptionValueUUID::AutoComplete (CommandInterpreter &interpreter,
77 const char *s,
78 int match_start_point,
79 int max_return_elements,
80 bool &word_complete,
81 StringList &matches)
82{
83 word_complete = false;
84 matches.Clear();
85 ExecutionContext exe_ctx(interpreter.GetExecutionContext());
86 Target *target = exe_ctx.GetTargetPtr();
87 if (target)
88 {
89 const size_t num_modules = target->GetImages().GetSize();
90 if (num_modules > 0)
91 {
92 char uuid_cstr[64];
93 UUID::ValueType uuid_bytes;
94 const size_t num_bytes_decoded = UUID::DecodeUUIDBytesFromCString(s, uuid_bytes, NULL);
95 for (size_t i=0; i<num_modules; ++i)
96 {
97 ModuleSP module_sp (target->GetImages().GetModuleAtIndex(i));
98 if (module_sp)
99 {
100 const UUID &module_uuid = module_sp->GetUUID();
101 if (module_uuid.IsValid())
102 {
103 bool add_uuid = false;
104 if (num_bytes_decoded == 0)
105 add_uuid = true;
106 else
107 add_uuid = ::memcmp(module_uuid.GetBytes(), uuid_bytes, num_bytes_decoded) == 0;
108 if (add_uuid)
109 {
110 if (module_uuid.GetAsCString(uuid_cstr, sizeof(uuid_cstr)))
111 matches.AppendString(uuid_cstr);
112 }
113 }
114 }
115 }
116 }
117 }
118 return matches.GetSize();
119}
120