00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 #ifndef ACE_PAGEFILE_MEMORY_POOL_H
00015 #define ACE_PAGEFILE_MEMORY_POOL_H
00016 
00017 #include  "ace/pre.h"
00018 
00019 #include  "ace/ACE_export.h"
00020 
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif 
00024 
00025 #if defined (ACE_WIN32) && !defined (ACE_HAS_PHARLAP)
00026 
00027 #include "ace/ACE.h"
00028 #include "ace/os_include/sys/os_mman.h"
00029 
00030 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 class ACE_Export ACE_Pagefile_Memory_Pool_Options
00041 {
00042 public:
00043 
00044   ACE_Pagefile_Memory_Pool_Options (
00045     void *base_addr = ACE_DEFAULT_PAGEFILE_POOL_BASE,
00046     size_t max_size = ACE_DEFAULT_PAGEFILE_POOL_SIZE);
00047 
00048 
00049   void *base_addr_;
00050 
00051 
00052   size_t max_size_;
00053 };
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 class ACE_Export ACE_Pagefile_Memory_Pool
00062 {
00063 public:
00064   typedef ACE_Pagefile_Memory_Pool_Options OPTIONS;
00065 
00066 
00067   ACE_Pagefile_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
00068                             const OPTIONS *options = 0);
00069 
00070 
00071   void *init_acquire (size_t nbytes,
00072                       size_t &rounded_bytes,
00073                       int &first_time);
00074 
00075 
00076 
00077   void *acquire (size_t nbytes,
00078                  size_t &rounded_bytes);
00079 
00080 
00081   int release (int destroy = 1);
00082 
00083 
00084 
00085 
00086 
00087 
00088   virtual int seh_selector (void *);
00089 
00090 
00091 
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100   int remap (void *addr);
00101 
00102 
00103   size_t round_to_page_size (size_t nbytes);
00104 
00105 
00106   size_t round_to_chunk_size (size_t nbytes);
00107 
00108   
00109   int sync (ssize_t = -1, int = MS_SYNC);
00110   int sync (void *, size_t, int = MS_SYNC);
00111   int protect (ssize_t = -1, int = PROT_RDWR);
00112   int protect (void *, size_t, int = PROT_RDWR);
00113 
00114 
00115 
00116   virtual void *base_addr (void) const;
00117 
00118   void dump (void) const {}
00119 
00120 protected:
00121 
00122 
00123 
00124 
00125 
00126 
00127   int map (int &firstTime, size_t appendBytes = 0);
00128 
00129 
00130   int unmap (void);
00131 
00132 private:
00133 
00134 
00135 
00136 
00137 
00138 
00139   class Control_Block
00140   {
00141   public:
00142 
00143     void *req_base_;
00144 
00145 
00146     void *mapped_base_;
00147 
00148 
00149 
00150 
00151 
00152 
00153     class Shared_Control_Block
00154     {
00155     public:
00156 
00157       size_t max_size_;
00158 
00159 
00160       size_t mapped_size_;
00161 
00162 
00163       ptrdiff_t free_offset_;
00164 
00165 
00166       size_t free_size_;
00167     };
00168 
00169     Shared_Control_Block sh_;
00170   };
00171 
00172   
00173   
00174   
00175 
00176 
00177   Control_Block local_cb_;
00178 
00179 
00180   Control_Block *shared_cb_;
00181 
00182 
00183   ACE_HANDLE object_handle_;
00184 
00185 
00186   size_t page_size_;
00187 
00188 
00189   ACE_TCHAR backing_store_name_[MAXPATHLEN];
00190 };
00191 
00192 ACE_END_VERSIONED_NAMESPACE_DECL
00193 
00194 #endif 
00195 
00196 #if defined (__ACE_INLINE__)
00197 #include "ace/Pagefile_Memory_Pool.inl"
00198 #endif 
00199 
00200 #include  "ace/post.h"
00201 #endif