CommandReturnObject.h revision 26bc105b1882a78de609d46d148ad2b5c4d50656
1//===-- CommandReturnObject.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_CommandReturnObject_h_ 11#define liblldb_CommandReturnObject_h_ 12 13// C Includes 14// C++ Includes 15// Other libraries and framework includes 16// Project includes 17#include "lldb/lldb-private.h" 18#include "lldb/Core/STLUtils.h" 19#include "lldb/Core/StreamFile.h" 20#include "lldb/Core/StreamString.h" 21#include "lldb/Core/StreamTee.h" 22 23namespace lldb_private { 24 25 26class CommandReturnObject 27{ 28public: 29 30 CommandReturnObject (); 31 32 ~CommandReturnObject (); 33 34 const char * 35 GetOutputData () 36 { 37 lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex)); 38 if (stream_sp) 39 return static_cast<StreamString *>(stream_sp.get())->GetData(); 40 return ""; 41 } 42 43 const char * 44 GetErrorData () 45 { 46 lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex)); 47 if (stream_sp) 48 return static_cast<StreamString *>(stream_sp.get())->GetData(); 49 else 50 return ""; 51 } 52 53 Stream & 54 GetOutputStream () 55 { 56 // Make sure we at least have our normal string stream output stream 57 lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex)); 58 if (!stream_sp) 59 { 60 stream_sp.reset (new StreamString()); 61 m_out_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp); 62 } 63 return m_out_stream; 64 } 65 66 Stream & 67 GetErrorStream () 68 { 69 // Make sure we at least have our normal string stream output stream 70 lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex)); 71 if (!stream_sp) 72 { 73 stream_sp.reset (new StreamString()); 74 m_err_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp); 75 } 76 return m_err_stream; 77 } 78 79 void 80 SetImmediateOutputFile (FILE *fh, bool transfer_fh_ownership = false) 81 { 82 lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership)); 83 m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 84 } 85 86 void 87 SetImmediateErrorFile (FILE *fh, bool transfer_fh_ownership = false) 88 { 89 lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership)); 90 m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 91 } 92 93 void 94 SetImmediateOutputStream (const lldb::StreamSP &stream_sp) 95 { 96 m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 97 } 98 99 void 100 SetImmediateErrorStream (const lldb::StreamSP &stream_sp) 101 { 102 m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp); 103 } 104 105 lldb::StreamSP 106 GetImmediateOutputStream () 107 { 108 return m_out_stream.GetStreamAtIndex (eImmediateStreamIndex); 109 } 110 111 lldb::StreamSP 112 GetImmediateErrorStream () 113 { 114 return m_err_stream.GetStreamAtIndex (eImmediateStreamIndex); 115 } 116 117 void 118 Clear(); 119 120 void 121 AppendMessage (const char *in_string); 122 123 void 124 AppendMessageWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 125 126 void 127 AppendRawWarning (const char *in_string); 128 129 void 130 AppendWarning (const char *in_string); 131 132 void 133 AppendWarningWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 134 135 void 136 AppendError (const char *in_string); 137 138 void 139 AppendRawError (const char *in_string); 140 141 void 142 AppendErrorWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 143 144 void 145 SetError (const Error &error, 146 const char *fallback_error_cstr); 147 148 lldb::ReturnStatus 149 GetStatus(); 150 151 void 152 SetStatus (lldb::ReturnStatus status); 153 154 bool 155 Succeeded (); 156 157 bool 158 HasResult (); 159 160 bool GetDidChangeProcessState (); 161 162 void SetDidChangeProcessState (bool b); 163 164private: 165 enum 166 { 167 eStreamStringIndex = 0, 168 eImmediateStreamIndex = 1 169 }; 170 171 StreamTee m_out_stream; 172 StreamTee m_err_stream; 173 174 lldb::ReturnStatus m_status; 175 bool m_did_change_process_state; 176}; 177 178} // namespace lldb_private 179 180#endif // liblldb_CommandReturnObject_h_ 181