Ring buffer: Use as backing for std::queue uses
This commit is contained in:
@@ -29,6 +29,7 @@ add_files(
|
||||
random_func.cpp
|
||||
random_func.hpp
|
||||
ring_buffer.hpp
|
||||
ring_buffer_queue.hpp
|
||||
serialisation.cpp
|
||||
serialisation.hpp
|
||||
smallstack_type.hpp
|
||||
|
@@ -192,6 +192,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using size_type = size_t;
|
||||
using value_type = T;
|
||||
using reference = T &;
|
||||
using const_reference = const T &;
|
||||
typedef ring_buffer_iterator<T, false> iterator;
|
||||
typedef ring_buffer_iterator<const T, false> const_iterator;
|
||||
typedef ring_buffer_iterator<T, true> reverse_iterator;
|
||||
|
20
src/core/ring_buffer_queue.hpp
Normal file
20
src/core/ring_buffer_queue.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file ring_buffer_queue.hpp std::queue backed by a ring buffer. */
|
||||
|
||||
#ifndef RING_BUFFER_QUEUE_HPP
|
||||
#define RING_BUFFER_QUEUE_HPP
|
||||
|
||||
#include "ring_buffer.hpp"
|
||||
|
||||
#include <queue>
|
||||
|
||||
template<class T>
|
||||
using ring_buffer_queue = std::queue<T, ring_buffer<T>>;
|
||||
|
||||
#endif /* RING_BUFFER_QUEUE_HPP */
|
@@ -2,13 +2,13 @@
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "demands.h"
|
||||
#include <queue>
|
||||
#include "../core/ring_buffer_queue.hpp"
|
||||
#include <algorithm>
|
||||
#include <tuple>
|
||||
|
||||
#include "../safeguards.h"
|
||||
|
||||
typedef std::queue<NodeID> NodeList;
|
||||
typedef ring_buffer_queue<NodeID> NodeList;
|
||||
|
||||
/**
|
||||
* Scale various things according to symmetric/asymmetric distribution.
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "../../fileio_func.h"
|
||||
#include "../../rev.h"
|
||||
#include "../../thread.h"
|
||||
#include "../../core/ring_buffer_queue.hpp"
|
||||
#include "../network_internal.h"
|
||||
|
||||
#include "http.h"
|
||||
@@ -23,7 +24,6 @@
|
||||
#include <curl/curl.h>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
#include "../../safeguards.h"
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
|
||||
static std::thread _http_thread;
|
||||
static std::atomic<bool> _http_thread_exit = false;
|
||||
static std::queue<std::unique_ptr<NetworkHTTPRequest>> _http_requests;
|
||||
static ring_buffer_queue<std::unique_ptr<NetworkHTTPRequest>> _http_requests;
|
||||
static std::mutex _http_mutex;
|
||||
static std::condition_variable _http_cv;
|
||||
#if defined(UNIX)
|
||||
|
@@ -10,13 +10,13 @@
|
||||
#include "../../stdafx.h"
|
||||
#include "script_event_types.hpp"
|
||||
|
||||
#include <queue>
|
||||
#include "../../core/ring_buffer_queue.hpp"
|
||||
|
||||
#include "../../safeguards.h"
|
||||
|
||||
/** The queue of events for a script. */
|
||||
struct ScriptEventData {
|
||||
std::queue<ScriptEvent *> stack; ///< The actual queue.
|
||||
ring_buffer_queue<ScriptEvent *> stack; ///< The actual queue.
|
||||
};
|
||||
|
||||
/* static */ void ScriptEventController::CreateEventPointer()
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#ifndef WORKER_THREAD_H
|
||||
#define WORKER_THREAD_H
|
||||
|
||||
#include <queue>
|
||||
#include "core/ring_buffer_queue.hpp"
|
||||
#include <mutex>
|
||||
#include <condition_variable>
|
||||
#if defined(__MINGW32__)
|
||||
@@ -33,7 +33,7 @@ private:
|
||||
uint workers_waiting = 0;
|
||||
bool exit = false;
|
||||
std::mutex lock;
|
||||
std::queue<WorkerJob> jobs;
|
||||
ring_buffer_queue<WorkerJob> jobs;
|
||||
std::condition_variable worker_wait_cv;
|
||||
std::condition_variable done_cv;
|
||||
|
||||
|
Reference in New Issue
Block a user