1//====-- UserSettingsController.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/lldb-python.h"
11
12#include <string.h>
13#include <algorithm>
14
15#include "lldb/Core/UserSettingsController.h"
16#include "lldb/Core/Error.h"
17#include "lldb/Core/RegularExpression.h"
18#include "lldb/Core/Stream.h"
19#include "lldb/Core/StreamString.h"
20#include "lldb/Interpreter/CommandInterpreter.h"
21#include "lldb/Interpreter/OptionValueString.h"
22
23using namespace lldb;
24using namespace lldb_private;
25
26
27lldb::OptionValueSP
28Properties::GetPropertyValue (const ExecutionContext *exe_ctx,
29                              const char *path,
30                              bool will_modify,
31                              Error &error) const
32{
33    OptionValuePropertiesSP properties_sp (GetValueProperties ());
34    if (properties_sp)
35        return properties_sp->GetSubValue(exe_ctx, path, will_modify, error);
36    return lldb::OptionValueSP();
37}
38
39Error
40Properties::SetPropertyValue (const ExecutionContext *exe_ctx,
41                              VarSetOperationType op,
42                              const char *path,
43                              const char *value)
44{
45    OptionValuePropertiesSP properties_sp (GetValueProperties ());
46    if (properties_sp)
47        return properties_sp->SetSubValue(exe_ctx, op, path, value);
48    Error error;
49    error.SetErrorString ("no properties");
50    return error;
51}
52
53void
54Properties::DumpAllPropertyValues (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask)
55{
56    OptionValuePropertiesSP properties_sp (GetValueProperties ());
57    if (properties_sp)
58        return properties_sp->DumpValue (exe_ctx, strm, dump_mask);
59}
60
61void
62Properties::DumpAllDescriptions (CommandInterpreter &interpreter,
63                                 Stream &strm) const
64{
65    strm.PutCString("Top level variables:\n\n");
66
67    OptionValuePropertiesSP properties_sp (GetValueProperties ());
68    if (properties_sp)
69        return properties_sp->DumpAllDescriptions (interpreter, strm);
70}
71
72
73
74Error
75Properties::DumpPropertyValue (const ExecutionContext *exe_ctx, Stream &strm, const char *property_path, uint32_t dump_mask)
76{
77    OptionValuePropertiesSP properties_sp (GetValueProperties ());
78    if (properties_sp)
79    {
80        return properties_sp->DumpPropertyValue (exe_ctx,
81                                                 strm,
82                                                 property_path,
83                                                 dump_mask);
84    }
85    Error error;
86    error.SetErrorString("empty property list");
87    return error;
88}
89
90size_t
91Properties::Apropos (const char *keyword, std::vector<const Property *> &matching_properties) const
92{
93    OptionValuePropertiesSP properties_sp (GetValueProperties ());
94    if (properties_sp)
95    {
96        properties_sp->Apropos (keyword, matching_properties);
97    }
98    return matching_properties.size();
99}
100
101
102lldb::OptionValuePropertiesSP
103Properties::GetSubProperty (const ExecutionContext *exe_ctx,
104                            const ConstString &name)
105{
106    OptionValuePropertiesSP properties_sp (GetValueProperties ());
107    if (properties_sp)
108        return properties_sp->GetSubProperty (exe_ctx, name);
109    return lldb::OptionValuePropertiesSP();
110}
111
112