long AllocateBuffer()
{
if (this.FreeListHead!=NULLBUFFERPOINTER)
{
// reallocate a freed buffer
long result = this.FreeListHead;
byte buffertype;
long NextFree;
byte[] dummy = this.ParseBuffer(result, out buffertype, out NextFree);
if (buffertype!=FREE)
{
throw new LinkedFileException("free head buffer not marked free");
}
this.FreeListHead = NextFree;
this.headerDirty = true;
this.RecentNewBufferNumber = NULLBUFFERPOINTER;
return result;
}
else
{
// allocate a new buffer
long nextbuffernumber = this.buffers.nextBufferNumber();
if (this.RecentNewBufferNumber==nextbuffernumber)
{
// the previous buffer has been allocated but not yet written. It must be written before the following one...
nextbuffernumber++;
}
this.RecentNewBufferNumber = nextbuffernumber;
return nextbuffernumber;
}
}