]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/API/SBStream.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 / API / SBStream.h
1 //===-- SBStream.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 LLDB_SBStream_h_
11 #define LLDB_SBStream_h_
12
13 #include <stdio.h>
14
15 #include "lldb/API/SBDefines.h"
16
17 namespace lldb {
18
19 class SBStream
20 {
21 public:
22
23     SBStream ();
24     
25     ~SBStream ();
26
27     bool
28     IsValid() const;
29
30     // If this stream is not redirected to a file, it will maintain a local
31     // cache for the stream data which can be accessed using this accessor.
32     const char *
33     GetData ();
34
35     // If this stream is not redirected to a file, it will maintain a local
36     // cache for the stream output whose length can be accessed using this 
37     // accessor.
38     size_t
39     GetSize();
40
41     void
42     Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
43
44     void
45     RedirectToFile (const char *path, bool append);
46
47     void
48     RedirectToFileHandle (FILE *fh, bool transfer_fh_ownership);
49
50     void
51     RedirectToFileDescriptor (int fd, bool transfer_fh_ownership);
52
53     // If the stream is redirected to a file, forget about the file and if
54     // ownership of the file was transfered to this object, close the file.
55     // If the stream is backed by a local cache, clear this cache.
56     void
57     Clear ();
58
59 protected:
60     friend class SBAddress;
61     friend class SBBlock;
62     friend class SBBreakpoint;
63     friend class SBBreakpointLocation;
64     friend class SBCommandReturnObject;
65     friend class SBCompileUnit;
66     friend class SBData;
67     friend class SBDebugger;
68     friend class SBDeclaration;
69     friend class SBEvent;
70     friend class SBFileSpec;
71     friend class SBFileSpecList;
72     friend class SBFrame;
73     friend class SBFunction;
74     friend class SBInstruction;
75     friend class SBInstructionList;
76     friend class SBLineEntry;
77     friend class SBModule;
78     friend class SBModuleSpec;
79     friend class SBModuleSpecList;
80     friend class SBProcess;
81     friend class SBSection;
82     friend class SBSourceManager;
83     friend class SBSymbol;
84     friend class SBSymbolContext;
85     friend class SBSymbolContextList;
86     friend class SBTarget;
87     friend class SBThread;
88     friend class SBType;
89     friend class SBTypeMember;
90     friend class SBValue;
91     friend class SBWatchpoint;
92
93     lldb_private::Stream *
94     operator->();
95
96     lldb_private::Stream *
97     get();
98
99     lldb_private::Stream &
100     ref();
101
102 private:
103
104     DISALLOW_COPY_AND_ASSIGN (SBStream);
105     std::unique_ptr<lldb_private::Stream> m_opaque_ap;
106     bool m_is_file;
107 };
108
109 } // namespace lldb
110
111 #endif // LLDB_SBStream_h_