1 //===-- CommandReturnObject.h -----------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_CommandReturnObject_h_
11 #define liblldb_CommandReturnObject_h_
15 // Other libraries and framework 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"
23 namespace lldb_private {
26 class CommandReturnObject
30 CommandReturnObject ();
32 ~CommandReturnObject ();
37 lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex));
39 return static_cast<StreamString *>(stream_sp.get())->GetData();
46 lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex));
48 return static_cast<StreamString *>(stream_sp.get())->GetData();
56 // Make sure we at least have our normal string stream output stream
57 lldb::StreamSP stream_sp (m_out_stream.GetStreamAtIndex (eStreamStringIndex));
60 stream_sp.reset (new StreamString());
61 m_out_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp);
69 // Make sure we at least have our normal string stream output stream
70 lldb::StreamSP stream_sp (m_err_stream.GetStreamAtIndex (eStreamStringIndex));
73 stream_sp.reset (new StreamString());
74 m_err_stream.SetStreamAtIndex (eStreamStringIndex, stream_sp);
80 SetImmediateOutputFile (FILE *fh, bool transfer_fh_ownership = false)
82 lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership));
83 m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
87 SetImmediateErrorFile (FILE *fh, bool transfer_fh_ownership = false)
89 lldb::StreamSP stream_sp (new StreamFile (fh, transfer_fh_ownership));
90 m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
94 SetImmediateOutputStream (const lldb::StreamSP &stream_sp)
96 m_out_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
100 SetImmediateErrorStream (const lldb::StreamSP &stream_sp)
102 m_err_stream.SetStreamAtIndex (eImmediateStreamIndex, stream_sp);
106 GetImmediateOutputStream ()
108 return m_out_stream.GetStreamAtIndex (eImmediateStreamIndex);
112 GetImmediateErrorStream ()
114 return m_err_stream.GetStreamAtIndex (eImmediateStreamIndex);
121 AppendMessage (const char *in_string);
124 AppendMessageWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
127 AppendRawWarning (const char *in_string);
130 AppendWarning (const char *in_string);
133 AppendWarningWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
136 AppendError (const char *in_string);
139 AppendRawError (const char *in_string);
142 AppendErrorWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
145 SetError (const Error &error,
146 const char *fallback_error_cstr = NULL);
149 SetError (const char *error_cstr);
155 SetStatus (lldb::ReturnStatus status);
163 bool GetDidChangeProcessState ();
165 void SetDidChangeProcessState (bool b);
170 eStreamStringIndex = 0,
171 eImmediateStreamIndex = 1
174 StreamTee m_out_stream;
175 StreamTee m_err_stream;
177 lldb::ReturnStatus m_status;
178 bool m_did_change_process_state;
181 } // namespace lldb_private
183 #endif // liblldb_CommandReturnObject_h_