Ring buffer: Use as backing for std::queue uses

pull/590/head
Jonathan G Rennison 10 months ago
parent 2296b92ea2
commit e912cfc19d

@ -29,6 +29,7 @@ add_files(
random_func.cpp random_func.cpp
random_func.hpp random_func.hpp
ring_buffer.hpp ring_buffer.hpp
ring_buffer_queue.hpp
serialisation.cpp serialisation.cpp
serialisation.hpp serialisation.hpp
smallstack_type.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<T, false> iterator;
typedef ring_buffer_iterator<const T, false> const_iterator; typedef ring_buffer_iterator<const T, false> const_iterator;
typedef ring_buffer_iterator<T, true> reverse_iterator; typedef ring_buffer_iterator<T, true> reverse_iterator;

@ -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 "../stdafx.h"
#include "demands.h" #include "demands.h"
#include <queue> #include "../core/ring_buffer_queue.hpp"
#include <algorithm> #include <algorithm>
#include <tuple> #include <tuple>
#include "../safeguards.h" #include "../safeguards.h"
typedef std::queue<NodeID> NodeList; typedef ring_buffer_queue<NodeID> NodeList;
/** /**
* Scale various things according to symmetric/asymmetric distribution. * Scale various things according to symmetric/asymmetric distribution.

@ -14,6 +14,7 @@
#include "../../fileio_func.h" #include "../../fileio_func.h"
#include "../../rev.h" #include "../../rev.h"
#include "../../thread.h" #include "../../thread.h"
#include "../../core/ring_buffer_queue.hpp"
#include "../network_internal.h" #include "../network_internal.h"
#include "http.h" #include "http.h"
@ -23,7 +24,6 @@
#include <curl/curl.h> #include <curl/curl.h>
#include <memory> #include <memory>
#include <mutex> #include <mutex>
#include <queue>
#include "../../safeguards.h" #include "../../safeguards.h"
@ -69,7 +69,7 @@ public:
static std::thread _http_thread; static std::thread _http_thread;
static std::atomic<bool> _http_thread_exit = false; 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::mutex _http_mutex;
static std::condition_variable _http_cv; static std::condition_variable _http_cv;
#if defined(UNIX) #if defined(UNIX)

@ -10,13 +10,13 @@
#include "../../stdafx.h" #include "../../stdafx.h"
#include "script_event_types.hpp" #include "script_event_types.hpp"
#include <queue> #include "../../core/ring_buffer_queue.hpp"
#include "../../safeguards.h" #include "../../safeguards.h"
/** The queue of events for a script. */ /** The queue of events for a script. */
struct ScriptEventData { struct ScriptEventData {
std::queue<ScriptEvent *> stack; ///< The actual queue. ring_buffer_queue<ScriptEvent *> stack; ///< The actual queue.
}; };
/* static */ void ScriptEventController::CreateEventPointer() /* static */ void ScriptEventController::CreateEventPointer()

@ -10,7 +10,7 @@
#ifndef WORKER_THREAD_H #ifndef WORKER_THREAD_H
#define WORKER_THREAD_H #define WORKER_THREAD_H
#include <queue> #include "core/ring_buffer_queue.hpp"
#include <mutex> #include <mutex>
#include <condition_variable> #include <condition_variable>
#if defined(__MINGW32__) #if defined(__MINGW32__)
@ -33,7 +33,7 @@ private:
uint workers_waiting = 0; uint workers_waiting = 0;
bool exit = false; bool exit = false;
std::mutex lock; std::mutex lock;
std::queue<WorkerJob> jobs; ring_buffer_queue<WorkerJob> jobs;
std::condition_variable worker_wait_cv; std::condition_variable worker_wait_cv;
std::condition_variable done_cv; std::condition_variable done_cv;

Loading…
Cancel
Save