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 static AbstractFreespaceManager CreateNew
            (LocalObjectContainer file, byte systemType)
        {
            systemType = CheckType(systemType);
            var unblockedDiscardLimit = file.ConfigImpl.DiscardFreeSpace();
            var blockedDiscardLimit   = unblockedDiscardLimit == int.MaxValue
                ? unblockedDiscardLimit
                : file.BlockConverter().BytesToBlocks(unblockedDiscardLimit);
            var         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;
            }
            }
        }