[#llvm-EquivalenceClasses] = xref:llvm.adoc[llvm]::EquivalenceClasses :relfileprefix: ../ :mrdocs: Collection of equivalence classes with insert, union, and find operations. == Synopsis Declared in `<llvm/ADT/EquivalenceClasses.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class ElemTy> class EquivalenceClasses; ---- == Description In addition to these modification methods, it is possible to iterate over all of the equivalence classes and all of the elements in a class. This implementation is an efficient implementation that only stores one copy of the element being indexed per entry in the set, and allows any arbitrary type to be indexed (as long as it can be implements DenseMapInfo). Here is a simple example using integers: [,cpp] ---- EquivalenceClasses EC; EC.unionSets(1, 2); // insert 1, 2 into the same set EC.insert(4); EC.insert(5); // insert 4, 5 into own sets EC.unionSets(5, 1); // merge the set for 1 with 5's set. for (EquivalenceClasses::iterator I = EC.begin(), E = EC.end(); I != E; ++I) { // Iterate over all of the equivalence sets. if (!I->isLeader()) continue; // Ignore non-leader sets. for (EquivalenceClasses::member_iterator MI = EC.member_begin(I); MI != EC.member_end(); ++MI) // Loop over members in this set. cerr << *MI << " "; // Print member. cerr << "\n"; // Finish set. } ---- This example prints: 4 5 1 2 == Types [cols="1,4"] |=== | Name| Description | xref:llvm/EquivalenceClasses/ECValue.adoc[`ECValue`] | One member of an equivalence class, with links to its leader and neighbors. | xref:llvm/EquivalenceClasses/member_iterator.adoc[`member_iterator`] | member_* Iterate over the members of an equivalence class. |=== == Type Aliases [cols="1,4"] |=== | Name| Description | xref:llvm/EquivalenceClasses/iterator.adoc[`iterator`] | iterator* ‐ Provides a way to iterate over all values in the set. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/EquivalenceClasses/2constructor-05.adoc[`EquivalenceClasses`] [.small]#[constructor]# | Constructors | xref:llvm/EquivalenceClasses/operator_assign.adoc[`operator=`] | Replace this collection with a deep copy of `RHS.` | xref:llvm/EquivalenceClasses/begin.adoc[`begin`] | Iterator to the first stored member pointer. | xref:llvm/EquivalenceClasses/contains.adoc[`contains`] | Returns true if `V` is contained an equivalence class. | xref:llvm/EquivalenceClasses/empty.adoc[`empty`] | True if no elements have been inserted. | xref:llvm/EquivalenceClasses/end.adoc[`end`] | Iterator past the last stored member pointer. | xref:llvm/EquivalenceClasses/erase.adoc[`erase`] | Erase a value from the union/find set, return true if erase succeeded, or false when the value was not found. | xref:llvm/EquivalenceClasses/eraseClass.adoc[`eraseClass`] | Erase the class containing `V,` i.e. erase all members of the class from the set. | xref:llvm/EquivalenceClasses/findLeader-0f.adoc[`findLeader`] | `findLeader` overloads | xref:llvm/EquivalenceClasses/getLeaderValue.adoc[`getLeaderValue`] | Return the leader value for `V,` which must already be in the set. | xref:llvm/EquivalenceClasses/getNumClasses.adoc[`getNumClasses`] | Return the number of equivalence classes (linear time). | xref:llvm/EquivalenceClasses/getOrInsertLeaderValue.adoc[`getOrInsertLeaderValue`] | Return the leader for `V,` inserting `V` first if needed. | xref:llvm/EquivalenceClasses/insert.adoc[`insert`] | Insert a new value into the union/find set, ignoring the request if the value already exists. | xref:llvm/EquivalenceClasses/isEquivalent.adoc[`isEquivalent`] | Return true if `V1` is equivalent to `V2.` | xref:llvm/EquivalenceClasses/member_begin.adoc[`member_begin`] | Begin iterating members of the class led by `ECV` (or end if not a leader). | xref:llvm/EquivalenceClasses/member_end.adoc[`member_end`] | Past‐the‐end iterator for member walks. | xref:llvm/EquivalenceClasses/members-0d.adoc[`members`] | `members` overloads | xref:llvm/EquivalenceClasses/unionSets-0c.adoc[`unionSets`] | `unionSets` overloads |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#