//===- ToolOutputFile.h - Output files for compiler-like tools -----------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file defines the tool_output_file class.////===----------------------------------------------------------------------===//#ifndef LLVM_SUPPORT_TOOLOUTPUTFILE_H#define LLVM_SUPPORT_TOOLOUTPUTFILE_H#include"llvm/Support/raw_ostream.h"namespacellvm{/// This class contains a raw_fd_ostream and adds a few extra features commonly/// needed for compiler-like tool output files:/// - The file is automatically deleted if the process is killed./// - The file is automatically deleted when the tool_output_file/// object is destroyed unless the client calls keep().classtool_output_file{/// This class is declared before the raw_fd_ostream so that it is constructed/// before the raw_fd_ostream is constructed and destructed after the/// raw_fd_ostream is destructed. It installs cleanups in its constructor and/// uninstalls them in its destructor.classCleanupInstaller{/// The name of the file.std::stringFilename;public:/// The flag which indicates whether we should not delete the file.boolKeep;explicitCleanupInstaller(StringRefilename);~CleanupInstaller();}Installer;/// The contained stream. This is intentionally declared after Installer.raw_fd_ostreamOS;public:/// This constructor's arguments are passed to to raw_fd_ostream's/// constructor.tool_output_file(StringRefFilename,std::error_code&EC,sys::fs::OpenFlagsFlags);tool_output_file(StringRefFilename,intFD);/// Return the contained raw_fd_ostream.raw_fd_ostream&os(){returnOS;}/// Indicate that the tool's job wrt this output file has been successful and/// the file should not be deleted.voidkeep(){Installer.Keep=true;}};}// end llvm namespace#endif