active_object_map.h
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C头文件 代码 · 共 652 行 · 第 1/2 页
H
652 行
/* -*- C++ -*- */
//=============================================================================
/**
* @file Active_Object_Map.h
*
* Active_Object_Map.h,v 1.8 2003/10/28 18:29:29 bala Exp
*
* @author Irfan Pyarali
*/
//=============================================================================
#ifndef TAO_ACTIVE_OBJECT_MAP_H
#define TAO_ACTIVE_OBJECT_MAP_H
#include /**/ "ace/pre.h"
#include "Key_Adapters.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "Servant_Base.h"
#include "tao/Server_Strategy_Factory.h"
// Forward declarations.
class TAO_Id_Uniqueness_Strategy;
class TAO_Lifespan_Strategy;
class TAO_Id_Assignment_Strategy;
class TAO_Id_Hint_Strategy;
/**
* @class TAO_Active_Object_Map
*
* @brief Map of object ids to servants.
*
* Implementation to be used by the POA.
*/
class TAO_PortableServer_Export TAO_Active_Object_Map
{
public:
/**
* @struct Map_Entry
*
* @brief Value field of the active object map.
*
* We need a mapping from and to all of the following fields:
* <user_id>, <system_id>, and <servant>. Therefore, we keep
* all the fields together in the map.
*/
struct Map_Entry
{
/// Default constructor.
Map_Entry (void);
/// User id.
PortableServer::ObjectId user_id_;
/// System id.
PortableServer::ObjectId system_id_;
/// Servant.
PortableServer::Servant servant_;
/// Reference count on outstanding requests on this servant.
CORBA::UShort reference_count_;
/// Has this servant been deactivated already?
CORBA::Boolean deactivated_;
/// Priority of this servant.
CORBA::Short priority_;
};
/// Constructor.
TAO_Active_Object_Map (int user_id_policy,
int unique_id_policy,
int persistent_id_policy,
const TAO_Server_Strategy_Factory::Active_Object_Map_Creation_Parameters &creation_parameters
ACE_ENV_ARG_DECL);
/// Destructor.
~TAO_Active_Object_Map (void);
/// Must be used with UNIQUE_ID policy.
int is_servant_in_map (PortableServer::Servant servant,
int &deactivated);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int is_user_id_in_map (const PortableServer::ObjectId &user_id,
CORBA::Short priority,
int &priorities_match,
int &deactivated);
/// Must be used with SYSTEM_ID policy.
int bind_using_system_id_returning_system_id (PortableServer::Servant servant,
CORBA::Short priority,
PortableServer::ObjectId_out system_id);
/// Must be used with SYSTEM_ID policy.
int bind_using_system_id_returning_user_id (PortableServer::Servant servant,
CORBA::Short priority,
PortableServer::ObjectId_out user_id);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int bind_using_user_id (PortableServer::Servant servant,
const PortableServer::ObjectId &user_id,
CORBA::Short priority);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int find_system_id_using_user_id (const PortableServer::ObjectId &user_id,
CORBA::Short priority,
PortableServer::ObjectId_out system_id);
/// Can be used with any policy.
int rebind_using_user_id_and_system_id (PortableServer::Servant servant,
const PortableServer::ObjectId &user_id,
const PortableServer::ObjectId &system_id,
TAO_Active_Object_Map::Map_Entry *&entry);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int unbind_using_user_id (const PortableServer::ObjectId &user_id);
/// Must be used with UNIQUE_ID policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int find_user_id_using_servant (PortableServer::Servant servant,
PortableServer::ObjectId_out user_id);
/// Must be used with UNIQUE_ID policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int find_system_id_using_servant (PortableServer::Servant servant,
PortableServer::ObjectId_out system_id,
CORBA::Short &priority);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
int find_servant_using_user_id (const PortableServer::ObjectId &user_id,
PortableServer::Servant &servant);
/// Can be used with any policy.
int find_servant_using_system_id_and_user_id (const PortableServer::ObjectId &system_id,
const PortableServer::ObjectId &user_id,
PortableServer::Servant &servant,
TAO_Active_Object_Map::Map_Entry *&entry);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is identical to <system_id>.
int find_servant_and_system_id_using_user_id (const PortableServer::ObjectId &user_id,
PortableServer::Servant &servant,
PortableServer::ObjectId_out system_id,
CORBA::Short &priority);
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is identical to <system_id>.
int find_servant_and_system_id_using_user_id (const PortableServer::ObjectId &user_id,
TAO_Active_Object_Map::Map_Entry *&entry);
/// Can be used with any policy. When the SYSTEM_ID policy is used,
/// the <system_id> is identical to <user_id>.
int find_user_id_using_system_id (const PortableServer::ObjectId &system_id,
PortableServer::ObjectId_out user_id);
/// Can be used with any policy. When the SYSTEM_ID policy is used,
/// the <system_id> is identical to <user_id>.
int find_user_id_using_system_id (const PortableServer::ObjectId &system_id,
PortableServer::ObjectId &user_id);
/// Are there any remaining activations of <servant> in the active
/// object map? Can be used with any policy.
CORBA::Boolean remaining_activations (PortableServer::Servant servant);
/// Size of the map.
size_t current_size (void);
/// Can be used with any policy.
static size_t system_id_size (void);
/// Set the system id size.
static void set_system_id_size (const TAO_Server_Strategy_Factory::Active_Object_Map_Creation_Parameters &creation_parameters);
/// Base class of the id map.
typedef ACE_Map<
PortableServer::ObjectId,
Map_Entry *> user_id_map;
/// Id hash map.
typedef ACE_Hash_Map_Manager_Ex_Adapter<
PortableServer::ObjectId,
Map_Entry *,
TAO_ObjectId_Hash,
ACE_Equal_To<PortableServer::ObjectId>,
TAO_Incremental_Key_Generator> user_id_hash_map;
#if (TAO_HAS_MINIMUM_POA_MAPS == 0)
/// Id linear map.
typedef ACE_Map_Manager_Adapter<
PortableServer::ObjectId,
Map_Entry *,
TAO_Incremental_Key_Generator> user_id_linear_map;
#endif /* TAO_HAS_MINIMUM_POA_MAPS == 0 */
/// Id active map.
typedef ACE_Active_Map_Manager_Adapter<
PortableServer::ObjectId,
Map_Entry *,
TAO_Ignore_Original_Key_Adapter> user_id_active_map;
/// Base class of the servant map.
typedef ACE_Map<
PortableServer::Servant,
Map_Entry *> servant_map;
/// Servant hash map.
typedef ACE_Hash_Map_Manager_Ex_Adapter<
PortableServer::Servant,
Map_Entry *,
TAO_Servant_Hash,
ACE_Equal_To<PortableServer::Servant>,
ACE_Noop_Key_Generator<PortableServer::Servant> > servant_hash_map;
#if (TAO_HAS_MINIMUM_POA_MAPS == 0)
/// Servant linear map.
typedef ACE_Map_Manager_Adapter<
PortableServer::Servant,
Map_Entry *,
ACE_Noop_Key_Generator<PortableServer::Servant> > servant_linear_map;
#endif /* TAO_HAS_MINIMUM_POA_MAPS == 0 */
/// Id map.
user_id_map *user_id_map_;
/// Servant map.
servant_map *servant_map_;
/// Id uniqueness strategy.
TAO_Id_Uniqueness_Strategy *id_uniqueness_strategy_;
/// Lifespan strategy.
TAO_Lifespan_Strategy *lifespan_strategy_;
/// Id assignment strategy.
TAO_Id_Assignment_Strategy *id_assignment_strategy_;
/// Id hint strategy.
TAO_Id_Hint_Strategy *id_hint_strategy_;
/// Flag to see if we are using active maps in this active object
/// map.
int using_active_maps_;
/// Size of the system id produced by the map.
static size_t system_id_size_;
};
/**
* @class TAO_Id_Uniqueness_Strategy
*
* @brief Id uniqueness strategy.
*
* Strategy for implementing points of variation between the
* UNIQUE_ID and the MULTIPLE_ID policies.
*/
class TAO_Id_Uniqueness_Strategy
{
public:
/// Virtual destructor.
virtual ~TAO_Id_Uniqueness_Strategy (void);
/// Must be used with UNIQUE_ID policy.
virtual int is_servant_in_map (PortableServer::Servant servant,
int &deactivated) = 0;
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
virtual int unbind_using_user_id (const PortableServer::ObjectId &user_id) = 0;
/// Must be used with UNIQUE_ID policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
virtual int find_user_id_using_servant (PortableServer::Servant servant,
PortableServer::ObjectId_out user_id) = 0;
/// Must be used with UNIQUE_ID policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
virtual int find_system_id_using_servant (PortableServer::Servant servant,
PortableServer::ObjectId_out system_id,
CORBA::Short &priority) = 0;
/// Can be used with any policy. With the SYSTEM_ID policy,
/// <user_id> is actually <system_id>.
virtual int bind_using_user_id (PortableServer::Servant servant,
const PortableServer::ObjectId &user_id,
CORBA::Short priority,
TAO_Active_Object_Map::Map_Entry *&entry) = 0;
/// Are there any remaining activations of <servant> in the active
/// object map? Can be used with any policy.
virtual CORBA::Boolean remaining_activations (PortableServer::Servant servant) = 0;
/// Set the active map.
void set_active_object_map (TAO_Active_Object_Map *active_object_map);
protected:
/// Pointer to the active map.
TAO_Active_Object_Map *active_object_map_;
};
/**
* @class TAO_Unique_Id_Strategy
*
* @brief Unique id strategy.
*
* Strategy for the UNIQUE_ID policy.
*/
class TAO_Unique_Id_Strategy : public TAO_Id_Uniqueness_Strategy
{
public:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?