using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; namespace CourseWork_EredavkinRA { public class StateStorage { private List states; public int CurrentStateIndex; public int Count => states.Count; public StateStorage() { states = new List(); CurrentStateIndex = 0; } public void AddState(ArrayDequeState state, bool nextState = true) { if (nextState) { CurrentStateIndex++; } MessageBox.Show(CurrentStateIndex.ToString()); states.Add(state); } public void ClearStates() { CurrentStateIndex--; states.Clear(); } public IEnumerable GetStates() { return states; } public void SaveToFile(string filePath) { using (StreamWriter writer = new StreamWriter(filePath)) { foreach (var state in states) { string line = string.Join(",", state.Array) + ";" + state.Top; writer.WriteLine(line); } } } public void LoadFromFile(string filePath) { states.Clear(); using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { if (string.IsNullOrWhiteSpace(line)) { continue; } try { var parts = line.Split(';'); int[] array = parts[0].Split(',').Select(int.Parse).ToArray(); int top = int.Parse(parts[1]); ArrayDequeState state = new ArrayDequeState(array, top); states.Add(state); } catch (FormatException ex) { System.Diagnostics.Debug.WriteLine($"Error parsing line: {line}. Exception: {ex.Message}"); } } } CurrentStateIndex = states.Count > 0 ? states.Count - 1 : -1; } public ArrayDequeState? GetLastState() { return states.LastOrDefault(); } public ArrayDequeState? GetCurrentState() { if (CurrentStateIndex >= 0 && CurrentStateIndex < states.Count) { return states[CurrentStateIndex]; } return null; } public ArrayDequeState GetNextState() { MessageBox.Show(CurrentStateIndex + " " + (states.Count - 1)); if (CurrentStateIndex < states.Count - 1) { CurrentStateIndex++; MessageBox.Show(CurrentStateIndex.ToString()); return states[CurrentStateIndex]; } return null; } public ArrayDequeState? GetPreviousState() { if (CurrentStateIndex > 0) { CurrentStateIndex--; MessageBox.Show(CurrentStateIndex.ToString()); return states[CurrentStateIndex]; } return null; } public int GetCurrentStateIndex() { return CurrentStateIndex; } public void StepForward() { if (CurrentStateIndex + 1 >= Count) return; CurrentStateIndex++; } public void StepBackward() { if (CurrentStateIndex == 0) return; CurrentStateIndex--; } } }