summaryrefslogtreecommitdiff
path: root/ACE/Kokyu/Kokyu_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/Kokyu/Kokyu_defs.h')
-rw-r--r--ACE/Kokyu/Kokyu_defs.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/ACE/Kokyu/Kokyu_defs.h b/ACE/Kokyu/Kokyu_defs.h
new file mode 100644
index 00000000000..b854d241144
--- /dev/null
+++ b/ACE/Kokyu/Kokyu_defs.h
@@ -0,0 +1,191 @@
+/* -*- C++ -*- */
+/**
+ * @file Kokyu_defs.h
+ *
+ * $Id$
+ *
+ * @author Venkita Subramonian (venkita@cs.wustl.edu)
+ *
+ */
+
+#ifndef KOKYU_DEFS_H
+#define KOKYU_DEFS_H
+#include /**/ "ace/pre.h"
+#include "ace/Containers_T.h"
+#include "ace/Time_Value.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Message_Block.h"
+#include "ace/Sched_Params.h"
+#include "ace/Malloc_Allocator.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "kokyu_export.h"
+
+namespace Kokyu
+{
+ typedef long Priority_t;
+ typedef ACE_Time_Value Deadline_t; //absolute deadline
+ typedef ACE_Time_Value Execution_Time_t; //execution time
+ //typedef int Guid_t;
+
+ enum Dispatching_Type_t
+ // Defines the type of prioritization strategy
+ // to be used by a dispatching queue
+ {
+ FIFO_DISPATCHING,
+ DEADLINE_DISPATCHING,
+ LAXITY_DISPATCHING
+ };
+
+ enum Criticality_t
+ // Defines the criticality of the operation.
+ // For use with Dynamic Scheduler.
+ {
+ VERY_LOW_CRITICALITY,
+ LOW_CRITICALITY,
+ MEDIUM_CRITICALITY,
+ HIGH_CRITICALITY,
+ VERY_HIGH_CRITICALITY
+ };
+
+ enum Importance_t
+ // Defines the importance of the operation,
+ // which can be used by the RtecScheduler as a
+ // "tie-breaker" when other scheduling
+ // parameters are equal.
+ {
+ VERY_LOW_IMPORTANCE,
+ LOW_IMPORTANCE,
+ MEDIUM_IMPORTANCE,
+ HIGH_IMPORTANCE,
+ VERY_HIGH_IMPORTANCE
+ };
+
+ struct Kokyu_Export Reordering_Queue_Attributes
+ {
+ Reordering_Queue_Attributes ();
+ unsigned long static_bit_field_mask_;
+ unsigned long static_bit_field_shift_;
+ unsigned long dynamic_priority_max_;
+ unsigned long dynamic_priority_offset_;
+ };
+
+ struct Kokyu_Export ConfigInfo
+ {
+ Priority_t preemption_priority_;
+
+ // OS priority of the dispatching thread associated with the queue
+ Priority_t thread_priority_;
+
+ // type of dispatching queue
+ Dispatching_Type_t dispatching_type_;
+
+ //allocator to be used for dynamic memory allocation. If each
+ //thread gets its own memory pool, contention will be less
+ ACE_Allocator *allocator_;
+
+ Reordering_Queue_Attributes reordering_flags_;
+
+ ConfigInfo ();
+ };
+
+ typedef ACE_Array<ConfigInfo> ConfigInfoSet;
+
+ class Kokyu_Export Dispatcher_Attributes
+ {
+ public:
+ ConfigInfoSet config_info_set_;
+ int immediate_activation_;
+
+ public:
+ Dispatcher_Attributes ();
+ void sched_policy (int);
+ void sched_scope (int);
+ int thread_creation_flags () const;
+
+ private:
+ int sched_policy_;
+ int sched_scope_;
+ int base_thread_creation_flags_;
+ };
+
+
+ struct Kokyu_Export QoSDescriptor
+ {
+ Priority_t preemption_priority_;
+ Deadline_t deadline_;
+ Execution_Time_t execution_time_;
+ Importance_t importance_;
+ };
+
+ enum Block_Flag_t {BLOCK, UNBLOCK};
+
+ class Kokyu_Export Dispatch_Command
+ {
+ public:
+ Dispatch_Command(int dont_delete = 0,
+ ACE_Allocator *allocator = 0);
+ //dont_delete indicates whether this object needs to be deleted once processed.
+ //allocator indicates the ACE_Allocator, if any, from which this object was created.
+ //This same allocator has to be used for the deletion also
+
+ /// Command callback
+ virtual int execute () = 0;
+
+ int can_be_deleted () const;
+
+ void destroy (void);
+ protected:
+ /// Destructor
+ // only inheritance is possible and object should be on heap,
+ // since object could be handed over to a different thread.
+ virtual ~Dispatch_Command (void);
+
+ private:
+ int dont_delete_;
+ ACE_Allocator *allocator_;
+ //if this object has to be deleted, then delete it using the allocator
+ //if one is present.
+ };
+
+ enum DSRT_Sched_Type_t
+ {
+ DSRT_FP,
+ DSRT_MUF,
+ DSRT_MIF
+ };
+
+ enum DSRT_Dispatcher_Impl_t
+ {
+ DSRT_CV_BASED,
+ DSRT_OS_BASED
+ };
+
+ struct Kokyu_Export DSRT_ConfigInfo
+ {
+ //not used currently
+ DSRT_Sched_Type_t sched_strategy_;
+
+ ACE_Sched_Params::Policy sched_policy_;
+ int sched_scope_;
+
+ //type of implementation
+ DSRT_Dispatcher_Impl_t impl_type_;
+
+ DSRT_ConfigInfo ();
+ };
+
+} //end of namespace
+
+//to satisfy ACE_Array<ConfigInfo>
+ACE_INLINE bool operator != (const Kokyu::ConfigInfo& lhs, const Kokyu::ConfigInfo& rhs);
+
+#if defined (__ACE_INLINE__)
+#include "Kokyu_defs.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /* KOKYU_DEFS_H */