[llvm-commits] CVS: llvm/include/llvm/System/Memory.h

Reid Spencer reid at x10sys.com
Mon Sep 13 15:38:24 PDT 2004



Changes in directory llvm/include/llvm/System:

Memory.h updated: 1.1 -> 1.2
---
Log message:

Simplify the sys::Memory interface per Chris' request.


---
Diffs of the changes:  (+33 -23)

Index: llvm/include/llvm/System/Memory.h
diff -u llvm/include/llvm/System/Memory.h:1.1 llvm/include/llvm/System/Memory.h:1.2
--- llvm/include/llvm/System/Memory.h:1.1	Fri Sep 10 23:20:58 2004
+++ llvm/include/llvm/System/Memory.h	Mon Sep 13 17:38:12 2004
@@ -11,38 +11,48 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_SYSTEM_PATH_H
-#define LLVM_SYSTEM_PATH_H
-
-#include <string>
+#ifndef LLVM_SYSTEM_MEMORY_H
+#define LLVM_SYSTEM_MEMORY_H
 
 namespace llvm {
 namespace sys {
 
-  /// This class provides an abstraction for various memory handling functions
+  /// 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 operating system paths.
+  /// @brief An abstraction for memory operations.
   class Memory {
     /// @name Functions
     /// @{
     public:
-      Memory() { Address = 0; AllocSize = 0; }
-      ~Memory() { ReleaseRWX(*this); }
-
-      /// @throws std::string if an error occurred
-      static void* AllocateRWX(Memory& block, unsigned NumBytes);
-
-      /// @throws std::string if an error occurred
-      static void ReleaseRWX(Memory& block);
-
-      char* base() const { return reinterpret_cast<char*>(Address); }
-      unsigned size() const { return AllocSize; }
-    /// @}
-    /// @name Data
-    /// @{
-    private:
-      void * Address;        // Address of first byte of memory area
-      unsigned AllocSize;    // Size, in bytes of the memory area
+      /// 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. 
+      /// @throws std::string if an error occurred.
+      /// @brief Allocate Read/Write/Execute memory.
+      static MemoryBlock AllocateRWX(unsigned NumBytes);
+
+      /// 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);
     /// @}
   };
 }






More information about the llvm-commits mailing list