diff options
Diffstat (limited to 'ace/Mem_Map.i')
-rw-r--r-- | ace/Mem_Map.i | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/ace/Mem_Map.i b/ace/Mem_Map.i new file mode 100644 index 00000000000..ecba43e127d --- /dev/null +++ b/ace/Mem_Map.i @@ -0,0 +1,166 @@ +/* -*- C++ -*- */ +// $Id$ + +// Mem_Map.i + +#include "ace/Log_Msg.h" + +ACE_INLINE ACE_HANDLE +ACE_Mem_Map::handle (void) const +{ + ACE_TRACE ("ACE_Mem_Map::handle"); + return this->handle_; +} + +// Return the name of file that is mapped (if any). + +ACE_INLINE const TCHAR * +ACE_Mem_Map::filename (void) const +{ + return this->filename_; +} + +ACE_INLINE int +ACE_Mem_Map::map (ACE_HANDLE handle, + int len, + int prot, + int share, + void *addr, + off_t pos) +{ + ACE_TRACE ("ACE_Mem_Map::map"); + return this->map_it (handle, len, prot, share, addr, pos); +} + +// Remap the file associated with <this->handle_>. + +ACE_INLINE int +ACE_Mem_Map::map (int len, + int prot, + int share, + void *addr, + off_t pos) +{ + ACE_TRACE ("ACE_Mem_Map::map"); + return this->map_it (this->handle (), len, prot, + share, addr, pos); +} + +// This operator passes back the starting address of the mapped file. + +ACE_INLINE int +ACE_Mem_Map::operator () (void *&addr) +{ + ACE_TRACE ("ACE_Mem_Map::operator"); + + if (this->base_addr_ == MAP_FAILED) + return -1; + else + { + addr = this->base_addr_; + return 0; + } +} + +// Return the base address. + +ACE_INLINE void * +ACE_Mem_Map::addr (void) const +{ + ACE_TRACE ("ACE_Mem_Map::addr"); + + return this->base_addr_; +} + +// This function returns the number of bytes currently mapped in the +// file. + +ACE_INLINE size_t +ACE_Mem_Map::size (void) const +{ + ACE_TRACE ("ACE_Mem_Map::size"); + return this->length_; +} + +// Unmap the region starting at <this->base_addr_>. + +ACE_INLINE int +ACE_Mem_Map::unmap (int len) +{ + ACE_TRACE ("ACE_Mem_Map::unmap"); + if (this->file_mapping_ != this->handle_) + ACE_OS::close (this->file_mapping_); + + this->file_mapping_ = ACE_INVALID_HANDLE; + + return ACE_OS::munmap (this->base_addr_, len < 0 ? this->length_ : len); +} + +// Unmap the region starting at <addr_>. + +ACE_INLINE int +ACE_Mem_Map::unmap (void *addr, int len) +{ + ACE_TRACE ("ACE_Mem_Map::unmap"); + if (this->file_mapping_ != this->handle_) + ACE_OS::close (this->file_mapping_); + + this->file_mapping_ = ACE_INVALID_HANDLE; + + return ACE_OS::munmap (addr, len < 0 ? this->length_ : len); +} + +// Sync <len> bytes of the memory region to the backing store starting +// at <this->base_addr_>. If <len> == -1 then sync the whole mapped +// region. + +ACE_INLINE int +ACE_Mem_Map::sync (ssize_t len, int flags) +{ + ACE_TRACE ("ACE_Mem_Map::sync"); + return ACE_OS::msync (this->base_addr_, len < 0 ? this->length_ : len, flags); +} + +// Sync <len> bytes of the memory region to the backing store starting +// at <addr_>. + +ACE_INLINE int +ACE_Mem_Map::sync (void *addr, size_t len, int flags) +{ + ACE_TRACE ("ACE_Mem_Map::sync"); + return ACE_OS::msync (addr, len, flags); +} + +// Change the protection of the pages of the mapped region to <prot> +// starting at <this->base_addr_> up to <len> bytes. If <len> == -1 +// then change protection of all pages in the mapped region. + +ACE_INLINE int +ACE_Mem_Map::protect (ssize_t len, int prot) +{ + ACE_TRACE ("ACE_Mem_Map::protect"); + if (len < 0) + len = this->length_; + return ACE_OS::mprotect (this->base_addr_, len, prot); +} + +// Change the protection of the pages of the mapped region to <prot> +// starting at <addr> up to <len> bytes. + +ACE_INLINE int +ACE_Mem_Map::protect (void *addr, size_t len, int prot) +{ + ACE_TRACE ("ACE_Mem_Map::protect"); + return ACE_OS::mprotect (addr, len, prot); +} + +// Hook into the underlying VM system. + +ACE_INLINE int +ACE_Mem_Map::advise (int behavior, int len) +{ + ACE_TRACE ("ACE_Mem_Map::advise"); + if (len < 0) + len = this->length_; + return ACE_OS::madvise ((caddr_t) this->base_addr_, len, behavior); +} |