private SourceEntry GetSourceEntryForOffset(long offset) {
if (offset >= size)
return null;
if (offset >= currentSourceEntry.firstByte && offset <= currentSourceEntry.lastByte)
return currentSourceEntry;
// hook to allow subclasses to release resources if necessary
SourceReleased(currentSourceEntry.source);
int startAt = GetStartingSourceIndex(offset);
for(int i = startAt; i < sources.Length; i++){
if (offset >= sources[i].firstByte && offset <= sources[i].lastByte){
currentSourceEntry = sources[i];
SourceInUse(currentSourceEntry.source);
return currentSourceEntry;
}
}
return null;
}