.. _program_listing_file_falcon_ringbuffer.hpp: Program Listing for File ringbuffer.hpp ======================================= |exhale_lsh| :ref:`Return to documentation for file ` (``falcon/ringbuffer.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // --------------------------------------------------------------------- // This file is part of falcon-core. // // Copyright (C) 2015, 2016, 2017 Neuro-Electronics Research Flanders // // Falcon-server 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, either version 3 of the License, or // (at your option) any later version. // // Falcon-server 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 falcon-core. If not, see . // --------------------------------------------------------------------- #pragma once #include "disruptor/batch_descriptor.h" #include "disruptor/claim_strategy.h" #include "disruptor/interface.h" #include "disruptor/ring_buffer.h" #include "disruptor/wait_strategy.h" template class RingBuffer : public disruptor::Sequencer { public: RingBuffer(const T & prototype, int buffer_size, disruptor::ClaimStrategyOption claim_strategy_option, disruptor::WaitStrategyOption wait_strategy_option) : disruptor::Sequencer(buffer_size, claim_strategy_option, wait_strategy_option), buffer_size_(buffer_size), mask_(buffer_size - 1), events_(buffer_size, prototype) { } T* Get(const int64_t& sequence) { return &events_[sequence & mask_]; } private: // Members int buffer_size_; int mask_; std::vector events_; DISALLOW_COPY_AND_ASSIGN(RingBuffer); }; typedef disruptor::ProcessingSequenceBarrier RingBarrier; typedef disruptor::Sequence RingSequence; typedef disruptor::ClaimStrategyOption ClaimStrategy; typedef disruptor::WaitStrategyOption WaitStrategy; typedef disruptor::AlertException RingAlertException; typedef disruptor::BatchDescriptor RingBatch;