//===- llvm/System/Memory.h - Memory Support --------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file was developed by Reid Spencer and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file declares the llvm::sys::Memory class.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_SYSTEM_MEMORY_H
#define LLVM_SYSTEM_MEMORY_H

namespace llvm {
namespace sys {

  /// This class encapsulates the notion of a memory block which has an address
  /// and a size. It is used by the Memory class (a friend) as the result of
  /// various memory allocation operations.
  /// @see Memory
  /// @brief Memory block abstraction.
  class MemoryBlock {
  public:
    void* base() const { return Address; }
    unsigned size() const { return Size; }
  private:
    void * Address;   ///< Address of first byte of memory area
    unsigned Size;    ///< Size, in bytes of the memory area
    friend class Memory;
  };

  /// This class provides various memory handling functions that manipulate
  /// MemoryBlock instances.
  /// @since 1.4
  /// @brief An abstraction for memory operations.
  class Memory {
    /// @name Functions
    /// @{
    public:
      /// This method allocates a block of Read/Write/Execute memory that is
      /// suitable for executing dynamically generated code (e.g. JIT). An
      /// attempt to allocate \p NumBytes bytes of virtual memory is made.
      /// \p NearBlock may point to an existing allocation in which case
      /// an attempt is made to allocate more memory near the existing block.
      /// @throws std::string if an error occurred.
      /// @brief Allocate Read/Write/Execute memory.
      static MemoryBlock AllocateRWX(unsigned NumBytes, const MemoryBlock* NearBlock);

      /// This method releases a block of Read/Write/Execute memory that was
      /// allocated with the AllocateRWX method. It should not be used to
      /// release any memory block allocated any other way.
      /// @throws std::string if an error occurred.
      /// @brief Release Read/Write/Execute memory.
      static void ReleaseRWX(MemoryBlock& block);

    /// @}
  };
}
}


#endif
