Go to the documentation of this file.00001
00022 #ifndef THREADPOOL_SCHEDULING_POLICIES_HPP_INCLUDED
00023 #define THREADPOOL_SCHEDULING_POLICIES_HPP_INCLUDED
00024
00025
00026 #include <queue>
00027 #include <deque>
00028
00029 #include "task_adaptors.hpp"
00030
00031 namespace boost { namespace threadpool
00032 {
00033
00044 template <typename Task = task_func>
00045 class fifo_scheduler
00046 {
00047 public:
00048 typedef Task task_type;
00049
00050 protected:
00051 std::deque<task_type> m_container;
00052
00053
00054 public:
00059 bool push(task_type const & task)
00060 {
00061 m_container.push_back(task);
00062 return true;
00063 }
00064
00067 void pop()
00068 {
00069 m_container.pop_front();
00070 }
00071
00075 task_type const & top() const
00076 {
00077 return m_container.front();
00078 }
00079
00084 size_t size() const
00085 {
00086 return m_container.size();
00087 }
00088
00093 bool empty() const
00094 {
00095 return m_container.empty();
00096 }
00097
00100 void clear()
00101 {
00102 m_container.clear();
00103 }
00104 };
00105
00106
00107
00117 template <typename Task = task_func>
00118 class lifo_scheduler
00119 {
00120 public:
00121 typedef Task task_type;
00122
00123 protected:
00124 std::deque<task_type> m_container;
00125
00126 public:
00131 bool push(task_type const & task)
00132 {
00133 m_container.push_front(task);
00134 return true;
00135 }
00136
00139 void pop()
00140 {
00141 m_container.pop_front();
00142 }
00143
00147 task_type const & top() const
00148 {
00149 return m_container.front();
00150 }
00151
00156 size_t size() const
00157 {
00158 return m_container.size();
00159 }
00160
00165 bool empty() const
00166 {
00167 return m_container.empty();
00168 }
00169
00172 void clear()
00173 {
00174 m_container.clear();
00175 }
00176
00177 };
00178
00179
00180
00192 template <typename Task = prio_task_func>
00193 class prio_scheduler
00194 {
00195 public:
00196 typedef Task task_type;
00197
00198 protected:
00199 std::priority_queue<task_type> m_container;
00200
00201
00202 public:
00207 bool push(task_type const & task)
00208 {
00209 m_container.push(task);
00210 return true;
00211 }
00212
00215 void pop()
00216 {
00217 m_container.pop();
00218 }
00219
00223 task_type const & top() const
00224 {
00225 return m_container.top();
00226 }
00227
00232 size_t size() const
00233 {
00234 return m_container.size();
00235 }
00236
00241 bool empty() const
00242 {
00243 return m_container.empty();
00244 }
00245
00248 void clear()
00249 {
00250 while(!m_container.empty())
00251 {
00252 m_container.pop();
00253 }
00254 }
00255 };
00256
00257
00258 } }
00259
00260
00261 #endif // THREADPOOL_SCHEDULING_POLICIES_HPP_INCLUDED
00262