// ********************************************************************** // // Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_ROUTING_TABLE_H #define ICE_ROUTING_TABLE_H #include #include #include #include namespace Glacier2 { class RoutingTable; typedef IceUtil::Handle RoutingTablePtr; class RoutingTable : public IceUtil::Shared, public IceUtil::Mutex { public: RoutingTable(const Ice::CommunicatorPtr&, const ProxyVerifierPtr&); Ice::ObjectProxySeq add(const Ice::ObjectProxySeq&, const Ice::Current&); // Returns evicted proxies. Ice::ObjectPrx get(const Ice::Identity&); // Returns null if no proxy can be found. private: const Ice::CommunicatorPtr _communicator; const int _traceLevel; const int _maxSize; const ProxyVerifierPtr _verifier; struct EvictorEntry; typedef IceUtil::Handle EvictorEntryPtr; typedef std::map EvictorMap; typedef std::list EvictorQueue; friend struct EvictorEntry; struct EvictorEntry : public IceUtil::Shared { Ice::ObjectPrx proxy; EvictorQueue::iterator pos; }; EvictorMap _map; EvictorQueue _queue; }; } #endif