/// <summary> /// Sets an allocation page to be displayed /// </summary> /// <param name="pageAddress">The page address.</param> /// <param name="databaseName">Name of the database.</param> /// <param name="connectionString">The connection string.</param> /// <param name="showHeader">if set to <c>true</c> [show header].</param> /// <returns></returns> public List <Marker> SetAllocationPage(PageAddress pageAddress, string databaseName, string connectionString, bool showHeader) { topPanel.Visible = showHeader; var allocationPage = new AllocationPage(connectionString, databaseName, pageAddress); allocationMap.Mode = MapMode.Standard; allocationMap.ExtentCount = 63903; allocationMap.ExtentSize = AllocationMap.Small; allocationMap.StartPage = allocationPage.StartPage; allocationMap.FileId = allocationPage.StartPage.FileId; var layer = new AllocationLayer(allocationPage.PageAddress.ToString(), allocationPage, Color.Brown); layer.SingleSlotsOnly = false; allocationMap.MapLayers.Clear(); allocationMap.MapLayers.Add(layer); allocationMap.Invalidate(); if (showHeader) { SetIamInformation(allocationPage); } var markers = MarkerBuilder.BuildMarkers(allocationPage, string.Empty); return(markers); }
/// <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)))); } } }
/// <summary> /// Displays the buffer pool layer. /// </summary> private void DisplayBufferPoolLayer() { bufferPool.Refresh(); var clean = new AllocationPage(); clean.SinglePageSlots.AddRange(bufferPool.CleanPages); var bufferPoolLayer = new AllocationLayer("Buffer Pool", clean, Color.Black) { SingleSlotsOnly = true, Transparency = 80, Transparent = true, BorderColour = Color.WhiteSmoke, UseBorderColour = true, UseDefaultSinglePageColour = false }; var dirty = new AllocationPage(); dirty.SinglePageSlots.AddRange(bufferPool.DirtyPages); var bufferPoolDirtyLayer = new AllocationLayer("Buffer Pool (Dirty)", dirty, Color.IndianRed) { SingleSlotsOnly = true, Transparent = false, BorderColour = Color.WhiteSmoke, UseBorderColour = true, UseDefaultSinglePageColour = false, LayerType = AllocationLayerType.TopLeftCorner }; allocationContainer.AddMapLayer(bufferPoolLayer); allocationContainer.AddMapLayer(bufferPoolDirtyLayer); }
/// <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); }
/// <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); } }
/// <summary> /// Sets the IAM header information. /// </summary> /// <param name="page">The page.</param> private void SetIamInformation(AllocationPage page) { if (page.SinglePageSlots.Count == 8) { slotZeroTextBox.Text = page.SinglePageSlots[0].ToString(); slotOneTextBox.Text = page.SinglePageSlots[1].ToString(); slotTwoTextBox.Text = page.SinglePageSlots[2].ToString(); slotThreeTextBox.Text = page.SinglePageSlots[3].ToString(); slotFourTextBox.Text = page.SinglePageSlots[4].ToString(); slotFiveTextBox.Text = page.SinglePageSlots[5].ToString(); slotSixTextBox.Text = page.SinglePageSlots[6].ToString(); slotSevenTextBox.Text = page.SinglePageSlots[7].ToString(); startPageTextBox.Text = page.StartPage.ToString(); } }
/// <summary> /// Initializes a new instance of the <see cref="AllocationLayer"/> class. /// </summary> /// <param name="name">The name.</param> /// <param name="page">The page.</param> /// <param name="colour">The colour of the layer.</param> public AllocationLayer(string name, AllocationPage page, Color colour) { this.name = name; if (page.Header.PageType == PageType.Iam) { allocations.Add(new IamAllocation(page)); } else { allocations.Add(new Allocation(page)); } this.colour = colour; }
/// <summary> /// Initializes a new instance of the <see cref="IamAllocation"/> class. /// </summary> /// <param name="page">The page.</param> public IamAllocation(AllocationPage page) : base(page) { MultiFile = true; }