]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/Interpreter/CommandReturnObject.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / include / lldb / Interpreter / CommandReturnObject.h
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
23 namespace lldb_private {
24
25
26 class CommandReturnObject
27 {
28 public:
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 = NULL);
147     
148     void
149     SetError (const char *error_cstr);
150
151     lldb::ReturnStatus
152     GetStatus();
153
154     void
155     SetStatus (lldb::ReturnStatus status);
156
157     bool
158     Succeeded ();
159
160     bool
161     HasResult ();
162
163     bool GetDidChangeProcessState ();
164
165     void SetDidChangeProcessState (bool b);
166
167 private:
168     enum 
169     {
170         eStreamStringIndex = 0,
171         eImmediateStreamIndex = 1
172     };
173     
174     StreamTee    m_out_stream;
175     StreamTee    m_err_stream;
176     
177     lldb::ReturnStatus m_status;
178     bool m_did_change_process_state;
179 };
180
181 } // namespace lldb_private
182
183 #endif  // liblldb_CommandReturnObject_h_