MemoryRegion* MemoryManager::find(const MPtr data, uint bytes) { if ( fileReadOnly ) panic("MemoryManager", "find", "Searching by contents not available when read-only mode is selected"); uint cs = _generateChecksum(data, bytes); vector<MemoryRegion*> matches = _findByChecksum(cs); if ( matches.empty() ) return 0; vector<MemoryRegion*>::const_iterator it = matches.begin(); for ( ; it != matches.end(); it++ ) { MemoryRegion* mr = *it; //if ( mr->data ) if ( !mr->data.empty() ) { // Memory contents are in cache (available) if ( mr->compare(data,bytes) ) { _updateCacheMemory(mr); return mr; } } else { // Contents not available (not in cache) _loadDataMemory(mr); if ( mr->compare(data,bytes) ) { _updateCacheMemory(mr); return mr; } _unloadDataMemory(mr); } } return 0; }