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
427e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda    Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
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;
6415afa9f26a38ea55876ac4ee0b17f0ac8137e9c1Greg Clayton    friend class SBCommandReturnObject;
6598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBCompileUnit;
66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    friend class SBData;
6796154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBDebugger;
6849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata    friend class SBDeclaration;
6998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBEvent;
7096154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBFileSpec;
7196154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBFileSpecList;
7298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBFrame;
7398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBFunction;
745c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    friend class SBInstruction;
755c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    friend class SBInstructionList;
7696154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBLineEntry;
7798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBModule;
78f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    friend class SBModuleSpec;
79f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton    friend class SBModuleSpecList;
8096154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBProcess;
8115ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    friend class SBSection;
8215afa9f26a38ea55876ac4ee0b17f0ac8137e9c1Greg Clayton    friend class SBSourceManager;
8398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBSymbol;
8498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBSymbolContext;
857dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    friend class SBSymbolContextList;
8698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBTarget;
8798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    friend class SBThread;
8896154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBType;
8996154be69fa240a662419183ed08e1cfc5418164Greg Clayton    friend class SBTypeMember;
9049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton    friend class SBValue;
911fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    friend class SBWatchpoint;
92ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
93ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream *
94ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    operator->();
95ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
96ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream *
97ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    get();
98ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
99ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    lldb_private::Stream &
100ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    ref();
101ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
102ab7b39c679528fa2574430ec8035ee83d664acb8Greg Claytonprivate:
103ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
104ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    DISALLOW_COPY_AND_ASSIGN (SBStream);
105102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<lldb_private::Stream> m_opaque_ap;
106ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton    bool m_is_file;
107ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton};
108ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
109ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton} // namespace lldb
110ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton
111ab7b39c679528fa2574430ec8035ee83d664acb8Greg Clayton#endif // LLDB_SBStream_h_
112