private void RemoveFromBinChain(long offset, long size)
{
// What bin index should we be looking input?
int binChainIndex = MinimumBinSizeIndex(size);
var prevOffset = -1L;
var curOffset = freeBinList[binChainIndex];
// Search this bin for the offset
// NOTE: This is an iterative search through the bin chain
while (offset != curOffset) {
if (curOffset == -1)
throw new IOException("Area not found input bin chain.");
// Move to the next input the chain
var headerInfo = new long[2];
ReadAreaHeader(curOffset, headerInfo);
prevOffset = curOffset;
curOffset = headerInfo[1];
}
// Found the offset, so remove it,
if (prevOffset == -1) {
var headerInfo = new long[2];
ReadAreaHeader(offset, headerInfo);
freeBinList[binChainIndex] = headerInfo[1];
WriteBinIndex(binChainIndex);
} else {
var headerInfo = new long[2];
var headerInfo2 = new long[2];
ReadAreaHeader(prevOffset, headerInfo2);
ReadAreaHeader(offset, headerInfo);
headerInfo2[1] = headerInfo[1];
ReboundArea(prevOffset, headerInfo2, false);
}
}