diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:30 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:30 +0000 |
commit | c44379cc7d9c7aa113989237ab0f56db12aa5219 (patch) | |
tree | 66a84b20d47f2269d8bdc6e0323f338763424d3a /ACE/Kokyu/Dispatcher_Task.h | |
parent | 3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c (diff) | |
download | ATCD-c44379cc7d9c7aa113989237ab0f56db12aa5219.tar.gz |
Repo restructuring
Diffstat (limited to 'ACE/Kokyu/Dispatcher_Task.h')
-rw-r--r-- | ACE/Kokyu/Dispatcher_Task.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/ACE/Kokyu/Dispatcher_Task.h b/ACE/Kokyu/Dispatcher_Task.h new file mode 100644 index 00000000000..0bb91313f47 --- /dev/null +++ b/ACE/Kokyu/Dispatcher_Task.h @@ -0,0 +1,106 @@ +/* -*- C++ -*- */ +/** + * @file Dispatcher_Task.h + * + * $Id$ + * + * @author Venkita Subramonian (venkita@cs.wustl.edu) + * + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu), + * Chris Gill, Carlos O'Ryan and other members of the DOC group. + */ + +#ifndef DISPATCHER_TASK_H +#define DISPATCHER_TASK_H +#include /**/ "ace/pre.h" +#include "ace/Task.h" +#include "ace/Lock_Adapter_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "Kokyu_defs.h" + +namespace Kokyu +{ + +class Dispatch_Queue_Item : public ACE_Message_Block +{ +public: + Dispatch_Queue_Item ( + const Dispatch_Command* cmd, + const QoSDescriptor& qos_info, + ACE_Allocator* mb_allocator =0); + + Dispatch_Queue_Item ( + const Dispatch_Command* cmd, + const QoSDescriptor& qos_info, + ACE_Data_Block* data_block, + int flags, + ACE_Allocator* mb_allocator =0); + + Dispatch_Command* command (); + +private: + void init_i(const QoSDescriptor&); + +private: + const Dispatch_Command* command_; + QoSDescriptor qos_info_; +}; + +/** + * @class Dispatcher_Task + * + * @brief Implement the dispatching queues for FIFO and Priority + * dispatching. + * + */ +class Dispatcher_Task : public ACE_Task<ACE_SYNCH> +{ +public: + /// Constructor + Dispatcher_Task (const ConfigInfo& config_info, + ACE_Thread_Manager* thr_manager = 0); + + + ~Dispatcher_Task (); + int initialize(); + + int enqueue (const Dispatch_Command* cmd, + const QoSDescriptor& qos_info); + + /// Process the events in the queue. + int svc (void); + + const ConfigInfo& get_curr_config_info() const; + Priority_t preemption_priority() const; + +private: + static int get_native_prio(); + +private: + ConfigInfo curr_config_info_; + + ACE_Allocator *allocator_; + int own_allocator_; + + /// Helper data structure to minimize memory allocations... + ACE_Locked_Data_Block<ACE_Lock_Adapter<ACE_SYNCH_MUTEX> > data_block_; + + /// The queue + ACE_Message_Queue<ACE_SYNCH>* the_queue_; + + ACE_Deadline_Message_Strategy deadline_msg_strategy_; + ACE_Laxity_Message_Strategy laxity_msg_strategy_; +}; + +} //end of namespace + +#if defined (__ACE_INLINE__) +#include "Dispatcher_Task.i" +#endif /* __ACE_INLINE__ */ + +#include /**/ "ace/post.h" +#endif /* DISPATCHER_TASK_H */ |