124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectRegexCommand.h -----------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_CommandObjectRegexCommand_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_CommandObjectRegexCommand_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/RegularExpression.h"
20d12aeab33bab559e138307f599077da3918a3238Greg Clayton#include "lldb/Interpreter/CommandObject.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectRegexCommand
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectRegexCommand : public CommandObjectRaw
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectRegexCommand (CommandInterpreter &interpreter,
33238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                               const char *name,
34238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                               const char *help,
35238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                               const char *syntax,
36f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                               uint32_t max_matches,
37f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                               uint32_t completion_type_mask = 0);
38238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectRegexCommand ();
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddRegexCommand (const char *re_cstr, const char *command_cstr);
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45d12aeab33bab559e138307f599077da3918a3238Greg Clayton    bool
46d12aeab33bab559e138307f599077da3918a3238Greg Clayton    HasRegexEntries () const
47d12aeab33bab559e138307f599077da3918a3238Greg Clayton    {
48d12aeab33bab559e138307f599077da3918a3238Greg Clayton        return !m_entries.empty();
49d12aeab33bab559e138307f599077da3918a3238Greg Clayton    }
50f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton
51f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton    virtual int
52f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton    HandleCompletion (Args &input,
53f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      int &cursor_index,
54f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      int &cursor_char_position,
55f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      int match_start_point,
56f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      int max_return_elements,
57f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      bool &word_complete,
58f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton                      StringList &matches);
59d12aeab33bab559e138307f599077da3918a3238Greg Clayton
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
61da26bd203cbb104291b39891febf7481794f205fJim Ingham    virtual bool
62da26bd203cbb104291b39891febf7481794f205fJim Ingham    DoExecute (const char *command, CommandReturnObject &result);
63da26bd203cbb104291b39891febf7481794f205fJim Ingham
64f8e98a6e4560c632a9c0373abee247e747097845Greg Clayton    struct Entry
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        RegularExpression regex;
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        std::string command;
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::list<Entry> EntryCollection;
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const uint32_t m_max_matches;
72f3c65b85caf3e097654f6b59c9a709507adfc254Greg Clayton    const uint32_t m_completion_type_mask;
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    EntryCollection m_entries;
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (CommandObjectRegexCommand);
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_CommandObjectRegexCommand_h_
82