BOOL CLogFile::FindHoles(CArrayIntAndPointer* papvOverlapping, filePos iPosition, filePos iLength) { CArrayIntAndPointer apvOverlappingSorted; int i; CLogFileCommandWrite* psWrite; int eCommand; BOOL bHoles; filePos iEnd; if (iLength == 0) { return FALSE; } if (papvOverlapping->NumElements() == 0) { return FALSE; } apvOverlappingSorted.Init(1); apvOverlappingSorted.Copy(papvOverlapping); apvOverlappingSorted.QuickSort(CompareLogFileWrite); apvOverlappingSorted.Get(0, (void**)&psWrite, &eCommand); if (psWrite->iPosition > iPosition) { apvOverlappingSorted.Kill(); return TRUE; } else { iEnd = psWrite->iPosition + psWrite->iSize -1; } bHoles = FALSE; for (i = 1; i < apvOverlappingSorted.NumElements(); i++) { apvOverlappingSorted.Get(i, (void**)&psWrite, &eCommand); if (psWrite->iPosition > (iEnd+1)) { bHoles = TRUE; break; } iEnd = psWrite->iPosition + psWrite->iSize -1; if (iEnd >= (iPosition + iLength-1)) { break; } } if (iEnd < (iPosition + iLength-1)) { bHoles = TRUE; } apvOverlappingSorted.Kill(); return bHoles; }