You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
69 lines
2.1 KiB
//===- FileOutputBuffer.h -------------------------------------------------===//
|
|
//
|
|
// the mclinker project
|
|
//
|
|
// this file is distributed under the university of illinois open source
|
|
// license. see license.txt for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_SUPPORT_FILEOUTPUTBUFFER_H_
|
|
#define MCLD_SUPPORT_FILEOUTPUTBUFFER_H_
|
|
|
|
#include "mcld/Support/MemoryRegion.h"
|
|
|
|
#include <llvm/ADT/StringRef.h>
|
|
#include <llvm/Support/DataTypes.h>
|
|
#include <llvm/Support/FileSystem.h>
|
|
|
|
#include <system_error>
|
|
|
|
namespace mcld {
|
|
|
|
class FileHandle;
|
|
|
|
/// FileOutputBuffer - This interface is borrowed from llvm bassically, and we
|
|
/// may use ostream to emit output later.
|
|
class FileOutputBuffer {
|
|
public:
|
|
/// Factory method to create an OutputBuffer object which manages a read/write
|
|
/// buffer of the specified size. When committed, the buffer will be written
|
|
/// to the file at the specified path.
|
|
static std::error_code create(FileHandle& pFileHandle,
|
|
size_t pSize,
|
|
std::unique_ptr<FileOutputBuffer>& pResult);
|
|
|
|
/// Returns a pointer to the start of the buffer.
|
|
uint8_t* getBufferStart() {
|
|
return reinterpret_cast<uint8_t*>(m_pRegion->data());
|
|
}
|
|
|
|
/// Returns a pointer to the end of the buffer.
|
|
uint8_t* getBufferEnd() {
|
|
return reinterpret_cast<uint8_t*>(m_pRegion->data()) + m_pRegion->size();
|
|
}
|
|
|
|
/// Returns size of the buffer.
|
|
size_t getBufferSize() const { return m_pRegion->size(); }
|
|
|
|
MemoryRegion request(size_t pOffset, size_t pLength);
|
|
|
|
/// Returns path where file will show up if buffer is committed.
|
|
llvm::StringRef getPath() const;
|
|
|
|
~FileOutputBuffer();
|
|
|
|
private:
|
|
FileOutputBuffer(const FileOutputBuffer&);
|
|
FileOutputBuffer& operator=(const FileOutputBuffer&);
|
|
|
|
FileOutputBuffer(llvm::sys::fs::mapped_file_region* pRegion,
|
|
FileHandle& pFileHandle);
|
|
|
|
std::unique_ptr<llvm::sys::fs::mapped_file_region> m_pRegion;
|
|
FileHandle& m_FileHandle;
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_SUPPORT_FILEOUTPUTBUFFER_H_
|