//---------------------------------------------------------------------------- // // Copyright (C) 2010 Intel Corporation // // File: ConnectedSystems.h // // Contents: This class handles connected systems per request // //---------------------------------------------------------------------------- #ifndef _CONNECTED_SYSTEMS__H__ #define _CONNECTED_SYSTEMS__H__ #include #include #include typedef std::set SYSTEMS_SET; class Connected_Systems_Enumeration_Data { public: Connected_Systems_Enumeration_Data(); time_t get_expires(void) {return _expires;} SYSTEMS_SET::iterator& get_systems_set_iterator(void) { return _systems_set_iterator; }; SYSTEMS_SET::iterator get_systems_set_end(void) { return _systems_set.end(); }; private: Connected_Systems_Enumeration_Data(const Connected_Systems_Enumeration_Data&); SYSTEMS_SET _systems_set; SYSTEMS_SET::iterator _systems_set_iterator; time_t _expires; } ; typedef ACE_Refcounted_Auto_Ptr ConnectedSystemsEnumerationDataPtr; typedef std::map CONNECTED_SYSTEMS_MAP; class Connected_Systems { private: Connected_Systems(void); // Ctor. public: static Connected_Systems& instance() { static Connected_Systems c; return c; } bool add_new_enumeration(ACE_UINT32 &context ,const ConnectedSystemsEnumerationDataPtr& cs); bool context_exists(ACE_UINT32 context); ConnectedSystemsEnumerationDataPtr* get_connected_system_enumeration_data_ptr(ACE_UINT32 context); bool release_context(ACE_UINT32 context); bool release_expired_enumerations(void); bool max_concurrent_enums_exceeded(void); private: // Data members ACE_UINT32 _curr_context; CONNECTED_SYSTEMS_MAP _connected_systems_map; // Read/Write lock of this container ACE_Recursive_Thread_Mutex rwmutex_; }; #endif //_CONNECTED_SYSTEMS__H__