lean cpp library
A lean C++ library providing efficient utility classes for high-performance C++ applications.
|
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