annotate DEPENDENCIES/generic/include/boost/thread/detail/counter.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 2 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 3 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 4 // (C) Copyright 2013 Vicente J. Botet Escriba
Chris@16 5
Chris@16 6 #ifndef BOOST_THREAD_COUNTER_HPP
Chris@16 7 #define BOOST_THREAD_COUNTER_HPP
Chris@16 8
Chris@16 9 #include <boost/thread/detail/config.hpp>
Chris@16 10 #include <boost/thread/detail/delete.hpp>
Chris@16 11
Chris@16 12 //#include <boost/thread/mutex.hpp>
Chris@16 13 //#include <boost/thread/lock_types.hpp>
Chris@16 14 #include <boost/thread/condition_variable.hpp>
Chris@16 15 #include <boost/chrono/duration.hpp>
Chris@16 16 #include <boost/chrono/time_point.hpp>
Chris@16 17 #include <boost/assert.hpp>
Chris@16 18
Chris@16 19 #include <boost/config/abi_prefix.hpp>
Chris@16 20
Chris@16 21 namespace boost
Chris@16 22 {
Chris@16 23 namespace detail {
Chris@16 24 struct counter
Chris@16 25 {
Chris@16 26 condition_variable cond_;
Chris@16 27 std::size_t value_;
Chris@16 28
Chris@16 29 counter(std::size_t value)
Chris@16 30 : value_(value)
Chris@16 31 {
Chris@16 32
Chris@16 33 }
Chris@16 34 counter& operator=(counter const& rhs)
Chris@16 35 {
Chris@16 36 value_ = rhs.value_;
Chris@16 37 return *this;
Chris@16 38 }
Chris@16 39 counter& operator=(std::size_t value)
Chris@16 40 {
Chris@16 41 value_ = value;
Chris@16 42 return *this;
Chris@16 43 }
Chris@16 44
Chris@16 45 operator std::size_t() const
Chris@16 46 {
Chris@16 47 return value_;
Chris@16 48 }
Chris@16 49 operator std::size_t&()
Chris@16 50 {
Chris@16 51 return value_;
Chris@16 52 }
Chris@16 53
Chris@16 54 void inc_and_notify_all()
Chris@16 55 {
Chris@16 56 ++value_;
Chris@16 57 cond_.notify_all();
Chris@16 58 }
Chris@16 59
Chris@16 60 void dec_and_notify_all()
Chris@16 61 {
Chris@16 62 --value_;
Chris@16 63 cond_.notify_all();
Chris@16 64 }
Chris@16 65 void assign_and_notify_all(counter const& rhs)
Chris@16 66 {
Chris@16 67 value_ = rhs.value_;
Chris@16 68 cond_.notify_all();
Chris@16 69 }
Chris@16 70 void assign_and_notify_all(std::size_t value)
Chris@16 71 {
Chris@16 72 value_ = value;
Chris@16 73 cond_.notify_all();
Chris@16 74 }
Chris@16 75 };
Chris@16 76 struct counter_is_not_zero
Chris@16 77 {
Chris@16 78 counter_is_not_zero(counter const& count) : count_(count) {}
Chris@16 79 bool operator()() const { return count_ != 0; }
Chris@16 80 counter const& count_;
Chris@16 81 };
Chris@16 82 struct counter_is_zero
Chris@16 83 {
Chris@16 84 counter_is_zero(counter const& count) : count_(count) {}
Chris@16 85 bool operator()() const { return count_ == 0; }
Chris@16 86 counter const& count_;
Chris@16 87 };
Chris@16 88 struct is_zero
Chris@16 89 {
Chris@16 90 is_zero(std::size_t& count) : count_(count) {}
Chris@16 91 bool operator()() const { return count_ == 0; }
Chris@16 92 std::size_t& count_;
Chris@16 93 };
Chris@16 94 struct not_equal
Chris@16 95 {
Chris@16 96 not_equal(std::size_t& x, std::size_t& y) : x_(x), y_(y) {}
Chris@16 97 bool operator()() const { return x_ != y_; }
Chris@16 98 std::size_t& x_;
Chris@16 99 std::size_t& y_;
Chris@16 100 };
Chris@16 101 }
Chris@16 102 } // namespace boost
Chris@16 103
Chris@16 104 #include <boost/config/abi_suffix.hpp>
Chris@16 105
Chris@16 106 #endif