size_policies.hpp
Go to the documentation of this file.
00001 
00018 #ifndef THREADPOOL_SIZE_POLICIES_HPP_INCLUDED
00019 #define THREADPOOL_SIZE_POLICIES_HPP_INCLUDED
00020 
00021 
00022 
00024 namespace boost { namespace threadpool
00025 {
00026 
00031   template<typename Pool>
00032   struct empty_controller
00033   {
00034     empty_controller(typename Pool::size_policy_type&, shared_ptr<Pool>) {}
00035   };
00036 
00037 
00042   template< typename Pool >
00043   class resize_controller
00044   {
00045     typedef typename Pool::size_policy_type size_policy_type;
00046     reference_wrapper<size_policy_type> m_policy;
00047     shared_ptr<Pool> m_pool;                           
00048 
00049   public:
00050     resize_controller(size_policy_type& policy, shared_ptr<Pool> pool)
00051       : m_policy(policy)
00052       , m_pool(pool)
00053     {
00054     }
00055 
00056     bool resize(size_t worker_count)
00057     {
00058       return m_policy.get().resize(worker_count);
00059     }
00060   };
00061 
00062 
00067   template<typename Pool>
00068   class static_size
00069   {
00070     reference_wrapper<Pool volatile> m_pool;
00071 
00072   public:
00073     static void init(Pool& pool, size_t const worker_count)
00074     {
00075       pool.resize(worker_count);
00076     }
00077 
00078     static_size(Pool volatile & pool)
00079       : m_pool(pool)
00080     {}
00081 
00082     bool resize(size_t const worker_count)
00083     {
00084       return m_pool.get().resize(worker_count);
00085     }
00086 
00087     void worker_died_unexpectedly(size_t const new_worker_count)
00088     {
00089       m_pool.get().resize(new_worker_count + 1);
00090     }
00091 
00092     // TODO this functions are not called yet
00093     void task_scheduled() {}
00094     void task_finished() {}
00095   };
00096 
00097 } } // namespace boost::threadpool
00098 
00099 #endif // THREADPOOL_SIZE_POLICIES_HPP_INCLUDED


or_libs
Author(s): raphael
autogenerated on Mon Oct 6 2014 02:53:18