PFUNC  1.0
pfunc/attribute.hpp
Go to the documentation of this file.
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