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