| //===- MemoryArea.h -------------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_SUPPORT_MEMORYAREA_H_ |
| #define MCLD_SUPPORT_MEMORYAREA_H_ |
| |
| #include "mcld/Support/Compiler.h" |
| |
| #include <llvm/ADT/StringRef.h> |
| #include <llvm/Support/MemoryBuffer.h> |
| |
| namespace mcld { |
| |
| /** \class MemoryArea |
| * \brief MemoryArea is used to manage input read-only memory space. |
| */ |
| class MemoryArea { |
| friend class MemoryAreaFactory; |
| |
| public: |
| // constructor by file handler. |
| // If the given file handler is read-only, client can not request a region |
| // that out of the file size. |
| // @param pFileHandle - file handler |
| explicit MemoryArea(llvm::StringRef pFilename); |
| |
| explicit MemoryArea(const char* pMemBuffer, size_t pSize); |
| |
| // request - create a MemoryRegion within a sufficient space |
| // find an existing space to hold the MemoryRegion. |
| // if MemoryArea does not find such space, then it creates a new space and |
| // assign a MemoryRegion into the space. |
| llvm::StringRef request(size_t pOffset, size_t pLength); |
| |
| size_t size() const; |
| |
| private: |
| std::unique_ptr<llvm::MemoryBuffer> m_pMemoryBuffer; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(MemoryArea); |
| }; |
| |
| } // namespace mcld |
| |
| #endif // MCLD_SUPPORT_MEMORYAREA_H_ |