15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MemoryArea.h -------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_SUPPORT_MEMORYAREA_H_
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_SUPPORT_MEMORYAREA_H_
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Compiler.h"
13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/ADT/StringRef.h>
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <llvm/Support/MemoryBuffer.h>
16affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class MemoryArea
2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines *  \brief MemoryArea is used to manage input read-only memory space.
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
2237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass MemoryArea {
2367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  friend class MemoryAreaFactory;
2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines public:
2667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // constructor by file handler.
2767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // If the given file handler is read-only, client can not request a region
2867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // that out of the file size.
2967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao  // @param pFileHandle - file handler
3087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  explicit MemoryArea(llvm::StringRef pFilename);
3167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  explicit MemoryArea(const char* pMemBuffer, size_t pSize);
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // request - create a MemoryRegion within a sufficient space
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // find an existing space to hold the MemoryRegion.
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // if MemoryArea does not find such space, then it creates a new space and
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // assign a MemoryRegion into the space.
3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  llvm::StringRef request(size_t pOffset, size_t pLength);
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  size_t size() const;
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
43283d8cbf5b3a6888c70f7931a54da9256e13d357Stephen Hines  std::unique_ptr<llvm::MemoryBuffer> m_pMemoryBuffer;
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines private:
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  DISALLOW_COPY_AND_ASSIGN(MemoryArea);
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif  // MCLD_SUPPORT_MEMORYAREA_H_
52