From 3e191ac65bd65f678e9a344163f74d181726f6bd Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期二, 13 四月 2021 08:48:40 +0800
Subject: [PATCH] refactor, add TODO.

---
 src/timed_queue.h |   36 +++++++++++++++++++++++++-----------
 1 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/src/timed_queue.h b/src/timed_queue.h
index 14e318d..b2a941b 100644
--- a/src/timed_queue.h
+++ b/src/timed_queue.h
@@ -24,23 +24,37 @@
 #include <string>
 
 template <class Data, class ClockType = std::chrono::steady_clock>
-class TimedQueue
+class TimedData
 {
 public:
 	typedef ClockType Clock;
 	typedef typename Clock::time_point TimePoint;
 	typedef typename Clock::duration Duration;
 
+	TimedData(const TimePoint &expire, const Data &data) :
+	    expire_(expire), data_(data) {}
+	TimedData(const TimePoint &expire, Data &&data) :
+	    expire_(expire), data_(std::move(data)) {}
+	bool Expired() { return Clock::now() > expire_; }
+	Data &data() { return data_; }
+	Data const &data() const { return data_; }
+
 private:
-	struct Record {
-		TimePoint expire_;
-		Data data_;
-		Record(const TimePoint &expire, const Data &data) :
-		    expire_(expire), data_(data) {}
-		Record(const TimePoint &expire, Data &&data) :
-		    expire_(expire), data_(std::move(data)) {}
-		bool Expired() { return Clock::now() > expire_; }
-	};
+	TimePoint expire_;
+	Data data_;
+};
+
+template <class Data, class ClockType = std::chrono::steady_clock>
+class TimedQueue
+{
+	typedef TimedData<Data, ClockType> Record;
+
+public:
+	typedef typename Record::Clock Clock;
+	typedef typename Record::TimePoint TimePoint;
+	typedef typename Record::Duration Duration;
+
+private:
 	typedef std::list<Record> Queue;
 	Synced<Queue> queue_;
 
@@ -62,7 +76,7 @@
 			do {
 				if (it->Expired()) {
 					it = q.erase(it);
-				} else if (func(it->data_)) {
+				} else if (func(it->data())) {
 					it = q.erase(it);
 				} else {
 					++it;

--
Gitblit v1.8.0