ZRef<Device> Manager_Union::Open(uint64 iDeviceID) { ZGuardRMtxR locker(fMutex); for (vector<Entry_t>::iterator iterEntries = fEntries.begin(); iterEntries != fEntries.end(); ++iterEntries) { Entry_t& curEntry = *iterEntries; for (vector<pair<uint64, uint64> >::iterator j = curEntry.fIDs.begin(); j != curEntry.fIDs.end(); /*no inc*/) { if (j->first == iDeviceID) { ZRef<Manager> foundManager = iterEntries->fManager; uint64 foundDeviceID = j->second; locker.Release(); return foundManager->Open(foundDeviceID); } } } return null; }