nim_duilib/base/win32/shared_memory.h
jiajia_deng 4933d1f2bc Remove dependency on shared
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-20 16:27:58 +08:00

63 lines
1.1 KiB
C++

// A wrapper class of Windows shared memory
#ifndef BASE_SHARED_MEMORY_H_
#define BASE_SHARED_MEMORY_H_
#include "base/base_config.h"
#if defined(OS_WIN)
#include "base/base_export.h"
#include <assert.h>
#include <windows.h>
namespace nbase
{
namespace win32
{
class BASE_EXPORT SharedMemory
{
public:
SharedMemory() : mapping_(NULL) {}
~SharedMemory() { Close(); };
bool Create(const wchar_t *name, int size);
bool Open(const wchar_t *name);
void Close();
class MappedView
{
public:
MappedView() : view_(NULL) {}
~MappedView() { CloseView(); }
bool OpenView(SharedMemory *shared_memory, bool read_write);
void CloseView();
unsigned char *view() { return view_; }
private:
unsigned char *view_;
};
template<class T>
class MappedViewOf : public MappedView
{
public:
T *get() { return reinterpret_cast<T*>(view()); }
T* operator->()
{
assert(view() != NULL);
return reinterpret_cast<T*>(view());
}
};
private:
friend class MappedView;
HANDLE mapping_;
};
} // namespace win32
} // namespace nbase
#endif // OS_WIN
#endif // BASE_SHARED_MEMORY_H_