//CONSTRUCTOR public OldAllocationStrategies(List <int> l, String s) { ToolbarItem info = new ToolbarItem(); info.Text = App._sHelpInfoHint; this.ToolbarItems.Add(info); info.Clicked += B_Info_Clicked; fragmentList = l; strategy = s; memoryRequestState = MyEnum.noRequestYet; Title = "Allocation Strategies: " + strategy; isContentCreated = false; if (Application.Current.MainPage.Width > Application.Current.MainPage.Height) { this.isContentCreated = true; CreateContent(); this.Content.IsVisible = true; } else { CreateContent(); this.isContentCreated = true; this.Content.IsVisible = false; } //EVENT LISTENER //subscribe to Message in order to know if a new memory request was made MessagingCenter.Subscribe <OldAllocationStrategiesModal>(this, "new memory request", (args) => { l_Size.Text = memoryRequest.ToString(); l_Diff.Text = diff; l_Free.Text = free; if (OldAllocationStrategiesScene.CheckIfFull()) { memoryRequestState = MyEnum.memoryFull; } else { memoryRequestState = MyEnum.newRequest; } }); }
/********************************************************************** *********************************************************************/ async void B_Next_Clicked(object sender, EventArgs e) { switch (memoryRequestState) { case MyEnum.newRequest: //new request memoryRequestState = MyEnum.searchingForBlock; OldAllocationStrategiesScene.RequestNew(memoryRequest); break; case MyEnum.searchingForBlock: //searching for block switch (strategy) { case "First Fit": OldAllocationStrategiesScene.pos++; OldAllocationStrategiesScene.FirstFit(memoryRequest); break; case "Next Fit": OldAllocationStrategiesScene.pos++; OldAllocationStrategiesScene.NextFit(memoryRequest); break; case "Best Fit": OldAllocationStrategiesScene.pos++; OldAllocationStrategiesScene.BestFit(memoryRequest); break; case "Worst Fit": OldAllocationStrategiesScene.pos++; OldAllocationStrategiesScene.WorstFit(memoryRequest); break; case "Tailoring Best Fit": OldAllocationStrategiesScene.pos++; OldAllocationStrategiesScene.TailoringBestFit(memoryRequest); break; case "Combined Fit": OldAllocationStrategiesScene.pos++; // Debug.WriteLine("next clicked pos = " + OldAllocationStrategiesScene.pos); OldAllocationStrategiesScene.CombinedFit(memoryRequest); break; } break; case MyEnum.successfull: //successfull OldAllocationStrategiesScene.ClearRedArrow(); OldAllocationStrategiesScene.ClearGrayArrow(); OldAllocationStrategiesScene.DrawFill(); memoryRequestState = MyEnum.noRequestYet; b_Restart.IsEnabled = true; //clear information bar l_Size.Text = size; l_Diff.Text = diff; l_Best.Text = best; l_Free.Text = free; break; case MyEnum.unsuccessfull: //unsucessfull OldAllocationStrategiesScene.ClearGrayArrow(); OldAllocationStrategiesScene.ClearRedArrow(); await DisplayAlert("Alert", "No free space has been found", "OK"); memoryRequestState = MyEnum.noRequestYet; //ready for a new request //clear information bar l_Size.Text = size; l_Diff.Text = diff; l_Best.Text = best; l_Free.Text = free; break; case MyEnum.noRequestYet: //no requst yet if (OldAllocationStrategiesScene.CheckIfFull()) { memoryRequestState = MyEnum.memoryFull; await DisplayAlert("Alert", "Out of memory! The app will close now", "OK"); await Navigation.PopAsync(); break; } else { await Navigation.PushModalAsync(new OldAllocationStrategiesModal(), true); break; } case MyEnum.memoryFull: //memory is full await DisplayAlert("Alert", "Out of memory! The app will close now", "OK"); await Navigation.PopAsync(); break; } }