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

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

@ -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;

@ -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;

Loading…
Cancel
Save