1254721Semaste//===-- CommandReturnObject.h -----------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_CommandReturnObject_h_ 11254721Semaste#define liblldb_CommandReturnObject_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste// Other libraries and framework includes 16254721Semaste// Project includes 17254721Semaste#include "lldb/lldb-private.h" 18254721Semaste#include "lldb/Core/STLUtils.h" 19254721Semaste#include "lldb/Core/StreamFile.h" 20254721Semaste#include "lldb/Core/StreamString.h" 21254721Semaste#include "lldb/Core/StreamTee.h" 22254721Semaste 23254721Semastenamespace lldb_private { 24254721Semaste 25254721Semaste 26254721Semasteclass CommandReturnObject 27254721Semaste{ 28254721Semastepublic: 29254721Semaste 30254721Semaste CommandReturnObject (); 31254721Semaste 32254721Semaste ~CommandReturnObject (); 33254721Semaste 34254721Semaste const char * 35254721Semaste GetOutputData () 36254721Semaste { 37254721Semaste lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex)); 38254721Semaste if (stream_sp) 39254721Semaste return static_cast<StreamString *>(stream_sp.get())->GetData(); 40254721Semaste return ""; 41254721Semaste } 42254721Semaste 43254721Semaste const char * 44254721Semaste GetErrorData () 45254721Semaste { 46254721Semaste lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex)); 47254721Semaste if (stream_sp) 48254721Semaste return static_cast<StreamString *>(stream_sp.get())->GetData(); 49254721Semaste else 50254721Semaste return ""; 51254721Semaste } 52254721Semaste 53254721Semaste Stream & 54254721Semaste GetOutputStream () 55254721Semaste { 56254721Semaste // Make sure we at least have our normal string stream output stream 57254721Semaste lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex)); 58254721Semaste if (!stream_sp) 59254721Semaste { 60254721Semaste stream_sp.reset (new StreamString()); 61254721Semaste m_out_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp); 62254721Semaste } 63254721Semaste return m_out_stream; 64254721Semaste } 65254721Semaste 66254721Semaste Stream & 67254721Semaste GetErrorStream () 68254721Semaste { 69254721Semaste // Make sure we at least have our normal string stream output stream 70254721Semaste lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex)); 71254721Semaste if (!stream_sp) 72254721Semaste { 73254721Semaste stream_sp.reset (new StreamString()); 74254721Semaste m_err_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp); 75254721Semaste } 76254721Semaste return m_err_stream; 77254721Semaste } 78254721Semaste 79254721Semaste void 80254721Semaste SetImmediateOutputFile (FILE *fh, bool transfer_fh_ownership = false) 81254721Semaste { 82254721Semaste lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership)); 83254721Semaste m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 84254721Semaste } 85254721Semaste 86254721Semaste void 87254721Semaste SetImmediateErrorFile (FILE *fh, bool transfer_fh_ownership = false) 88254721Semaste { 89254721Semaste lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership)); 90254721Semaste m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 91254721Semaste } 92254721Semaste 93254721Semaste void 94254721Semaste SetImmediateOutputStream (const lldb::StreamSP &stream_sp) 95254721Semaste { 96254721Semaste m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 97254721Semaste } 98254721Semaste 99254721Semaste void 100254721Semaste SetImmediateErrorStream (const lldb::StreamSP &stream_sp) 101254721Semaste { 102254721Semaste m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 103254721Semaste } 104254721Semaste 105254721Semaste lldb::StreamSP 106254721Semaste GetImmediateOutputStream () 107254721Semaste { 108254721Semaste return m_out_stream.GetStreamAtIndex (eImmediateStreamIndex); 109254721Semaste } 110254721Semaste 111254721Semaste lldb::StreamSP 112254721Semaste GetImmediateErrorStream () 113254721Semaste { 114254721Semaste return m_err_stream.GetStreamAtIndex (eImmediateStreamIndex); 115254721Semaste } 116254721Semaste 117254721Semaste void 118254721Semaste Clear(); 119254721Semaste 120254721Semaste void 121254721Semaste AppendMessage (const char *in_string); 122254721Semaste 123254721Semaste void 124254721Semaste AppendMessageWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 125254721Semaste 126254721Semaste void 127254721Semaste AppendRawWarning (const char *in_string); 128254721Semaste 129254721Semaste void 130254721Semaste AppendWarning (const char *in_string); 131254721Semaste 132254721Semaste void 133254721Semaste AppendWarningWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 134254721Semaste 135254721Semaste void 136254721Semaste AppendError (const char *in_string); 137254721Semaste 138254721Semaste void 139254721Semaste AppendRawError (const char *in_string); 140254721Semaste 141254721Semaste void 142254721Semaste AppendErrorWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 143254721Semaste 144254721Semaste void 145254721Semaste SetError (const Error &error, 146254721Semaste const char *fallback_error_cstr = NULL); 147254721Semaste 148254721Semaste void 149254721Semaste SetError (const char *error_cstr); 150254721Semaste 151254721Semaste lldb::ReturnStatus 152254721Semaste GetStatus(); 153254721Semaste 154254721Semaste void 155254721Semaste SetStatus (lldb::ReturnStatus status); 156254721Semaste 157254721Semaste bool 158254721Semaste Succeeded (); 159254721Semaste 160254721Semaste bool 161254721Semaste HasResult (); 162254721Semaste 163254721Semaste bool GetDidChangeProcessState (); 164254721Semaste 165254721Semaste void SetDidChangeProcessState (bool b); 166254721Semaste 167254721Semasteprivate: 168254721Semaste enum 169254721Semaste { 170254721Semaste eStreamStringIndex = 0, 171254721Semaste eImmediateStreamIndex = 1 172254721Semaste }; 173254721Semaste 174254721Semaste StreamTee m_out_stream; 175254721Semaste StreamTee m_err_stream; 176254721Semaste 177254721Semaste lldb::ReturnStatus m_status; 178254721Semaste bool m_did_change_process_state; 179254721Semaste}; 180254721Semaste 181254721Semaste} // namespace lldb_private 182254721Semaste 183254721Semaste#endif // liblldb_CommandReturnObject_h_ 184