CommandReturnObject.h [plain text]
#ifndef liblldb_CommandReturnObject_h_
#define liblldb_CommandReturnObject_h_
#include "lldb/lldb-private.h"
#include "lldb/Core/STLUtils.h"
#include "lldb/Core/StreamFile.h"
#include "lldb/Core/StreamString.h"
#include "lldb/Core/StreamTee.h"
namespace lldb_private {
class CommandReturnObject
{
public:
CommandReturnObject ();
~CommandReturnObject ();
const char *
GetOutputData ()
{
lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex));
if (stream_sp)
return static_cast<StreamString *>(stream_sp.get())->GetData();
return "";
}
const char *
GetErrorData ()
{
lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex));
if (stream_sp)
return static_cast<StreamString *>(stream_sp.get())->GetData();
else
return "";
}
Stream &
GetOutputStream ()
{
lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex));
if (!stream_sp)
{
stream_sp.reset (new StreamString());
m_out_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp);
}
return m_out_stream;
}
Stream &
GetErrorStream ()
{
lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex));
if (!stream_sp)
{
stream_sp.reset (new StreamString());
m_err_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp);
}
return m_err_stream;
}
void
SetImmediateOutputFile (FILE *fh, bool transfer_fh_ownership = false)
{
lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership));
m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
}
void
SetImmediateErrorFile (FILE *fh, bool transfer_fh_ownership = false)
{
lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership));
m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
}
void
SetImmediateOutputStream (const lldb::StreamSP &stream_sp)
{
m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
}
void
SetImmediateErrorStream (const lldb::StreamSP &stream_sp)
{
m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
}
lldb::StreamSP
GetImmediateOutputStream ()
{
return m_out_stream.GetStreamAtIndex (eImmediateStreamIndex);
}
lldb::StreamSP
GetImmediateErrorStream ()
{
return m_err_stream.GetStreamAtIndex (eImmediateStreamIndex);
}
void
Clear();
void
AppendMessage (const char *in_string, int len = -1);
void
AppendMessageWithFormat (const char *format, ...);
void
AppendRawWarning (const char *in_string, int len = -1);
void
AppendWarning (const char *in_string, int len = -1);
void
AppendWarningWithFormat (const char *format, ...);
void
AppendError (const char *in_string, int len = -1);
void
AppendRawError (const char *in_string, int len = -1);
void
AppendErrorWithFormat (const char *format, ...);
lldb::ReturnStatus
GetStatus();
void
SetStatus (lldb::ReturnStatus status);
bool
Succeeded ();
bool
HasResult ();
bool GetDidChangeProcessState ();
void SetDidChangeProcessState (bool b);
private:
enum
{
eStreamStringIndex = 0,
eImmediateStreamIndex = 1
};
StreamTee m_out_stream;
StreamTee m_err_stream;
lldb::ReturnStatus m_status;
bool m_did_change_process_state;
};
}
#endif // liblldb_CommandReturnObject_h_