SBStream.h revision 2e8cb8a7342a2ea672792067d712a794e215a3a7
1ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//===-- SBStream.h ----------------------------------------------*- C++ -*-===//
2ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//
3ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//                     The LLVM Compiler Infrastructure
4ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//
5ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton// This file is distributed under the University of Illinois Open Source
6ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton// License. See LICENSE.TXT for details.
7ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//
8ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton//===----------------------------------------------------------------------===//
9ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
10ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#ifndef LLDB_SBStream_h_
11ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#define LLDB_SBStream_h_
12ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
13ca66a5f50969b4833cea57c441b23fa29c714a55Greg Clayton#include <stdio.h>
14ca66a5f50969b4833cea57c441b23fa29c714a55Greg Clayton
15ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#include "lldb/API/SBDefines.h"
16ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
17ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonnamespace lldb {
18ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
19ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonclass SBStream
20ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton{
21ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonpublic:
22ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
23ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    SBStream ();
242e8cb8a7342a2ea672792067d712a794e215a3a7Jim Ingham
25ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    ~SBStream ();
26ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
27ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    bool
28ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    IsValid() const;
29ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
30ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // If this stream is not redirected to a file, it will maintain a local
31ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // cache for the stream data which can be accessed using this accessor.
32ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    const char *
33ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    GetData ();
34ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
35ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // If this stream is not redirected to a file, it will maintain a local
36ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // cache for the stream output whose length can be accessed using this
37ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // accessor.
38ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    size_t
39ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    GetSize();
40ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
41ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    void
42ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    Printf (const char *format, ...);
43ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
44ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    void
45ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    RedirectToFile (const char *path, bool append);
46ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
47ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    void
48ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    RedirectToFileHandle (FILE *fh, bool transfer_fh_ownership);
49ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
50ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    void
51ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    RedirectToFileDescriptor (int fd, bool transfer_fh_ownership);
52ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
53ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // If the stream is redirected to a file, forget about the file and if
54ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // ownership of the file was transfered to this object, close the file.
55ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    // If the stream is backed by a local cache, clear this cache.
56ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    void
57ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    Clear ();
58ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
59ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonprotected:
6098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBAddress;
6198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBBlock;
6298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBBreakpoint;
6398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBBreakpointLocation;
6498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBCompileUnit;
6598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBEvent;
6698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBFrame;
6798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBFunction;
685c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    friend class SBInstruction;
695c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    friend class SBInstructionList;
7098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBModule;
71e5791dd89688683c9e1ec874b0be6906517e6827Johnny Chen    friend class SBSourceManager;
7298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBSymbol;
7398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBSymbolContext;
7498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBTarget;
7598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBThread;
7649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    friend class SBValue;
772e8cb8a7342a2ea672792067d712a794e215a3a7Jim Ingham    friend class SBCommandReturnObject;
78ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
79ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#ifndef SWIG
80ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
81ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream *
82ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    operator->();
83ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
84ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream *
85ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    get();
86ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
87ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream &
88ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    ref();
89ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
90ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#endif
91ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
92ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonprivate:
93ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
94ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    DISALLOW_COPY_AND_ASSIGN (SBStream);
95ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    std::auto_ptr<lldb_private::Stream> m_opaque_ap;
96ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    bool m_is_file;
97ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton};
98ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
99ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton} // namespace lldb
100ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
101ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#endif // LLDB_SBStream_h_
102