ToolOutputFile.h revision 249423
1218885Sdim//===- ToolOutputFile.h - Output files for compiler-like tools -----------===// 2218885Sdim// 3218885Sdim// The LLVM Compiler Infrastructure 4218885Sdim// 5218885Sdim// This file is distributed under the University of Illinois Open Source 6218885Sdim// License. See LICENSE.TXT for details. 7218885Sdim// 8218885Sdim//===----------------------------------------------------------------------===// 9218885Sdim// 10218885Sdim// This file defines the tool_output_file class. 11218885Sdim// 12218885Sdim//===----------------------------------------------------------------------===// 13218885Sdim 14249423Sdim#ifndef LLVM_SUPPORT_TOOLOUTPUTFILE_H 15249423Sdim#define LLVM_SUPPORT_TOOLOUTPUTFILE_H 16218885Sdim 17218885Sdim#include "llvm/Support/raw_ostream.h" 18218885Sdim 19218885Sdimnamespace llvm { 20218885Sdim 21218885Sdim/// tool_output_file - This class contains a raw_fd_ostream and adds a 22218885Sdim/// few extra features commonly needed for compiler-like tool output files: 23218885Sdim/// - The file is automatically deleted if the process is killed. 24218885Sdim/// - The file is automatically deleted when the tool_output_file 25218885Sdim/// object is destroyed unless the client calls keep(). 26218885Sdimclass tool_output_file { 27218885Sdim /// Installer - This class is declared before the raw_fd_ostream so that 28218885Sdim /// it is constructed before the raw_fd_ostream is constructed and 29218885Sdim /// destructed after the raw_fd_ostream is destructed. It installs 30218885Sdim /// cleanups in its constructor and uninstalls them in its destructor. 31218885Sdim class CleanupInstaller { 32218885Sdim /// Filename - The name of the file. 33218885Sdim std::string Filename; 34218885Sdim public: 35218885Sdim /// Keep - The flag which indicates whether we should not delete the file. 36218885Sdim bool Keep; 37218885Sdim 38218885Sdim explicit CleanupInstaller(const char *filename); 39218885Sdim ~CleanupInstaller(); 40218885Sdim } Installer; 41218885Sdim 42218885Sdim /// OS - The contained stream. This is intentionally declared after 43218885Sdim /// Installer. 44218885Sdim raw_fd_ostream OS; 45218885Sdim 46218885Sdimpublic: 47218885Sdim /// tool_output_file - This constructor's arguments are passed to 48218885Sdim /// to raw_fd_ostream's constructor. 49218885Sdim tool_output_file(const char *filename, std::string &ErrorInfo, 50218885Sdim unsigned Flags = 0); 51218885Sdim 52218885Sdim /// os - Return the contained raw_fd_ostream. 53218885Sdim raw_fd_ostream &os() { return OS; } 54218885Sdim 55218885Sdim /// keep - Indicate that the tool's job wrt this output file has been 56218885Sdim /// successful and the file should not be deleted. 57218885Sdim void keep() { Installer.Keep = true; } 58218885Sdim}; 59218885Sdim 60218885Sdim} // end llvm namespace 61218885Sdim 62218885Sdim#endif 63