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;
}