summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_Sched_Filter.h
blob: dc5b62604da6ec2e452d787aa935ea4452948410 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* -*- C++ -*- */
// $Id$
//
// ============================================================================
//
// = LIBRARY
//   ORBSVCS Real-time Event Channel
//
// = FILENAME
//   EC_Sched_Filter
//
// = AUTHOR
//   Carlos O'Ryan (coryan@cs.wustl.edu)
//
// = CREDITS
//   Based on previous work by Tim Harrison (harrison@cs.wustl.edu)
//   and other members of the DOC group.
//   More details can be found in:
//   http://www.cs.wustl.edu/~schmidt/oopsla.ps.gz
//   http://www.cs.wustl.edu/~schmidt/JSAC-98.ps.gz
//
//
// ============================================================================

#ifndef TAO_EC_SCHED_FILTER_H
#define TAO_EC_SCHED_FILTER_H

#include "orbsvcs/RtecSchedulerC.h"
#include "EC_Filter.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

class TAO_ORBSVCS_Export TAO_EC_Sched_Filter : public TAO_EC_Filter
{
  // = TITLE
  //   Decorate a filter with scheduling information
  //
  // = DESCRIPTION
  //   This filter decorates a regular filter with scheduling
  //   information. It creates a new RT_Info entry for the filter and
  //   it adds the dependencies between the filter and any childrens
  //   it may have.
  //
  // = MEMORY MANAGMENT
  //   It assumes ownership of the children.
  //
public:
  TAO_EC_Sched_Filter (const char* name,
                       RtecScheduler::handle_t rt_info,
                       RtecScheduler::Scheduler_ptr scheduler,
                       TAO_EC_Filter* body,
                       RtecScheduler::handle_t body_info,
                       RtecScheduler::handle_t parent_info,
                       RtecScheduler::Info_Type_t info_type);
  // Constructor.
  // It assumes ownership of the <body>, makes a copy of the other
  // parameters

  virtual ~TAO_EC_Sched_Filter (void);
  // Destructor

  // = The TAO_EC_Filter methods, please check the documentation in
  // TAO_EC_Filter.
  virtual ChildrenIterator begin (void) const;
  virtual ChildrenIterator end (void) const;
  virtual int size (void) const;
  virtual int filter (const RtecEventComm::EventSet& event,
                      TAO_EC_QOS_Info& qos_info,
                      CORBA::Environment& env);
  virtual int filter_nocopy (RtecEventComm::EventSet& event,
                             TAO_EC_QOS_Info& qos_info,
                             CORBA::Environment& env);
  virtual void push (const RtecEventComm::EventSet& event,
                     TAO_EC_QOS_Info& qos_info,
                     CORBA::Environment& env);
  virtual void push_nocopy (RtecEventComm::EventSet& event,
                            TAO_EC_QOS_Info& qos_info,
                            CORBA::Environment& env);
  virtual void clear (void);
  virtual CORBA::ULong max_event_size (void) const;
  virtual int can_match (const RtecEventComm::EventHeader& header) const;
  virtual int add_dependencies (const RtecEventComm::EventHeader& header,
                                const TAO_EC_QOS_Info &qos_info,
                                CORBA::Environment &ACE_TRY_ENV);
  virtual void get_qos_info (TAO_EC_QOS_Info& qos_info,
                             CORBA::Environment &ACE_TRY_ENV);

private:
  ACE_UNIMPLEMENTED_FUNC (TAO_EC_Sched_Filter
                              (const TAO_EC_Sched_Filter&))
  ACE_UNIMPLEMENTED_FUNC (TAO_EC_Sched_Filter& operator=
                              (const TAO_EC_Sched_Filter&))

  void init_rt_info (CORBA::Environment& env);
  // Initialize our RT_Info handle and dependencies

  void compute_qos_info (TAO_EC_QOS_Info& qos_info,
                         CORBA::Environment &ACE_TRY_ENV);
  // Compute a new qos_info to push up.

private:
  RtecScheduler::handle_t rt_info_;
  // The RT_Info handle for this object

  int rt_info_computed_;
  // Has the Scheduler been updated?

  ACE_CString name_;
  // Our operation name

  RtecScheduler::Scheduler_var scheduler_;
  // The scheduler we are going to use

  TAO_EC_Filter* body_;
  // The implementation

  RtecScheduler::handle_t body_info_;
  // The RT_Info handle for the body

  RtecScheduler::handle_t parent_info_;
  // The RT_Info handle for the parent

  RtecScheduler::Info_Type_t info_type_;
  // Required for the scheduling service
};

#if defined (__ACE_INLINE__)
#include "EC_Sched_Filter.i"
#endif /* __ACE_INLINE__ */

#endif /* TAO_EC_SCHED_FILTER_H */