public static Db4objects.Db4o.Internal.Freespace.AbstractFreespaceManager CreateNew
			(LocalObjectContainer file, byte systemType)
		{
			systemType = CheckType(systemType);
			int unblockedDiscardLimit = file.ConfigImpl.DiscardFreeSpace();
			int blockedDiscardLimit = unblockedDiscardLimit == int.MaxValue ? unblockedDiscardLimit
				 : file.BlockConverter().BytesToBlocks(unblockedDiscardLimit);
			int remainderSizeLimit = file.BlockConverter().BytesToBlocks(RemainderSizeLimit);
			IProcedure4 slotFreedCallback = new _IProcedure4_52(file);
			switch (systemType)
			{
				case FmIx:
				{
					return new FreespaceManagerIx(blockedDiscardLimit, remainderSizeLimit);
				}

				case FmBtree:
				{
					return new BTreeFreespaceManager(file, slotFreedCallback, blockedDiscardLimit, remainderSizeLimit
						);
				}

				default:
				{
					return new InMemoryFreespaceManager(slotFreedCallback, blockedDiscardLimit, remainderSizeLimit
						);
					break;
				}
			}
		}
 public virtual void Write(Transaction trans)
 {
     if (!WriteObjectBegin())
     {
         return;
     }
     try
     {
         LocalObjectContainer container = (LocalObjectContainer)trans.Container();
         if (DTrace.enabled)
         {
             DTrace.PersistentOwnLength.Log(GetID());
         }
         int length = OwnLength();
         length = container.BlockConverter().BlockAlignedBytes(length);
         Slot slot = container.AllocateSlot(length);
         if (IsNew())
         {
             SetID(IdSystem(trans).NewId(SlotChangeFactory()));
             IdSystem(trans).NotifySlotCreated(_id, slot, SlotChangeFactory());
         }
         else
         {
             IdSystem(trans).NotifySlotUpdated(_id, slot, SlotChangeFactory());
         }
         if (DTrace.enabled)
         {
             DTrace.PersistentBaseNewSlot.LogLength(GetID(), slot);
         }
         ByteArrayBuffer writer = ProduceWriteBuffer(trans, length);
         WriteToFile(trans, writer, slot);
     }
     finally
     {
         EndProcessing();
     }
 }
Beispiel #3
0
 public ConsistencyChecker(IObjectContainer db)
 {
     _db = (LocalObjectContainer) db;
     _overlaps = new OverlapMap(_db.BlockConverter());
 }