aboutsummaryrefslogtreecommitdiffstats
path: root/include/dumb_timer_queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/dumb_timer_queue.h')
-rw-r--r--include/dumb_timer_queue.h81
1 files changed, 0 insertions, 81 deletions
diff --git a/include/dumb_timer_queue.h b/include/dumb_timer_queue.h
deleted file mode 100644
index 6b690bb..0000000
--- a/include/dumb_timer_queue.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#pragma once
-
-#include <boost/asio.hpp>
-#include <deque>
-#include <functional>
-#include <chrono>
-#include <thread>
-
-#include "logging.h"
-
-namespace crow
-{
- namespace detail
- {
- // fast timer queue for fixed tick value.
- class dumb_timer_queue
- {
- public:
- using key = std::pair<dumb_timer_queue*, int>;
-
- void cancel(key& k)
- {
- auto self = k.first;
- k.first = nullptr;
- if (!self)
- return;
-
- unsigned int index = (unsigned int)(k.second - self->step_);
- if (index < self->dq_.size())
- self->dq_[index].second = nullptr;
- }
-
- key add(std::function<void()> f)
- {
- dq_.emplace_back(std::chrono::steady_clock::now(), std::move(f));
- int ret = step_+dq_.size()-1;
-
- CROW_LOG_DEBUG << "timer add inside: " << this << ' ' << ret ;
- return {this, ret};
- }
-
- void process()
- {
- if (!io_service_)
- return;
-
- auto now = std::chrono::steady_clock::now();
- while(!dq_.empty())
- {
- auto& x = dq_.front();
- if (now - x.first < std::chrono::seconds(tick))
- break;
- if (x.second)
- {
- CROW_LOG_DEBUG << "timer call: " << this << ' ' << step_;
- // we know that timer handlers are very simple currenty; call here
- x.second();
- }
- dq_.pop_front();
- step_++;
- }
- }
-
- void set_io_service(boost::asio::io_service& io_service)
- {
- io_service_ = &io_service;
- }
-
- dumb_timer_queue() noexcept
- {
- }
-
- private:
-
- int tick{5};
- boost::asio::io_service* io_service_{};
- std::deque<std::pair<decltype(std::chrono::steady_clock::now()), std::function<void()>>> dq_;
- int step_{};
- };
- }
-}