OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
OpenDDS::DCPS::Data_Types_Register Class Reference

#include <Registered_Data_Types.h>

Public Member Functions

DDS::ReturnCode_t register_type (DDS::DomainParticipant_ptr domain_participant, const char *type_name, TypeSupport_ptr the_type)
 
DDS::ReturnCode_t unregister_type (DDS::DomainParticipant_ptr domain_participant, const char *type_name, TypeSupport_ptr the_type)
 
DDS::ReturnCode_t unregister_participant (DDS::DomainParticipant_ptr domain_participant)
 
TypeSupport_ptr lookup (DDS::DomainParticipant_ptr domain_participant, const char *type_name) const
 

Static Public Member Functions

static Data_Types_Registerinstance ()
 Return a singleton instance of this class. More...
 

Private Member Functions

 Data_Types_Register ()
 
 ~Data_Types_Register ()
 

Private Attributes

ACE_SYNCH_MUTEX lock_
 
ParticipantMap participants_
 

Friends

class ACE_Singleton< Data_Types_Register, ACE_SYNCH_MUTEX >
 

Detailed Description

A singleton class that keeps track of the registered DDS data types local to this process. Data types are registered by domain participant.

Definition at line 37 of file Registered_Data_Types.h.

Constructor & Destructor Documentation

◆ Data_Types_Register()

OpenDDS::DCPS::Data_Types_Register::Data_Types_Register ( )
private

Definition at line 24 of file Registered_Data_Types.cpp.

25 {
26 }

◆ ~Data_Types_Register()

OpenDDS::DCPS::Data_Types_Register::~Data_Types_Register ( )
private

Definition at line 28 of file Registered_Data_Types.cpp.

29 {
30 }

Member Function Documentation

◆ instance()

Data_Types_Register * OpenDDS::DCPS::Data_Types_Register::instance ( void  )
static

Return a singleton instance of this class.

Definition at line 33 of file Registered_Data_Types.cpp.

References ACE_Singleton< TYPE, ACE_LOCK >::instance().

34 {
36 }
static TYPE * instance(void)

◆ lookup()

TypeSupport_ptr OpenDDS::DCPS::Data_Types_Register::lookup ( DDS::DomainParticipant_ptr  domain_participant,
const char *  type_name 
) const

Find a data type by its type name.

Returns
the TypeSupport object registered as type_name Otherwise returns TypeSupport::_nil()

Definition at line 95 of file Registered_Data_Types.cpp.

References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, lock_, OPENDDS_END_VERSIONED_NAMESPACE_DECL, and participants_.

98 {
99  ACE_GUARD_RETURN(ACE_SYNCH_MUTEX, guard, lock_, 0);
100 
101  ParticipantMap::const_iterator iter1 = participants_.find(domain_participant);
102  if (iter1 == participants_.end()) {
103  return 0;
104  }
105 
106  TypeSupportMap::const_iterator iter2 = iter1->second.find(type_name);
107  if (iter2 == iter1->second.end()) {
108  return 0;
109  }
110 
111  TypeSupport_var typeSupport = iter2->second;
112  return typeSupport._retn();
113 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ register_type()

DDS::ReturnCode_t OpenDDS::DCPS::Data_Types_Register::register_type ( DDS::DomainParticipant_ptr  domain_participant,
const char *  type_name,
TypeSupport_ptr  the_type 
)

Register a type.

Returns
RETCODE_OK if the type_name is unique to the domain participant or the type_name is already registered to the_type's class. Otherwise returns RETCODE_ERROR

Definition at line 38 of file Registered_Data_Types.cpp.

References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, lock_, participants_, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

42 {
43  ACE_GUARD_RETURN(ACE_SYNCH_MUTEX, guard, lock_, DDS::RETCODE_ERROR);
44 
45  TypeSupportMap& tsm = participants_[domain_participant];
46  const TypeSupport_var typeSupport = TypeSupport::_duplicate(the_type);
47 
48  TypeSupportMap::iterator iter = tsm.find(type_name);
49  if (iter == tsm.end()) {
50  tsm[type_name] = typeSupport;
51  return DDS::RETCODE_OK;
52  }
53 
54  if (std::strcmp(typeSupport->_interface_repository_id(),
55  iter->second->_interface_repository_id()) == 0) {
56  return DDS::RETCODE_OK;
57  }
58 
59  return DDS::RETCODE_ERROR;
60 }
const ReturnCode_t RETCODE_OK
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
const ReturnCode_t RETCODE_ERROR

◆ unregister_participant()

DDS::ReturnCode_t OpenDDS::DCPS::Data_Types_Register::unregister_participant ( DDS::DomainParticipant_ptr  domain_participant)

Definition at line 87 of file Registered_Data_Types.cpp.

References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, lock_, participants_, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

89 {
90  ACE_GUARD_RETURN(ACE_SYNCH_MUTEX, guard, lock_, DDS::RETCODE_ERROR);
91  participants_.erase(domain_participant);
92  return DDS::RETCODE_OK;
93 }
const ReturnCode_t RETCODE_OK
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
const ReturnCode_t RETCODE_ERROR

◆ unregister_type()

DDS::ReturnCode_t OpenDDS::DCPS::Data_Types_Register::unregister_type ( DDS::DomainParticipant_ptr  domain_participant,
const char *  type_name,
TypeSupport_ptr  the_type 
)

Unregister a type.

Returns
RETCODE_OK if the type_name has been removed or if the type_name cannot be found in the map associated with the domain_participant. Otherwise returns RETCODE_ERROR

Definition at line 62 of file Registered_Data_Types.cpp.

References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, lock_, participants_, DDS::RETCODE_ERROR, and DDS::RETCODE_OK.

66 {
67  ACE_GUARD_RETURN(ACE_SYNCH_MUTEX, guard, lock_, DDS::RETCODE_ERROR);
68 
69  TypeSupportMap& tsm = participants_[domain_participant];
70 
71  TypeSupportMap::iterator iter = tsm.find(type_name);
72  if (iter == tsm.end()) {
73  // Not in the map, can't delete
74  return DDS::RETCODE_ERROR;
75  }
76  else {
77  if (std::strcmp(the_type->_interface_repository_id(), iter->second->_interface_repository_id()) == 0) {
78  tsm.erase(iter);
79  return DDS::RETCODE_OK;
80  }
81  else {
82  return DDS::RETCODE_ERROR;
83  }
84  }
85 }
const ReturnCode_t RETCODE_OK
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
const ReturnCode_t RETCODE_ERROR

Friends And Related Function Documentation

◆ ACE_Singleton< Data_Types_Register, ACE_SYNCH_MUTEX >

Definition at line 38 of file Registered_Data_Types.h.

Member Data Documentation

◆ lock_

ACE_SYNCH_MUTEX OpenDDS::DCPS::Data_Types_Register::lock_
mutableprivate

◆ participants_

ParticipantMap OpenDDS::DCPS::Data_Types_Register::participants_
private

The documentation for this class was generated from the following files: