AsyncStartupWaiter_i.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // AsyncStartupWaiter_i.h,v 1.2 2006/01/04 16:10:11 giovannd Exp
00004 
00005 #ifndef IMR_AsyncStartupWaiterI_H_
00006 #define IMR_AsyncStartupWaiterI_H_
00007 
00008 #include "locator_export.h"
00009 #include "AsyncStartupWaiterS.h"
00010 
00011 #include "ace/Vector_T.h"
00012 #include "ace/Hash_Map_Manager.h"
00013 #include "ace/Bound_Ptr.h"
00014 #include "ace/SString.h"
00015 
00016 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00017 #pragma once
00018 #endif /* ACE_LACKS_PRAGMA_ONCE */
00019 
00020 
00021 class ImR_Locator_i;
00022 
00023 class Locator_Export AsyncStartupWaiter_i : public virtual POA_ImplementationRepository::AMH_AsyncStartupWaiter
00024 {
00025   struct PendingData {
00026     PendingData();
00027     PendingData(const char* partial_ior, const char* ior);
00028     ACE_CString partial_ior;
00029     ACE_CString ior;
00030   };
00031   typedef ACE_Vector<PendingData> PendingList;
00032   typedef ACE_Strong_Bound_Ptr<PendingList, ACE_Null_Mutex> PendingListPtr;
00033   typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
00034     PendingListPtr,
00035     ACE_Hash<ACE_CString>,
00036     ACE_Equal_To<ACE_CString>,
00037     ACE_Null_Mutex> PendingMap;
00038 
00039   typedef ACE_Vector<ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_var> RHList;
00040   typedef ACE_Strong_Bound_Ptr<RHList, ACE_Null_Mutex> RHListPtr;
00041   typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
00042     RHListPtr,
00043     ACE_Hash<ACE_CString>,
00044     ACE_Equal_To<ACE_CString>,
00045     ACE_Null_Mutex> WaitingMap;
00046 
00047 public:
00048 
00049   void wait_for_startup (
00050    ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_ptr rh,
00051    const char* name ACE_ENV_ARG_DECL)
00052    ACE_THROW_SPEC ((CORBA::SystemException));
00053 
00054   void unblock_one(const char* name, const char* partial_ior, const char* ior, bool queue);
00055   void unblock_all(const char* name);
00056 
00057   void debug(bool dbg);
00058 
00059 private:
00060 
00061 ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler_ptr
00062   get_one_waiter(const char* name);
00063 
00064 void get_all_waiters(const char* name, RHList& ret);
00065 
00066 void send_response(ImplementationRepository::AMH_AsyncStartupWaiterResponseHandler& rh,
00067                    const char* name, const char* partial_ior, const char* ior);
00068 private:
00069   WaitingMap waiting_;
00070   PendingMap pending_;
00071   bool debug_;
00072 };
00073 
00074 #endif /* AsyncStartupWaiterI_H_  */
00075 

Generated on Thu Nov 9 13:36:19 2006 for TAO_Implementation_Repository by doxygen 1.3.6