📄 event_channel.i
字号:
ACE_INLINE void
ACE_ES_Consumer_Rep::disconnect (void)
{
disconnected_ = 1;
}
// ************************************************************
ACE_INLINE ACE_RTU_Manager *
ACE_EventChannel::rtu_manager (void)
{
return rtu_manager_;
}
ACE_INLINE
ACE_RTU_Manager::ACE_RTU_Manager (int active)
: active_ (active),
should_preempt_ (0),
not_done_ (0),
priority_ (ACE_Scheduler_MIN_PREEMPTION_PRIORITY)
{
}
ACE_INLINE int
ACE_RTU_Manager::should_preempt (void)
{
if (!active_)
return 0;
else
{
// This routine was dead-code, but I'll leave it here until I
// find out what it is supposed to do.
ACE_ERROR ((LM_WARNING,
"EC (%t) RTU_Manager::should_preempt - obsolete\n"));
int should_preempt = should_preempt_;
should_preempt_ = 0;
return should_preempt;
}
}
ACE_INLINE void
ACE_RTU_Manager::should_preempt (int s)
{
should_preempt_ = s;
}
ACE_INLINE int
ACE_RTU_Manager::not_done (void)
{
int not_done = not_done_;
not_done_ = 0;
return not_done;
}
ACE_INLINE void
ACE_RTU_Manager::not_done (int nd)
{
not_done_ = nd;
}
ACE_INLINE RtecScheduler::OS_Priority
ACE_RTU_Manager::priority (void)
{
return priority_;
}
ACE_INLINE void
ACE_RTU_Manager::priority (RtecScheduler::OS_Priority p)
{
priority_ = p;
}
// ************************************************************
ACE_INLINE
ACE_ES_Consumer_Rep_Timeout::ACE_ES_Consumer_Rep_Timeout (void)
: timer_id_ (0),
preemption_priority_ (ACE_Scheduler_MIN_PREEMPTION_PRIORITY),
timeout_event_ ()
{
}
ACE_INLINE void
ACE_ES_Consumer_Rep_Timeout::init (ACE_ES_Consumer_Correlation *correlation,
RtecEventChannelAdmin::Dependency &dep)
{
TAO_EC_Event_Set *temp = TAO_EC_Event_Set::_create (dep.event);
// @@ TODO throw an exception
if (temp == 0)
{
ACE_ERROR ((LM_ERROR, "%p.\n", "ACE_ES_Consumer_Rep_Timeout::init"));
return;
}
this->timeout_event_ = TAO_EC_Event (temp, 0);
TAO_EC_Event_Set::_release (temp);
ACE_ES_Consumer_Rep::init (correlation, dep);
}
ACE_INLINE int
ACE_ES_Consumer_Rep_Timeout::timer_id (void)
{
return timer_id_;
}
ACE_INLINE void
ACE_ES_Consumer_Rep_Timeout::timer_id (int id)
{
timer_id_ = id;
}
ACE_INLINE RtecScheduler::OS_Priority
ACE_ES_Consumer_Rep_Timeout::preemption_priority (void)
{
return preemption_priority_;
}
ACE_INLINE void
ACE_ES_Consumer_Rep_Timeout::preemption_priority (RtecScheduler::OS_Priority p)
{
preemption_priority_ = p;
}
// ************************************************************
ACE_INLINE void
ACE_ES_Consumer_Correlation::suspend (void)
{
for (int x=0; x < n_timer_reps_; x++)
timer_reps_[x].suspend ();
for (int y=0; y < n_consumer_reps_; y++)
consumer_reps_[y]->suspend ();
}
ACE_INLINE void
ACE_ES_Consumer_Correlation::resume (void)
{
for (int x=0; x < n_timer_reps_; x++)
timer_reps_[x].resume ();
for (int y=0; y < n_consumer_reps_; y++)
consumer_reps_[y]->resume ();
}
// ************************************************************
ACE_INLINE
ACE_ES_Dependency_Iterator::ACE_ES_Dependency_Iterator (RtecEventChannelAdmin::DependencySet &rep) :
rt_info_ (0),
rep_ (rep),
index_ (-1),
n_conjunctions_ (0),
n_disjunctions_ (0),
n_timeouts_ (0),
n_events_ (0)
{
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::advance_dependency (void)
{
index_++;
if ((CORBA::ULong) index_ >= rep_.length ())
return -1;
else
return 0;
}
ACE_INLINE RtecEventChannelAdmin::Dependency &
ACE_ES_Dependency_Iterator::operator *(void)
{
return rep_[index_];
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::parse (void)
{
for (CORBA::ULong x = 0; x < rep_.length (); x++)
{
if (rt_info_ == 0)
rt_info_ = rep_[x].rt_info;
switch (rep_[x].event.header.type)
{
case ACE_ES_CONJUNCTION_DESIGNATOR:
n_conjunctions_++;
break;
case ACE_ES_DISJUNCTION_DESIGNATOR:
n_disjunctions_++;
break;
case ACE_ES_EVENT_TIMEOUT:
case ACE_ES_EVENT_INTERVAL_TIMEOUT:
case ACE_ES_EVENT_DEADLINE_TIMEOUT:
n_timeouts_++;
break;
default:
n_events_++;
break;
}
}
return 0;
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::n_conjunctions (void)
{
return n_conjunctions_;
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::n_disjunctions (void)
{
return n_disjunctions_;
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::n_timeouts (void)
{
return n_timeouts_;
}
ACE_INLINE int
ACE_ES_Dependency_Iterator::n_events (void)
{
return n_events_;
}
ACE_INLINE RtecScheduler::handle_t
ACE_ES_Dependency_Iterator::first_rt_info (void)
{
return rt_info_;
}
// ************************************************************
ACE_INLINE
ACE_ES_Conjunction_Group::ACE_ES_Conjunction_Group (void) :
forward_value_ (0)
{
}
ACE_INLINE int
ACE_ES_Conjunction_Group::add_type (int type_id)
{
ACE_SET_BITS (forward_value_, ACE_INT2BIT[type_id]);
return 0;
}
/*
// Set length bits.
for (int x=0; x < length; x++)
{
forward_value_ <<= 1;
forward_value_ |= 1;
}
*/
ACE_INLINE int
ACE_ES_Conjunction_Group::should_forward (u_long pending_flags)
{
if ((forward_value_ & pending_flags) == forward_value_)
return 1;
else
return 0;
}
ACE_INLINE void
ACE_ES_Conjunction_Group::add_events (TAO_EC_Event_Array *outbox,
TAO_EC_Event_Array *pending_events,
u_long &pending_flags)
{
// Append the act first.
if (!this->act_.empty ())
*outbox += this->act_;
u_long fv = forward_value_;
int x = 0;
while (fv > 0)
{
// If this type_id is part of the correlation, then append each
// event pending to the outbox.
if (ACE_BIT_ENABLED (forward_value_, ACE_INT2BIT[x]))
{
// Step through each of the pending events.
TAO_EC_Event_Array &pending = pending_events[x];
size_t outbox_end = 0;
if (outbox != 0)
{
outbox_end = outbox->size ();
outbox->size (outbox_end + pending.size ());
}
for (CORBA::ULong i = 0; i < pending.size (); ++i)
{
if (pending[i].empty ())
continue;
// Add the pending event to the outbox.
if (outbox != 0)
outbox->set (pending[i], outbox_end++);
// Remove the event from the pending events array.
pending[i].clear ();
}
// Reset the array length.
pending.size (0);
// Since we just emptied the events for this type, clear the
// x^th bit in pending flags.
ACE_CLR_BITS (pending_flags, ACE_INT2BIT[x]);
// Clear the x^th bit in fv.
ACE_CLR_BITS (fv, ACE_INT2BIT[x]);
}
x++;
}
}
// ************************************************************
ACE_INLINE int
ACE_EventChannel::cancel_timer (RtecScheduler::OS_Priority preemption_priority,
int id,
ACE_Command_Base *&act)
{
return this->timer_module ()->cancel_timer (preemption_priority,
id,
act);
}
ACE_INLINE RtecScheduler::Scheduler_ptr
ACE_EventChannel::scheduler (void)
{
return RtecScheduler::Scheduler::_duplicate (this->scheduler_.in ());
}
// ************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -