summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h b/TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h
new file mode 100644
index 00000000000..d4c8ecd01b6
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/Portable_Group_Map.h
@@ -0,0 +1,136 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Portable_Group_Map.h
+ *
+ * $Id$
+ *
+ * @author Frank Hunleth <fhunleth@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef TAO_PORTABLE_GROUP_MAP_H
+#define TAO_PORTABLE_GROUP_MAP_H
+
+#include /**/ "ace/pre.h"
+
+#include "orbsvcs/PortableGroup/portablegroup_export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/PortableGroupC.h"
+
+#include "tao/Object_KeyC.h"
+
+#include "ace/Null_Mutex.h"
+#include "ace/Hash_Map_Manager_T.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_ServerRequest;
+
+/**
+ * @class TAO_GroupId_Hash
+ *
+ * @brief Hashing class for Group Ids.
+ *
+ * Define the hash() method for Group Ids.
+ */
+class TAO_PortableGroup_Export TAO_GroupId_Hash
+{
+public:
+
+ /// Returns hash value.
+ u_long operator () (const PortableGroup::TagGroupTaggedComponent *id) const;
+};
+
+/**
+ * @class TAO_GroupId_Equal_To
+ *
+ * @brief Hashing class for Group Ids.
+ *
+ * Define the Equal_To () method for Object Ids.
+ */
+class TAO_PortableGroup_Export TAO_GroupId_Equal_To
+{
+public:
+
+ /// Returns 1 if equal.
+ int operator () (const PortableGroup::TagGroupTaggedComponent *lhs,
+ const PortableGroup::TagGroupTaggedComponent *rhs) const;
+};
+
+/**
+ * @class TAO_Portable_Group_Map
+ *
+ * @brief Map of GroupIds to ObjectKeys.
+ */
+class TAO_PortableGroup_Export TAO_Portable_Group_Map
+{
+public:
+
+ /**
+ * @struct Map_Entry
+ *
+ * @brief Value field of the portable group map.
+ */
+ struct Map_Entry
+ {
+ /// The key.
+ TAO::ObjectKey key;
+
+ /// next ObjectKey in the group.
+ struct Map_Entry *next;
+ };
+
+ /// Constructor.
+ TAO_Portable_Group_Map ();
+
+ /// Destructor.
+ ~TAO_Portable_Group_Map (void);
+
+ /// Add a GroupId->ObjectKey mapping to the map.
+ /// This function takes ownership of the memory pointed to be group_id
+ void add_groupid_objectkey_pair (PortableGroup::TagGroupTaggedComponent *group_id,
+ const TAO::ObjectKey &key);
+
+
+ /// Remove a GroupId->ObjectKey mapping from the map.
+ void remove_groupid_objectkey_pair (const PortableGroup::TagGroupTaggedComponent* group_id,
+ const TAO::ObjectKey &key);
+
+ /// Dispatch a request to all of the ObjectIds that belong to
+ /// the specified group.
+ void dispatch (PortableGroup::TagGroupTaggedComponent* group_id,
+ TAO_ORB_Core *orb_core,
+ TAO_ServerRequest &request,
+ CORBA::Object_out forward_to);
+
+ /// Id hash map.
+ typedef ACE_Hash_Map_Manager_Ex<
+ PortableGroup::TagGroupTaggedComponent *,
+ Map_Entry *,
+ TAO_GroupId_Hash,
+ TAO_GroupId_Equal_To,
+ ACE_Null_Mutex> GroupId_Table;
+ typedef GroupId_Table::iterator Iterator;
+
+protected:
+ /// Lock used to synchronize access to map_.
+ TAO_SYNCH_MUTEX lock_;
+
+ /// Id map.
+ GroupId_Table map_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+//#if defined (__ACE_INLINE__)
+//# include "Portable_Group_Map.i"
+//#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_PORTABLE_GROUP_MAP_H */