public long Create()
{
lock (this) {
// Allocate empty visible and deleted tables area
using (var visTablesArea = Store.CreateArea(12)) {
using (var delTablesArea = Store.CreateArea(12)) {
visAreaPointer = visTablesArea.Id;
delAreaPointer = delTablesArea.Id;
// Write empty entries for both of these
visTablesArea.WriteInt4(1);
visTablesArea.WriteInt8(0);
visTablesArea.Flush();
delTablesArea.WriteInt4(1);
delTablesArea.WriteInt8(0);
delTablesArea.Flush();
// Now allocate an empty state header
using (var headerWriter = Store.CreateArea(32)) {
long headerP = headerWriter.Id;
headerWriter.WriteInt4(Magic);
headerWriter.WriteInt4(0);
headerWriter.WriteInt8(0);
headerWriter.WriteInt8(visAreaPointer);
headerWriter.WriteInt8(delAreaPointer);
headerWriter.Flush();
headerArea = Store.GetArea(headerP, false);
// Reset currentTableId
currentTableId = 0;
visibleList = new List<TableState>();
deleteList = new List<TableState>();
// Return pointer to the header area
return headerP;
}
}
}
}
}