blob: 24e43cbd3b458dc0e894a1bb22e2650079fb92f6 [file] [log] [blame]
//===-- CommandObject.h -----------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_CommandObject_h_
#define liblldb_CommandObject_h_
#include <map>
#include <set>
#include <string>
#include <vector>
#include "lldb/lldb-private.h"
#include "lldb/Interpreter/Args.h"
#include "lldb/Core/StringList.h"
#include "lldb/Core/Flags.h"
namespace lldb_private {
class CommandObject
{
public:
typedef std::map<std::string, lldb::CommandObjectSP> CommandMap;
CommandObject (const char *name,
const char *help = NULL,
const char *syntax = NULL,
uint32_t flags = 0);
virtual
~CommandObject ();
const char *
GetHelp ();
const char *
GetHelpLong ();
const char *
GetSyntax ();
const char *
Translate ();
const char *
GetCommandName ();
void
SetHelp (const char * str);
void
SetHelpLong (const char * str);
void
SetSyntax (const char *str);
virtual void
AddObject (const char *obj_name) {}
virtual bool
IsCrossRefObject () { return false; }
virtual bool
IsMultiwordObject () { return false; }
virtual bool
WantsRawCommandString() { return false; }
virtual Options *
GetOptions ();
enum
{
eFlagProcessMustBeLaunched = (1 << 0),
eFlagProcessMustBePaused = (1 << 1)
};
// Do not override this
bool
ExecuteCommandString (CommandInterpreter &interpreter,
const char *command,
CommandReturnObject &result);
bool
ParseOptions (CommandInterpreter &interpreter,
Args& args,
CommandReturnObject &result);
bool
ExecuteWithOptions (CommandInterpreter &interpreter,
Args& command,
CommandReturnObject &result);
virtual bool
ExecuteRawCommandString (CommandInterpreter &interpreter,
const char *command,
CommandReturnObject &result)
{
return false;
}
virtual bool
Execute (CommandInterpreter &interpreter,
Args& command,
CommandReturnObject &result) = 0;
void
SetCommandName (const char *name);
// This function really deals with CommandObjectLists, but we didn't make a
// CommandObjectList class, so I'm sticking it here. But we really should have
// such a class. Anyway, it looks up the commands in the map that match the partial
// string cmd_str, inserts the matches into matches, and returns the number added.
static int
AddNamesMatchingPartialString (CommandMap &in_map, const char *cmd_str, StringList &matches);
// The input array contains a parsed version of the line. The insertion
// point is given by cursor_index (the index in input of the word containing
// the cursor) and cursor_char_position (the position of the cursor in that word.)
// This default version handles calling option argument completions and then calls
// HandleArgumentCompletion if the cursor is on an argument, not an option.
// Don't override this method, override HandleArgumentCompletion instead unless
// you have special reasons.
virtual int
HandleCompletion (CommandInterpreter &interpreter,
Args &input,
int &cursor_index,
int &cursor_char_position,
int match_start_point,
int max_return_elements,
StringList &matches);
// The input array contains a parsed version of the line. The insertion
// point is given by cursor_index (the index in input of the word containing
// the cursor) and cursor_char_position (the position of the cursor in that word.)
// We've constructed the map of options and their arguments as well if that is
// helpful for the completion.
virtual int
HandleArgumentCompletion (CommandInterpreter &interpreter,
Args &input,
int &cursor_index,
int &cursor_char_position,
OptionElementVector &opt_element_vector,
int match_start_point,
int max_return_elements,
StringList &matches)
{
return 0;
}
bool
HelpTextContainsWord (const char *search_word);
//------------------------------------------------------------------
/// The flags accessor.
///
/// @return
/// A reference to the Flags member variable.
//------------------------------------------------------------------
Flags&
GetFlags();
//------------------------------------------------------------------
/// The flags const accessor.
///
/// @return
/// A const reference to the Flags member variable.
//------------------------------------------------------------------
const Flags&
GetFlags() const;
protected:
std::string m_cmd_name;
std::string m_cmd_help_short;
std::string m_cmd_help_long;
std::string m_cmd_syntax;
Flags m_flags;
};
} // namespace lldb_private
#endif // liblldb_CommandObject_h_