From f7f8fbc85c48b003d1e3094a94a3528001977977 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期二, 01 六月 2021 15:15:55 +0800 Subject: [PATCH] remove length in ShmSocket ctor, not used. --- src/shm.h | 34 +++++++++++++++++++++------------- 1 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/shm.h b/src/shm.h index b5ec2ea..5013893 100644 --- a/src/shm.h +++ b/src/shm.h @@ -162,6 +162,12 @@ template <class D> using SharedPtr = shared_ptr<D, Allocator<void>, Deleter<D>>; +enum Mode { + eOpen = 0, + eCreate = 1, + eOpenOrCreate = 2 +}; + // ShmObject manages an object in shared memory, but ShmObject itself is not in shared memory. template <class T> class ShmObject : private boost::noncopyable @@ -174,24 +180,26 @@ ShmType &shm() const { return shm_; } template <class... Params> - ShmObject(ShmType &segment, const std::string &name, Params &&...t) : + ShmObject(ShmType &segment, const std::string &name, Mode mode, Params &&...t) : shm_(segment), name_(name) { - pdata_ = shm_.FindOrCreate<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); - if (!IsOk()) { - throw("Error: Not enough memory, can not allocate \"" + name_ + "\""); - } - } - template <class... Params> - ShmObject(ShmType &segment, const bool create_or_else_find, const std::string &name, Params &&...t) : - shm_(segment), name_(name) - { - if (create_or_else_find) { - pdata_ = shm_.Create<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); - } else { + switch (mode) { + case eOpen: pdata_ = shm_.Find<Data>(ObjName(name_)); + break; + case eCreate: + pdata_ = shm_.Create<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); + break; + case eOpenOrCreate: + pdata_ = shm_.FindOrCreate<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); + break; + default: break; + } + if (!IsOk()) { + throw("Error: shm can not create/open \"" + name_ + "\""); } } + ShmObject(const int64_t offset, ShmType &segment, const std::string &name) : shm_(segment), name_(name) { -- Gitblit v1.8.0