//////////////////////////////////////////////////////////////////////////////////////////////////// /// \fn public void RecordOrderChange(List<int> permutations, int sourceProcess) /// /// \brief Record order change. /// /// \par Description. /// /// \par Algorithm. /// /// \par Usage Notes. /// /// \author Ilanh /// \date 27/05/2018 /// /// \param permutations (List<int>) - The permutations. /// \param sourceProcess (int) - Source process. //////////////////////////////////////////////////////////////////////////////////////////////////// public void RecordOrderChange(List <int> permutations, int sourceProcess) { // Extract messages of the channel from the messageQ MessageQ messageQ = Element.or[bp.ork.MessageQ]; AttributeList channelMessages; messageQ.ExstractChannelMessages(sourceProcess, out channelMessages); AttributeDictionary changeRecord = new AttributeDictionary(); changeRecord.Add(Comps.SourceProcess, new Attribute { Value = sourceProcess, Editable = false }); changeRecord.Add(Comps.MessageQ, new Attribute { Value = channelMessages, Editable = false }); changeRecord.Add(Comps.Permutations, new Attribute { Value = permutations.ToAttributeList(), Editable = false }); Add(new Attribute { Value = changeRecord, Editable = false }); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// \fn public void CheckAndChange() /// /// \brief Check and change. /// /// \par Description. /// - For each entry in the list: /// -# Extract the methods from the MessageQ of the sourceProcess (attribute in the entry) /// -# Compare this list with the list in the entry /// -# if they are identical /// -# Ask the user if to perform the change /// -# If the answer is yes perform the order change using a method of the MessageQ class /// /// \par Algorithm. /// /// /// \par Usage Notes. /// /// \author Ilanh /// \date 14/05/2018 //////////////////////////////////////////////////////////////////////////////////////////////////// public void CheckAndChange() { MessageQ messageQ = Element.or[bp.ork.MessageQ]; if (Count > 0) { for (int idx = 0; idx < Count; idx++) { AttributeList channelMessages; int sourceProcess = this[idx][Comps.SourceProcess]; List <int> messageIdxs = messageQ.ExstractChannelMessages(sourceProcess, out channelMessages); if (channelMessages.CheckEqual(0, "", (AttributeList)this[idx][Comps.MessageQ])) { List <int> permutations = this[idx][Comps.Permutations].AsList(); if (PerformQuestion(this[idx], messageIdxs)) { messageQ.ChangeOrder(permutations, sourceProcess); } } } } }