summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h')
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h b/TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h
new file mode 100644
index 00000000000..59ee659344d
--- /dev/null
+++ b/TAO/orbsvcs/ImplRepo_Service/AsyncStartupWaiter_i.h
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// $Id$
+
+#ifndef IMR_AsyncStartupWaiterI_H_
+#define IMR_AsyncStartupWaiterI_H_
+
+#include "locator_export.h"
+#include "AsyncStartupWaiterS.h"
+
+#include "ace/Vector_T.h"
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Bound_Ptr.h"
+#include "ace/SString.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+
+class ImR_Locator_i;
+
+class Locator_Export AsyncStartupWaiter_i : public virtual POA_ImplementationRepository::AMH_AsyncStartupWaiter
+{
+ struct PendingData {
+ PendingData();
+ PendingData(const char* partial_ior, const char* ior);
+ ACE_CString partial_ior;
+ ACE_CString ior;
+ };
+ typedef ACE_Vector<PendingData> PendingList;
+ typedef ACE_Strong_Bound_Ptr<PendingList, ACE_Null_Mutex> PendingListPtr;
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ PendingListPtr,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> PendingMap;
+
+ typedef ACE_Vector<ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_var> RHList;
+ typedef ACE_Strong_Bound_Ptr<RHList, ACE_Null_Mutex> RHListPtr;
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ RHListPtr,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> WaitingMap;
+
+public:
+
+ void wait_for_startup (
+ ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_ptr rh,
+ const char* name);
+
+ void unblock_one(const char* name, const char* partial_ior, const char* ior, bool queue);
+ void unblock_all(const char* name);
+
+ void debug(bool dbg);
+
+private:
+
+ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_ptr
+ get_one_waiter(const char* name);
+
+void get_all_waiters(const char* name, RHList& ret);
+
+void send_response(ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler& rh,
+ const char* name, const char* partial_ior, const char* ior);
+private:
+ WaitingMap waiting_;
+ PendingMap pending_;
+ bool debug_;
+};
+
+#endif /* AsyncStartupWaiterI_H_ */
+