Exemplo n.º 1
0
        /// <summary>
        /// Builds the allocation chain following an interval
        /// </summary>
        /// <param name="database">The database.</param>
        /// <param name="pageAddress">The page address.</param>
        protected virtual void BuildChain(Database database, PageAddress pageAddress)
        {
            var page = new AllocationPage(database, pageAddress);

            if (page.Header.PageType == PageType.Iam)
            {
                //throw new ArgumentException();
            }

            Pages.Add(page);
            SinglePageSlots.AddRange(page.SinglePageSlots);

            interval = Database.AllocationInterval;

            var pageCount = (int)Math.Ceiling(database.FileSize(pageAddress.FileId) / (decimal)interval);

            if (pageCount > 1)
            {
                for (var i = 1; i < pageCount; i++)
                {
                    Pages.Add(new AllocationPage(database,
                                                 new PageAddress(pageAddress.FileId,
                                                                 pageAddress.PageId + (i * interval))));
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Allocation"/> class.
 /// </summary>
 /// <param name="page">The page.</param>
 public Allocation(AllocationPage page)
 {
     FileId    = page.PageAddress.FileId;
     MultiFile = false;
     Pages.Add(page);
     interval = Database.AllocationInterval;
     SinglePageSlots.AddRange(page.SinglePageSlots);
 }
Exemplo n.º 3
0
        /// <summary>
        /// Refreshes this instance.
        /// </summary>
        public void Refresh()
        {
            SinglePageSlots.Clear();

            foreach (var page in Pages)
            {
                page.Refresh();
                SinglePageSlots.AddRange(page.SinglePageSlots);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Builds an allocation chain based on linkage through the headers.
        /// </summary>
        /// <param name="database"></param>
        /// <param name="pageAddress"></param>
        protected new void BuildChain(Database database, PageAddress pageAddress)
        {
            var page = new AllocationPage(database, pageAddress);

            Pages.Add(page);
            SinglePageSlots.AddRange(page.SinglePageSlots);

            if (page.Header.NextPage != PageAddress.Empty)
            {
                BuildChain(database, page.Header.NextPage);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Loads the single page slots.
        /// </summary>
        private void LoadSinglePageSlots()
        {
            var offset = SinglePageSlotOffset;

            for (var i = 0; i < 8; i++)
            {
                var pageAddress = new byte[6];

                Array.Copy(PageData, offset, pageAddress, 0, 6);

                SinglePageSlots.Add(new PageAddress(pageAddress));

                offset += 6;
            }
        }