CommandObjectMultiword.h revision 035ef3d0a0136f2b9028b4695a681e58ba899651
1//===-- CommandObjectMultiword.h --------------------------------*- 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#ifndef liblldb_CommandObjectMultiword_h_
11#define liblldb_CommandObjectMultiword_h_
12
13// C Includes
14// C++ Includes
15#include <map>
16
17// Other libraries and framework includes
18// Project includes
19#include "lldb/Interpreter/CommandObject.h"
20
21namespace lldb_private {
22
23//-------------------------------------------------------------------------
24// CommandObjectMultiword
25//-------------------------------------------------------------------------
26
27class CommandObjectMultiword : public CommandObject
28{
29// These two want to iterate over the subcommand dictionary.
30friend class CommandInterpreter;
31friend class CommandObjectSyntax;
32public:
33    CommandObjectMultiword (CommandInterpreter &interpreter,
34                            const char *name,
35                            const char *help = NULL,
36                            const char *syntax = NULL,
37                            uint32_t flags = 0);
38
39    virtual
40    ~CommandObjectMultiword ();
41
42    virtual bool
43    IsMultiwordObject () { return true; }
44
45    virtual bool
46    LoadSubCommand (const char *cmd_name,
47                    const lldb::CommandObjectSP& command_obj);
48
49    virtual void
50    GenerateHelpText (Stream &output_stream);
51
52    virtual lldb::CommandObjectSP
53    GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL);
54
55    virtual CommandObject *
56    GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL);
57
58    virtual void
59    AproposAllSubCommands (const char *prefix,
60                           const char *search_word,
61                           StringList &commands_found,
62                           StringList &commands_help);
63
64    virtual bool
65    WantsRawCommandString() { return false; };
66
67    virtual int
68    HandleCompletion (Args &input,
69                      int &cursor_index,
70                      int &cursor_char_position,
71                      int match_start_point,
72                      int max_return_elements,
73                      bool &word_complete,
74                      StringList &matches);
75
76    virtual const char *GetRepeatCommand (Args &current_command_args, uint32_t index);
77
78    virtual bool
79    Execute (const char *args_string,
80             CommandReturnObject &result);
81
82    virtual bool
83    IsRemovable() const { return m_can_be_removed; }
84
85    void
86    SetRemovable (bool removable)
87    {
88        m_can_be_removed = removable;
89    }
90
91protected:
92
93    CommandObject::CommandMap m_subcommand_dict;
94    bool m_can_be_removed;
95};
96
97
98class CommandObjectProxy : public CommandObject
99{
100public:
101    CommandObjectProxy (CommandInterpreter &interpreter,
102                        const char *name,
103                        const char *help = NULL,
104                        const char *syntax = NULL,
105                        uint32_t flags = 0);
106
107    virtual
108    ~CommandObjectProxy ();
109
110    // Subclasses must provide a command object that will be transparently
111    // used for this object.
112    virtual CommandObject *
113    GetProxyCommandObject() = 0;
114
115    virtual const char *
116    GetHelpLong ();
117
118    virtual bool
119    IsRemovable() const;
120
121    virtual bool
122    IsMultiwordObject ();
123
124    virtual lldb::CommandObjectSP
125    GetSubcommandSP (const char *sub_cmd, StringList *matches = NULL);
126
127    virtual CommandObject *
128    GetSubcommandObject (const char *sub_cmd, StringList *matches = NULL);
129
130    virtual void
131    AproposAllSubCommands (const char *prefix,
132                           const char *search_word,
133                           StringList &commands_found,
134                           StringList &commands_help);
135
136    virtual bool
137    LoadSubCommand (const char *cmd_name,
138                    const lldb::CommandObjectSP& command_obj);
139
140    virtual bool
141    WantsRawCommandString();
142
143    virtual bool
144    WantsCompletion();
145
146    virtual Options *
147    GetOptions ();
148
149
150    virtual int
151    HandleCompletion (Args &input,
152                      int &cursor_index,
153                      int &cursor_char_position,
154                      int match_start_point,
155                      int max_return_elements,
156                      bool &word_complete,
157                      StringList &matches);
158
159    virtual int
160    HandleArgumentCompletion (Args &input,
161                              int &cursor_index,
162                              int &cursor_char_position,
163                              OptionElementVector &opt_element_vector,
164                              int match_start_point,
165                              int max_return_elements,
166                              bool &word_complete,
167                              StringList &matches);
168
169    virtual const char *
170    GetRepeatCommand (Args &current_command_args,
171                      uint32_t index);
172
173    virtual bool
174    Execute (const char *args_string,
175             CommandReturnObject &result);
176
177protected:
178
179    // These two want to iterate over the subcommand dictionary.
180    friend class CommandInterpreter;
181    friend class CommandObjectSyntax;
182
183};
184
185} // namespace lldb_private
186
187#endif  // liblldb_CommandObjectMultiword_h_
188