//===- ToolOutputFile.h ---------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_SUPPORT_TOOL_OUTPUT_FILE_H
#define MCLD_SUPPORT_TOOL_OUTPUT_FILE_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif

#include <string>
#include <mcld/Support/FileHandle.h>

namespace llvm {
class formatted_raw_ostream;
} // end of namespace llvm

namespace mcld {

class Path;
class FileHandle;
class MemoryArea;
class raw_mem_ostream;

/** \class ToolOutputFile
 *  \brief ToolOutputFile contains a raw_mem_ostream and adds extra new
 *  features:
 *   - The file is automatically deleted if the process is killed.
 *   - The file is automatically deleted when the TooOutputFile object is
 *     destoryed unless the client calls keep().
 */
class ToolOutputFile
{
public:
  ToolOutputFile(const sys::fs::Path& pPath,
                 FileHandle::OpenMode pMode,
                 FileHandle::Permission pPermission);

  ~ToolOutputFile();

  /// mem_os - Return the contained raw_mem_ostream.
  raw_mem_ostream &mem_os();

  /// os - Return the contained formatted_raw_ostream
  llvm::formatted_raw_ostream& formatted_os();

  /// memory - Return the contained MemoryArea.
  MemoryArea& memory();

  /// keep - Indicate that the tool's job wrt this output file has been
  /// successful and the file should not be deleted.
  void keep();

private:
  class CleanupInstaller
  {
  public:
    explicit CleanupInstaller(const std::string& pFilename);

    ~CleanupInstaller();

    /// Keep - The flag which indicates whether we should not delete the file.
    bool Keep;

  private:
    std::string m_Filename;
  }; 

private:
  FileHandle m_FileHandle;
  CleanupInstaller m_Installer;
  MemoryArea* m_pMemoryArea;
  raw_mem_ostream* m_pOStream;
  llvm::formatted_raw_ostream* m_pFOStream;

};

} // namespace of mcld

#endif

