multi_priority_mapping.cpp
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 232 行
CPP
232 行
// Multi_Priority_Mapping.cpp,v 1.3 2003/10/30 03:21:05 bala Exp
// Multi_Priority_Mapping.cpp,v 1.0
#include "tao/orbconf.h"
#include "tao/RTCORBA/Multi_Priority_Mapping.h"
#include "tao/debug.h"
#include "ace/Log_Msg.h"
#include "ace/Sched_Params.h"
#if !defined (__ACE_INLINE__)
# include "tao/RTCORBA/Multi_Priority_Mapping.i"
#endif /* ! __ACE_INLINE__ */
TAO_Multi_Priority_Mapping::TAO_Multi_Priority_Mapping (int base_native_priority,
int base_corba_priority,
int priority_spacing,
int priorities_contiguous,
int policy)
: base_native_priority_ (base_native_priority)
, base_corba_priority_ (base_corba_priority)
, priority_spacing_ (priority_spacing)
, priorities_contiguous_(priorities_contiguous)
, policy_ (policy)
{
this->min_ = ACE_Sched_Params::priority_min (this->policy_);
this->max_ = ACE_Sched_Params::priority_max (this->policy_);
if ( this->min_ < this->max_ )
{
if (base_native_priority_ < this->min_)
{
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
"TAO (%P|%t) - Multi_Priority_Mapping::ctor: "
" base_native_priority %d out of range [%d,%d]\n",
base_native_priority_, this->min_, this->max_));
}
}
}
else
{
if (base_native_priority_ > this->min_)
{
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
"TAO (%P|%t) - Multi_Priority_Mapping::ctor: "
" base_native_priority %d out of range [%d,%d]\n",
base_native_priority_, this->min_, this->max_));
}
}
}
if (base_corba_priority_ > RTCORBA::maxPriority)
{
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
"TAO (%P|%t) - Multi_Priority_Mapping::ctor: "
" base_corba_priority %d out of range [%d,%d]\n",
base_corba_priority_, RTCORBA::minPriority, RTCORBA::maxPriority));
}
}
}
TAO_Multi_Priority_Mapping::~TAO_Multi_Priority_Mapping (void)
{
}
CORBA::Boolean
TAO_Multi_Priority_Mapping::to_native (RTCORBA::Priority corba_priority,
RTCORBA::NativePriority &native_priority)
{
// Check for an invalid native priority
if (corba_priority < RTCORBA::minPriority || corba_priority > this->base_corba_priority_ )
{
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
"TAO (%P|%t) - Multi_Priority_Mapping::to_native: "
" corba priority %d out of range [%d,%d]\n",
corba_priority, RTCORBA::minPriority, this->base_corba_priority_));
}
return 0;
}
if (corba_priority == base_corba_priority_)
{
// If this is the highest priority endpoint, then just give it the highest priority corba base priority
native_priority = base_native_priority_;
}
else
{
if (priorities_contiguous_ == 1)
{
if ( this->min_ < this->max_ )
{
native_priority = ( (corba_priority - base_corba_priority_) / priority_spacing_ ) + base_native_priority_;
}
else
{
native_priority = ( (base_corba_priority_ - corba_priority) / priority_spacing_ ) + base_native_priority_;
}
}
else
{
// Start at the max priority and search until we reach the base priority
int last_priority = this->base_corba_priority_;
while (true)
{
if (last_priority == RTCORBA::minPriority) break;
if (base_corba_priority_ >= --last_priority) break;
}
int priority_ndx = 0;
while (true)
{
if (last_priority == RTCORBA::minPriority) break;
if (corba_priority >= --last_priority) break;
priority_ndx++;
}
// Start at the max priority and search until we reach the base priority
last_priority = this->base_native_priority_;
for (int current_ndx = 0; current_ndx < priority_ndx; current_ndx++)
{
native_priority = ACE_Sched_Params::previous_priority (this->policy_,
last_priority,
ACE_SCOPE_THREAD);
}
}
}
return 1;
}
CORBA::Boolean
TAO_Multi_Priority_Mapping::to_CORBA (RTCORBA::NativePriority native_priority,
RTCORBA::Priority &corba_priority)
{
// Check for an invalid native priority
if ((this->min_ < this->max_ && (native_priority < this->min_ || native_priority > this->base_native_priority_ )) ||
(this->min_ > this->max_ && (native_priority < this->base_corba_priority_ || native_priority > this->min_)))
{
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,
"TAO (%P|%t) - Multi_Priority_Mapping::to_CORBA: "
" priority %d out of range [%d,%d]\n",
native_priority, this->min_, this->base_corba_priority_));
}
return 0;
}
if (native_priority == base_native_priority_)
{
// If this is the highest priority endpoint, then just give it the highest priority corba base priority
corba_priority = base_corba_priority_;
}
else
{
if (priorities_contiguous_ == 1)
{
if ( this->min_ < this->max_ )
{
corba_priority = ( (native_priority - base_native_priority_) * priority_spacing_ ) + base_corba_priority_;
}
else
{
corba_priority = ( (base_native_priority_ - native_priority) * priority_spacing_ ) + base_corba_priority_;
}
}
else
{
// Start at the max priority and search until we reach the base priority
int last_priority = this->base_native_priority_;
while (true)
{
int previous_priority = ACE_Sched_Params::previous_priority (this->policy_,
last_priority,
ACE_SCOPE_THREAD);
last_priority = previous_priority;
if (last_priority == this->min_)
{
break;
}
if ( this->min_ < this->max_ )
{
if (base_native_priority_ >= previous_priority) break;
}
else
{
if (base_native_priority_ <= previous_priority) break;
}
}
int priority_ndx = 1;
while (true)
{
if (last_priority == this->min_)
{
break;
}
if ( this->min_ < this->max_ )
{
if (native_priority >= last_priority) break;
}
else
{
if (native_priority <= last_priority) break;
}
int previous_priority = ACE_Sched_Params::previous_priority (this->policy_,
last_priority,
ACE_SCOPE_THREAD);
last_priority = previous_priority;
priority_ndx++;
}
corba_priority = base_corba_priority_ - priority_ndx;
}
}
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?