![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/include/boost/graph/distributed/detail/ |
Upload File : |
// Copyright (C) 2004-2006 The Trustees of Indiana University. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Douglas Gregor // Andrew Lumsdaine #ifndef BOOST_FILTERED_QUEUE_HPP #define BOOST_FILTERED_QUEUE_HPP #ifndef BOOST_GRAPH_USE_MPI #error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included" #endif #include <algorithm> namespace boost { /** Queue adaptor that filters elements pushed into the queue * according to some predicate. */ template<typename Buffer, typename Predicate> class filtered_queue { public: typedef Buffer buffer_type; typedef Predicate predicate_type; typedef typename Buffer::value_type value_type; typedef typename Buffer::size_type size_type; /** * Constructs a new filtered queue with an initial buffer and a * predicate. * * @param buffer the initial buffer * @param pred the predicate */ explicit filtered_queue(const buffer_type& buffer = buffer_type(), const predicate_type& pred = predicate_type()) : buffer(buffer), pred(pred) {} /** Push a value into the queue. * * If the predicate returns @c true for @p x, pushes @p x into the * buffer. */ void push(const value_type& x) { if (pred(x)) buffer.push(x); } /** Pop the front element off the buffer. * * @pre @c !empty() */ void pop() { buffer.pop(); } /** Retrieve the front (top) element in the buffer. * * @pre @c !empty() */ value_type& top() { return buffer.top(); } /** * \overload */ const value_type& top() const { return buffer.top(); } /** Determine the number of elements in the buffer. */ size_type size() const { return buffer.size(); } /** Determine if the buffer is empty. */ bool empty() const { return buffer.empty(); } /** Get a reference to the underlying buffer. */ buffer_type& base() { return buffer; } const buffer_type& base() const { return buffer; } /** Swap the contents of this with @p other. */ void swap(filtered_queue& other) { using std::swap; swap(buffer, other.buffer); swap(pred, other.pred); } private: buffer_type buffer; predicate_type pred; }; /** Create a filtered queue. */ template<typename Buffer, typename Predicate> inline filtered_queue<Buffer, Predicate> make_filtered_queue(const Buffer& buffer, const Predicate& pred) { return filtered_queue<Buffer, Predicate>(buffer, pred); } /** Swap a filtered_queue. */ template<typename Buffer, typename Predicate> inline void swap(filtered_queue<Buffer, Predicate>& x, filtered_queue<Buffer, Predicate>& y) { x.swap(y); } } // end namespace boost #endif // BOOST_FILTERED_QUEUE_HPP