private void DrawDTGV(string strInputSchedule, string strSerialSchedule) { StringScheduleInput strOutputSchedule = Process.StringSchedule(strInputSchedule); StringScheduleInput strOutSerialSchedule = Process.StringSchedule(strSerialSchedule); DataTable table = new DataTable(); foreach (var step in strOutputSchedule.Schedule.Steps) { // dtgvSchedule.Columns.Add(step.Transaction.ToString(), step.Transaction.ToString()); if (!table.Columns.Contains(step.Transaction.ToString())) { table.Columns.Add(step.Transaction.ToString()); } } foreach (var step in strOutputSchedule.Schedule.Steps) { DataRow dr = table.NewRow(); dr[step.Transaction.ToString()] = step.Operation.ToString().Remove(1) + " (" + step.Target.ToString() + ")"; table.Rows.Add(dr); } dtgvSchedule.DataSource = table; List <int> col = new List <int>(); DataTable table2 = new DataTable(); foreach (var step in strOutSerialSchedule.Schedule.Steps) { // dtgvSchedule.Columns.Add(step.Transaction.ToString(), step.Transaction.ToString()); if (!col.Contains(int.Parse(step.Transaction.ToString()))) { col.Add(int.Parse(step.Transaction.ToString())); } } col.Sort(); foreach (var step in col) { // dtgvSchedule.Columns.Add(step.Transaction.ToString(), step.Transaction.ToString()); table2.Columns.Add(step.ToString()); } foreach (var step in strOutSerialSchedule.Schedule.Steps) { DataRow dr = table2.NewRow(); dr[step.Transaction.ToString()] = step.Operation.ToString().Remove(1) + " (" + step.Target.ToString() + ")"; table2.Rows.Add(dr); } dtgvSerialSchedule.DataSource = table2; }
public static void Caculate(string input) { var dependencyGraphBuilder = new CachingDependencyGraphBuilder(new DependencyGraphBuilder(new AllStepPairInspector())); ISerializabilityAnalyzer analyzer = new DependencyGraphSerializabilityAnalyzer(dependencyGraphBuilder, new DepthFirstCycleChecker()); ISerialScheduleGenerator generator = new DependencyGraphSerialScheduleGenerator(dependencyGraphBuilder, analyzer); // we want three outputs: // is the given schedule conflict serializable? // what are the dependencies for each transaction? // what is the serial schedule, if it is conflict serializable? var scheduleInput = new StringScheduleInput(new ScheduleParser(), input); var dependencyGraph = dependencyGraphBuilder.GetGraph(scheduleInput.Schedule); var isConflictSerializable = analyzer.IsConflictSerializable(scheduleInput.Schedule); result = isConflictSerializable; DSK = new Dictionary <int, List <int> >(); foreach (var node in dependencyGraph) { // Console.WriteLine("Transaction {0} depends upon: {1}", node.Transaction, string.Join(", ", node.Dependencies.Select(n => n.Transaction))); List <int> ds = new List <int>(); ds.Add(int.Parse(node.Transaction.ToString())); foreach (var p in node.Dependencies) { ds.Add(int.Parse(p.ToString())); } DSK.Add(int.Parse(node.Transaction.ToString()), ds); } if (isConflictSerializable) { serialSchedule = generator.GetSerialSchedule(scheduleInput.Schedule).ToString(); } }