Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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();
            }
        }