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