PHP 8.3.31
Preview: barrier.hpp Size: 7.25 KB
/opt/cpanel/ea-ruby27/src/passenger-release-6.1.2/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp

// Copyright (C) 2002-2003
// David Moore, William E. Kempf
// Copyright (C) 2007-8 Anthony Williams
// (C) Copyright 2013 Vicente J. Botet Escriba
//
//  Distributed under 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)

#ifndef BOOST_BARRIER_JDM030602_HPP
#define BOOST_BARRIER_JDM030602_HPP

#include <boost/thread/detail/config.hpp>
#include <boost/thread/detail/delete.hpp>

#include <boost/throw_exception.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/lock_types.hpp>
#include <boost/thread/condition_variable.hpp>
#include <string>
#include <stdexcept>
#include <boost/thread/detail/nullary_function.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/is_void.hpp>
#include <boost/core/enable_if.hpp>
#include <boost/utility/result_of.hpp>

#include <boost/config/abi_prefix.hpp>

namespace boost
{
  namespace thread_detail
  {
    typedef detail::nullary_function<void()> void_completion_function;
    typedef detail::nullary_function<size_t()> size_completion_function;

    struct default_barrier_reseter
    {
      unsigned int size_;
      default_barrier_reseter(unsigned int size) :
        size_(size)
      {
      }
      BOOST_THREAD_MOVABLE(default_barrier_reseter)
      //BOOST_THREAD_COPYABLE_AND_MOVABLE(default_barrier_reseter)

      default_barrier_reseter(default_barrier_reseter const& other) BOOST_NOEXCEPT :
      size_(other.size_)
      {
      }
      default_barrier_reseter(BOOST_THREAD_RV_REF(default_barrier_reseter) other) BOOST_NOEXCEPT :
      size_(BOOST_THREAD_RV(other).size_)
      {
      }

      unsigned int operator()()
      {
        return size_;
      }
    };

    struct void_functor_barrier_reseter
    {
      unsigned int size_;
      void_completion_function fct_;
      template <typename F>
      void_functor_barrier_reseter(unsigned int size, BOOST_THREAD_RV_REF(F) funct)
      : size_(size), fct_(boost::move(funct))
      {}
      template <typename F>
      void_functor_barrier_reseter(unsigned int size, F& funct)
      : size_(size), fct_(funct)
      {}

      BOOST_THREAD_MOVABLE(void_functor_barrier_reseter)
      //BOOST_THREAD_COPYABLE_AND_MOVABLE(void_functor_barrier_reseter)

      void_functor_barrier_reseter(void_functor_barrier_reseter const& other) BOOST_NOEXCEPT :
      size_(other.size_), fct_(other.fct_)
      {
      }
      void_functor_barrier_reseter(BOOST_THREAD_RV_REF(void_functor_barrier_reseter) other) BOOST_NOEXCEPT :
      size_(BOOST_THREAD_RV(other).size_), fct_(BOOST_THREAD_RV(other).fct_)
      //size_(BOOST_THREAD_RV(other).size_), fct_(boost::move(BOOST_THREAD_RV(other).fct_))
      {
      }

      unsigned int operator()()
      {
        fct_();
        return size_;
      }
    };
    struct void_fct_ptr_barrier_reseter
    {
      unsigned int size_;
      void(*fct_)();
      void_fct_ptr_barrier_reseter(unsigned int size, void(*funct)()) :
        size_(size), fct_(funct)
      {
      }
      BOOST_THREAD_MOVABLE(void_fct_ptr_barrier_reseter)
      //BOOST_THREAD_COPYABLE_AND_MOVABLE(void_fct_ptr_barrier_reseter)

      void_fct_ptr_barrier_reseter(void_fct_ptr_barrier_reseter const& other) BOOST_NOEXCEPT :
      size_(other.size_), fct_(other.fct_)
      {
      }
      void_fct_ptr_barrier_reseter(BOOST_THREAD_RV_REF(void_fct_ptr_barrier_reseter) other) BOOST_NOEXCEPT :
      size_(BOOST_THREAD_RV(other).size_), fct_(BOOST_THREAD_RV(other).fct_)
      {
      }
      unsigned int operator()()
      {
        fct_();
        return size_;
      }
    };
  }
  //BOOST_THREAD_DCL_MOVABLE(thread_detail::default_barrier_reseter)
  //BOOST_THREAD_DCL_MOVABLE(thread_detail::void_functor_barrier_reseter)
  //BOOST_THREAD_DCL_MOVABLE(thread_detail::void_fct_ptr_barrier_reseter)

