Ejemplo n.º 1
0
        private List <EventPair> GetHashes(char[,] Matrix)
        {
            var Hashes = new List <EventPair>();

            for (int i = 0; i < T_W.Count(); i++)
            {
                for (int j = 0; j < T_W.Count(); j++)
                {
                    if (Matrix[i, j] == '#')
                    {
                        Hashes.Add(new EventPair {
                            Left = new List <Event> {
                                T_W.ElementAt(i)
                            }, Right = new List <Event> {
                                T_W.ElementAt(j)
                            }
                        });
                    }
                }
            }
            return(Hashes);
        }
Ejemplo n.º 2
0
        private List <EventPair> GetForwards(char[,] Matrix)
        {
            var x_w = new List <EventPair>();

            for (int i = 0; i < T_W.Count(); i++)
            {
                for (int j = 0; j < T_W.Count(); j++)
                {
                    if (Matrix[i, j] == '>')
                    {
                        x_w.Add(new EventPair {
                            Left = new List <Event> {
                                T_W.ElementAt(i)
                            }, Right = new List <Event> {
                                T_W.ElementAt(j)
                            }
                        });
                    }
                }
            }

            return(x_w);
        }
Ejemplo n.º 3
0
        private List <EventPair> GetNormalizedPairs(List <EventPair> Hashes, List <EventPair> Forwards)
        {
            var x_w    = Forwards.ToList();
            var X_Temp = Forwards.ToList();

            //Check if Hashes come with others
            foreach (var hash in Hashes)
            {
                var eventsToMatch = T_W.Where(t => t.Id != hash.Left.First().Id&& t.Id != hash.Right.First().Id).ToList();
                foreach (var matchEvent in eventsToMatch)
                {
                    var pairToMatch1 = new EventPair {
                        Left = new List <Event> {
                            matchEvent
                        }, Right = new List <Event> {
                            hash.Left.First()
                        }
                    };
                    var pairToMatch2 = new EventPair {
                        Left = new List <Event> {
                            matchEvent
                        }, Right = new List <Event> {
                            hash.Right.First()
                        }
                    };
                    if (X_Temp.ContainsEventPair(pairToMatch1) && X_Temp.ContainsEventPair(pairToMatch2))
                    {
                        var eventPair = new EventPair {
                            Left = new List <Event> {
                                matchEvent
                            }, Right = new List <Event> {
                                pairToMatch1.Right.First(), pairToMatch2.Right.First()
                            }
                        };
                        if (!x_w.ContainsEventPair(eventPair))
                        {
                            x_w.Add(eventPair);
                        }
                    }

                    pairToMatch1 = new EventPair {
                        Right = new List <Event> {
                            matchEvent
                        }, Left = new List <Event> {
                            hash.Left.First()
                        }
                    };
                    pairToMatch2 = new EventPair {
                        Right = new List <Event> {
                            matchEvent
                        }, Left = new List <Event> {
                            hash.Right.First()
                        }
                    };
                    if (X_Temp.ContainsEventPair(pairToMatch1) && X_Temp.ContainsEventPair(pairToMatch2))
                    {
                        var eventPair = new EventPair {
                            Left = new List <Event> {
                                pairToMatch1.Left.First(), pairToMatch2.Left.First()
                            }, Right = new List <Event> {
                                matchEvent
                            }
                        };
                        if (!x_w.ContainsEventPair(eventPair))
                        {
                            x_w.Add(eventPair);
                        }
                    }
                }
            }
            return(x_w);
        }
Ejemplo n.º 4
0
        private char[,] GenerateMatrix()
        {
            var eventsCount = T_W.Count;


            //Creating blank matrix
            var matrix = new char[eventsCount, eventsCount];

            //Traversing events wrt matrix : START
            for (int i = 0; i < eventsCount; i++)
            {
                for (int j = 0; j < eventsCount; j++)
                {
                    //Cancelling diagonal fields
                    if (i == j)
                    {
                        matrix[i, j] = '-';
                        continue;
                    }
                    char occurenceType     = '#';
                    var  firstEvent        = T_W.ElementAt(i);
                    var  secondEvent       = T_W.ElementAt(j);
                    bool traversalComplete = false;
                    foreach (var process in AllProcess)
                    {
                        var procList = process.OrderBy(t => t.StartTime).ToList();
                        for (int k = 0; k < procList.Count; k++)
                        {
                            var element     = procList.ElementAt(k);
                            var postElement = k < procList.Count - 1 ? procList.ElementAt(k + 1) : null;
                            if (postElement != null && element.EventId == firstEvent.Id && postElement.EventId == secondEvent.Id)
                            {
                                if (occurenceType == '<')
                                {
                                    occurenceType     = '|';
                                    traversalComplete = true;
                                }
                                else
                                {
                                    occurenceType = '>';
                                }
                            }
                            if (postElement != null && postElement.EventId == firstEvent.Id && element.EventId == secondEvent.Id)
                            {
                                if (occurenceType == '>')
                                {
                                    occurenceType     = '|';
                                    traversalComplete = true;
                                }
                                else
                                {
                                    occurenceType = '<';
                                }
                            }
                            if (traversalComplete)
                            {
                                traversalComplete = false;
                                break;
                            }
                        }
                    }
                    matrix[i, j]  = occurenceType;
                    occurenceType = '#';
                }
            }
            //Traversing events wrt matrix : END
            return(matrix);
        }