PFUNC
1.0
|
00001 #ifndef PFUNC_ATTRIBUTE_HPP 00002 #define PFUNC_ATTRIBUTE_HPP 00003 00009 #include <limits> 00010 #include <pfunc/trampolines.hpp> 00011 00012 namespace pfunc { namespace detail { 00013 00017 const static unsigned int QUEUE_CURRENT_THREAD=0xFFFF; 00018 00023 const static unsigned int PFUNC_DEFAULT_TASK_LEVEL = 0; 00024 00038 template <typename Priority, 00039 typename Compare> 00040 struct attribute { 00041 public: 00042 typedef Compare compare_type; 00043 typedef Priority priority_type; 00044 typedef unsigned int qnum_type; 00045 typedef unsigned int num_waiters_type; 00046 typedef bool nested_type; 00047 typedef bool grouped_type; 00048 typedef unsigned int level_type; 00050 private: 00051 qnum_type queue_number; 00052 priority_type priority; 00053 num_waiters_type num_waiters; 00054 nested_type is_nested; 00055 grouped_type join_group; 00056 level_type level; 00058 public: 00062 const qnum_type& get_queue_number () const { return queue_number; } 00063 00067 const priority_type& get_priority () const { return priority; } 00068 00072 const num_waiters_type& get_num_waiters () const { 00073 return num_waiters; 00074 } 00075 00080 const nested_type& get_nested () const { return is_nested; } 00081 00086 const grouped_type get_grouped () const { return join_group; } 00087 00091 const level_type& get_level () const { return level; } 00092 00097 void set_queue_number (const qnum_type& qnum) {queue_number = qnum;} 00098 00102 void set_priority (const priority_type& prio) { priority = prio; } 00103 00107 void set_num_waiters (const num_waiters_type& nwait) { 00108 num_waiters = nwait; 00109 } 00110 00114 void set_nested (const nested_type& nest) { is_nested = nest; } 00115 00119 void set_grouped (const grouped_type& grouped) { 00120 join_group = grouped; 00121 } 00122 00126 void set_level (const level_type& new_level) { level = new_level; } 00127 00131 attribute (const nested_type& is_nested = true, 00132 const grouped_type& join_group = false) : 00133 queue_number (QUEUE_CURRENT_THREAD), 00134 priority ((std::numeric_limits<Priority>::min)()), 00135 num_waiters (1), 00136 is_nested (is_nested), 00137 join_group (join_group), 00138 level (PFUNC_DEFAULT_TASK_LEVEL) {} 00139 00143 friend bool operator<(const attribute& one, const attribute& two) { 00144 compare_type comp; 00145 return comp (one.priority, two.priority); 00146 } 00147 }; /* struct attribute */ 00148 00149 } /* detail */ } /* namespace pfunc */ 00150 00151 #endif // PFUNC_ATTRIBUTE_HPP