  class barrier
  {
    static inline unsigned int check_counter(unsigned int count)
    {
      if (count == 0) boost::throw_exception(
          thread_exception(system::errc::invalid_argument, "barrier constructor: count cannot be zero."));
      return count;
    }
    struct dummy
    {
    };

  public:
    BOOST_THREAD_NO_COPYABLE( barrier)

    explicit barrier(unsigned int count) :
      m_count(check_counter(count)), m_generation(0), fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count)))
    {
    }

    template <typename F>
    barrier(
        unsigned int count,
        BOOST_THREAD_RV_REF(F) funct,
        typename enable_if<
        typename is_void<typename result_of<F()>::type>::type, dummy*
        >::type=0
    )
    : m_count(check_counter(count)),
      m_generation(0),
      fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_functor_barrier_reseter(count,
        boost::move(funct)))
    )
    {
    }
    template <typename F>
    barrier(
        unsigned int count,
        F &funct,
        typename enable_if<
        typename is_void<typename result_of<F()>::type>::type, dummy*
        >::type=0
    )
    : m_count(check_counter(count)),
      m_generation(0),
      fct_(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_functor_barrier_reseter(count,
        funct))
    )
    {
    }

    template <typename F>
    barrier(
        unsigned int count,
        BOOST_THREAD_RV_REF(F) funct,
        typename enable_if<
        typename is_same<typename result_of<F()>::type, unsigned int>::type, dummy*
        >::type=0
    )
    : m_count(check_counter(count)),
      m_generation(0),
      fct_(boost::move(funct))
    {
    }
    template <typename F>
    barrier(
        unsigned int count,
        F& funct,
        typename enable_if<
        typename is_same<typename result_of<F()>::type, unsigned int>::type, dummy*
        >::type=0
    )
    : m_count(check_counter(count)),
      m_generation(0),
      fct_(funct)
    {
    }

    barrier(unsigned int count, void(*funct)()) :
      m_count(check_counter(count)), m_generation(0),
      fct_(funct
          ? BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::void_fct_ptr_barrier_reseter(count, funct))))
          : BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count))))
      )
    {
    }
    barrier(unsigned int count, unsigned int(*funct)()) :
      m_count(check_counter(count)), m_generation(0),
      fct_(funct
          ? BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(funct))
          : BOOST_THREAD_MAKE_RV_REF(thread_detail::size_completion_function(BOOST_THREAD_MAKE_RV_REF(thread_detail::default_barrier_reseter(count))))
      )
    {
    }

    bool wait()
    {
      boost::unique_lock < boost::mutex > lock(m_mutex);
      unsigned int gen = m_generation;

      if (--m_count == 0)
      {
        m_generation++;
        m_count = static_cast<unsigned int>(fct_());
        BOOST_ASSERT(m_count != 0);
        lock.unlock();
        m_cond.notify_all();
        return true;
      }

      while (gen == m_generation)
        m_cond.wait(lock);
      return false;
    }

    void count_down_and_wait()
    {
      wait();
    }

  private:
    mutex m_mutex;
    condition_variable m_cond;
    unsigned int m_count;
    unsigned int m_generation;
    thread_detail::size_completion_function fct_;
  };

} // namespace boost

#include <boost/config/abi_suffix.hpp>

#endif

Directory Contents

Dirs: 8 × Files: 54

Name Size Perms Modified Actions
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
csbl DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
detail DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
executors DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
futures DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
pthread DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
v2 DIR
- drwxr-xr-x 2026-02-11 07:32:10
Edit Download
7.25 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.49 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
6.42 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
490 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
634 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
531 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.07 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
6.21 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
476 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
10.62 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
4.67 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
198.99 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
596 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.04 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
4.85 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
5.90 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
4.02 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
7.67 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
572 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
12.89 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
4.68 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.26 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.24 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
701 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.21 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
33.61 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.14 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
6.20 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.30 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
925 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.05 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.07 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
5.67 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
4.68 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.50 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.29 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
8.74 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.16 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.37 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
6.10 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
30.42 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
595 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
571 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
3.83 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
385 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.33 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.27 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
803 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
531 B lrw-r--r-- 2026-01-27 23:50:52
Edit Download
1.55 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.54 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
5.10 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
5.91 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download
2.33 KB lrw-r--r-- 2026-01-27 23:50:52
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).