• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 namespace llvm {
19 class formatted_raw_ostream;
20 } // end of namespace llvm
21 
22 namespace mcld {
23 
24 class Path;
25 class FileHandle;
26 class MemoryArea;
27 class 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  */
36 class ToolOutputFile
37 {
38 public:
39   ToolOutputFile(const sys::fs::Path& 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 
58 private:
59   class CleanupInstaller
60   {
61   public:
62     explicit CleanupInstaller(const std::string& pFilename);
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_Filename;
71   };
72 
73 private:
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