From 6f9521a6dca494a9f9644d1ccacdee23744dc0e5 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期三, 24 三月 2021 18:34:18 +0800
Subject: [PATCH] add msg meta or header, queue pointer only.

---
 src/shm.h |   23 +++++++++--------------
 1 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/shm.h b/src/shm.h
index 0ba4e8c..5aa4a48 100644
--- a/src/shm.h
+++ b/src/shm.h
@@ -10,7 +10,7 @@
  *       Revision:  none
  *       Compiler:  gcc
  *
- *         Author:  LiChao (), 
+ *         Author:  Li Chao (), 
  *   Organization:  
  *
  * =====================================================================================
@@ -26,6 +26,7 @@
 #include <boost/noncopyable.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/uuid/uuid.hpp>
+#include "msg.h"
 
 namespace bhome_shm {
 
@@ -101,6 +102,7 @@
 template <class D> using Circular = boost::circular_buffer<D, Allocator<D> >;
 
 typedef boost::uuids::uuid MQId;
+
 template <class D>
 class SyncedQueue : private Circular<D>
 {
@@ -119,10 +121,11 @@
     }
 
 public:
-    template <class...T> SyncedQueue(MQId id, T&&...t):Super(t...), id_(id) {}
+    // template <class...T> SyncedQueue(const MQId &id, T&&...t):Super(t...), id_(id) {}
+    SyncedQueue(const MQId &id, const uint32_t len, Allocator<D> const& alloc):Super(len, alloc), id_(id) {}
     using Super::size;
     using Super::capacity;
-    MQId Id() const { return id_; }
+    const MQId &Id() const { return id_; }
     bool Write(D buf, const int timeout_ms) {
         Guard lock(mutex());
         if (cond_write_.timed_wait(lock, MSFromNow(timeout_ms), [&]() { return !this->full(); })) {
@@ -147,13 +150,6 @@
     }
 };
 
-// safe to be stored in shared memory.
-struct Msg {
-    MQId src_;
-    offset_ptr<void> data_;
-    size_t size_;
-};
-
 class ShmMsgQueue : private ShmObject<SyncedQueue<Msg> >
 {
     typedef ShmObject<SyncedQueue<Msg> > SharedQueue;
@@ -161,13 +157,12 @@
     bool Write(const Msg &buf, const int timeout_ms) { return data()->Write(buf, timeout_ms); }
     bool Read(Msg &buf, const int timeout_ms) { return data()->Read(buf, timeout_ms); }
 public:
-    ShmMsgQueue(MQId id, ShmType &segment, const uint32_t len);
+    ShmMsgQueue(const MQId &id, ShmType &segment, const uint32_t len);
     ShmMsgQueue(ShmType &segment, const uint32_t len);
     ~ShmMsgQueue();
-    bool Send(MQId remote_id, const void *data, const size_t size, const int timeout_ms);
+    bool Send(const MQId &remote_id, const void *data, const size_t size, const int timeout_ms);
     bool Recv(MQId &source_id, void *&data, size_t &size, const int timeout_ms);
-    using SharedQueue::Remove;
-    MQId Id() const { return data()->Id(); }
+    const MQId &Id() const { return data()->Id(); }
 };
 
 } // namespace bhome_shm

--
Gitblit v1.8.0