Ice::ObjectPrxPtr LocatorRegistryI::findAdapter(const string& adapterId, bool& isReplicaGroup) const { Lock sync(*this); map<string, Ice::ObjectPrxPtr>::const_iterator p = _adapters.find(adapterId); if(p != _adapters.end()) { isReplicaGroup = false; return p->second; } map<string, set<string> >::const_iterator q = _replicaGroups.find(adapterId); if(q != _replicaGroups.end()) { Ice::EndpointSeq endpoints; Ice::ObjectPrxPtr prx; for(set<string>::const_iterator r = q->second.begin(); r != q->second.end(); ++r) { map<string, Ice::ObjectPrxPtr>::const_iterator s = _adapters.find(*r); if(s == _adapters.end()) { continue; // TODO: Inconsistency } if(!prx) { prx = s->second; } Ice::EndpointSeq endpts = s->second->ice_getEndpoints(); copy(endpts.begin(), endpts.end(), back_inserter(endpoints)); } if(prx) { isReplicaGroup = true; return prx->ice_endpoints(endpoints); } } isReplicaGroup = false; return 0; }