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); }
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); }
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); }
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); }