public void Union(int indexA, int indexB) { int rootIndexA = FindRootIndex(indexA); int rootIndexB = FindRootIndex(indexB); if (rootIndexA != rootIndexB) { // A and B are not in the same set, merge them if (m_set[rootIndexA].rank < m_set[rootIndexB].rank) { SetEntry entryA = m_set[rootIndexA]; entryA.parent_index = rootIndexB; } else if (m_set[rootIndexA].rank > m_set[rootIndexB].rank) { SetEntry entryB = m_set[rootIndexB]; entryB.parent_index = rootIndexA; } else { SetEntry entryA = m_set[rootIndexA]; SetEntry entryB = m_set[rootIndexB]; entryB.parent_index = rootIndexA; entryA.rank++; } } }
public int FindRootIndex(int index) { if (index != m_set[index].parent_index) { SetEntry setEntry = m_set[index]; setEntry.parent_index = FindRootIndex(m_set[index].parent_index); } return(m_set[index].parent_index); }
public void AddElement(T payload) { // Keep a mapping of where a given payload exists in the UnionFind m_payloadToIndexMap.Add(payload, m_set.Count); // Add the payload to the set { SetEntry newEntry = new SetEntry(); newEntry.parent_index = m_set.Count; newEntry.rank = 0; newEntry.payload = payload; m_set.Add(newEntry); } }
protected static SetEntry Except(SetEntry setEntry) { var listRanges = new List <RangeEntry>(); var current = char.MinValue; foreach (var entry in setEntry.Matches.OrderBy(GetMinChar)) { if (entry is RangeEntry range) { if (range.First > current) { var next = (char)(range.First - 1); if (current < next) { listRanges.Add(new RangeEntry(current, next)); } } current = (char)(range.Last + 1); continue; } var charEntry = (CharEntry)entry; var prev = (char)(charEntry.Char - 1); if (current < prev) { listRanges.Add(new RangeEntry(current, prev)); } current = (char)(charEntry.Char + 1); } if (current < char.MaxValue) { listRanges.Add(new RangeEntry(current, char.MaxValue)); } return(new SetEntry(listRanges)); }
public object Any(SetEntry request) { Redis.SetValue(request.Key, request.Value); return(new SetEntryResponse()); }
internal CallbackReference(VariableName originatedVar, GetEntry getter, SetEntry setter) : base(originatedVar, VariableKind.Meta, -1) { _getter = getter; _setter = setter; }