lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
mapped_file.h
00001 /*****************************************************/
00002 /* lean I/O                     (c) Tobias Zirr 2011 */
00003 /*****************************************************/
00004 
00005 #ifndef LEAN_LOGGING_IO_MAPPED_FILE
00006 #define LEAN_LOGGING_IO_MAPPED_FILE
00007 
00008 #include "../lean.h"
00009 #include "../strings/types.h"
00010 #include "file.h"
00011 
00012 namespace lean
00013 {
00014 namespace io
00015 {
00016 
00018 class mapped_file_base : public file
00019 {
00020 private:
00021     windows_file_handle m_mappingHandle;
00022 
00025     static LEAN_MAYBE_EXPORT windows_file_handle createMapping(file &file, bool readonly, uint8 size);
00026 
00027 protected:
00029     LEAN_MAYBE_EXPORT explicit mapped_file_base(const utf8_ntri &name,
00030         bool readonly, uint8 size, open_mode mode,
00031         uint4 hints, uint4 share);
00033     LEAN_MAYBE_EXPORT ~mapped_file_base();
00034 
00037     LEAN_MAYBE_EXPORT void* map(bool readonly, uint8 offset, size_t size);
00039     LEAN_MAYBE_EXPORT void unmap(void *memory);
00040 
00043     LEAN_MAYBE_EXPORT void resize(uint8 newSize);
00044 };
00045 
00047 class rmapped_file : public mapped_file_base
00048 {
00049 private:
00050     const void *m_memory;
00051 
00052 public:
00054     LEAN_MAYBE_EXPORT explicit rmapped_file(const utf8_ntri &name,
00055         bool mapWhole = true, open_mode mode = file::open,
00056         uint4 hints = file::none, uint4 share = file::share_default);
00058     LEAN_MAYBE_EXPORT ~rmapped_file();
00059 
00062     LEAN_MAYBE_EXPORT const void* map(uint8 offset = 0, size_t size = 0);
00064     LEAN_MAYBE_EXPORT void unmap();
00065 
00067     LEAN_INLINE const void* data() const { return m_memory; };
00068 
00070     LEAN_INLINE bool mapped() const { return (m_memory != nullptr); }
00071 };
00072 
00074 class mapped_file : public mapped_file_base
00075 {
00076 private:
00077     void *m_memory;
00078 
00079 public:
00082     LEAN_MAYBE_EXPORT explicit mapped_file(const utf8_ntri &name,
00083         uint8 size = 0, bool mapWhole = true, open_mode mode = file::open,
00084         uint4 hints = file::none, uint4 share = file::share_default);
00086     LEAN_MAYBE_EXPORT ~mapped_file();
00087 
00090     LEAN_MAYBE_EXPORT void* map(uint8 offset = 0, size_t size = 0);
00092     LEAN_MAYBE_EXPORT void unmap();
00093 
00095     LEAN_MAYBE_EXPORT bool flush();
00096 
00099     LEAN_MAYBE_EXPORT void resize(uint8 newSize);
00100 
00102     LEAN_INLINE void* data() { return m_memory; }
00104     LEAN_INLINE const void* data() const { return m_memory; }
00105 
00107     LEAN_INLINE bool mapped() const { return (m_memory != nullptr); }
00108 };
00109 
00110 } // namespace
00111 
00112 using io::rmapped_file;
00113 using io::mapped_file;
00114 
00115 } // namespace
00116 
00117 #ifdef LEAN_INCLUDE_INLINED
00118 #include "source/mapped_file.cpp"
00119 #endif
00120 
00121 #endif