ToolOutputFile.h revision 71f514dd456a45a0dea9c1c71a56f3a807cfbfb8
1//===- ToolOutputFile.h ---------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_SUPPORT_TOOL_OUTPUT_FILE_H 10#define MCLD_SUPPORT_TOOL_OUTPUT_FILE_H 11#ifdef ENABLE_UNITTEST 12#include <gtest.h> 13#endif 14 15#include <string> 16#include <mcld/Support/FileHandle.h> 17 18namespace llvm { 19class formatted_raw_ostream; 20} // end of namespace llvm 21 22namespace mcld { 23 24class Path; 25class FileHandle; 26class MemoryArea; 27class raw_mem_ostream; 28 29/** \class ToolOutputFile 30 * \brief ToolOutputFile contains a raw_mem_ostream and adds extra new 31 * features: 32 * - The file is automatically deleted if the process is killed. 33 * - The file is automatically deleted when the TooOutputFile object is 34 * destoryed unless the client calls keep(). 35 */ 36class ToolOutputFile 37{ 38public: 39 ToolOutputFile(const std::string& pPath, 40 FileHandle::OpenMode pMode, 41 FileHandle::Permission pPermission); 42 43 ~ToolOutputFile(); 44 45 /// mem_os - Return the contained raw_mem_ostream. 46 raw_mem_ostream &mem_os(); 47 48 /// os - Return the contained formatted_raw_ostream 49 llvm::formatted_raw_ostream& formatted_os(); 50 51 /// memory - Return the contained MemoryArea. 52 MemoryArea& memory(); 53 54 /// keep - Indicate that the tool's job wrt this output file has been 55 /// successful and the file should not be deleted. 56 void keep(); 57 58private: 59 class CleanupInstaller 60 { 61 public: 62 explicit CleanupInstaller(const std::string& pPath); 63 64 ~CleanupInstaller(); 65 66 /// Keep - The flag which indicates whether we should not delete the file. 67 bool Keep; 68 69 private: 70 std::string m_Path; 71 }; 72 73private: 74 FileHandle m_FileHandle; 75 CleanupInstaller m_Installer; 76 MemoryArea* m_pMemoryArea; 77 raw_mem_ostream* m_pOStream; 78 llvm::formatted_raw_ostream* m_pFOStream; 79 80}; 81 82} // namespace of mcld 83 84#endif 85 86