|
LLVM
4.0.0
|
FoldingSetImpl - Implements the folding set functionality. More...
#include <FoldingSet.h>
Classes | |
| class | Node |
| Node - This class is used to maintain the singly linked bucket list in a folding set. More... | |
Public Member Functions | |
| void | clear () |
| clear - Remove all nodes from the folding set. More... | |
| bool | RemoveNode (Node *N) |
| RemoveNode - Remove a node from the folding set, returning true if one was removed or false if the node was not in the folding set. More... | |
| Node * | GetOrInsertNode (Node *N) |
| GetOrInsertNode - If there is an existing simple Node exactly equal to the specified node, return it. More... | |
| Node * | FindNodeOrInsertPos (const FoldingSetNodeID &ID, void *&InsertPos) |
| FindNodeOrInsertPos - Look up the node specified by ID. More... | |
| void | InsertNode (Node *N, void *InsertPos) |
| InsertNode - Insert the specified node into the folding set, knowing that it is not already in the folding set. More... | |
| void | InsertNode (Node *N) |
| InsertNode - Insert the specified node into the folding set, knowing that it is not already in the folding set. More... | |
| unsigned | size () const |
| size - Returns the number of nodes in the folding set. More... | |
| bool | empty () const |
| empty - Returns true if there are no nodes in the folding set. More... | |
| void | reserve (unsigned EltCount) |
| reserve - Increase the number of buckets such that adding the EltCount-th node won't cause a rebucket operation. More... | |
| unsigned | capacity () |
| capacity - Returns the number of nodes permitted in the folding set before a rebucket operation is performed. More... | |
Protected Member Functions | |
| FoldingSetImpl (unsigned Log2InitSize=6) | |
| FoldingSetImpl (FoldingSetImpl &&Arg) | |
| FoldingSetImpl & | operator= (FoldingSetImpl &&RHS) |
| ~FoldingSetImpl () | |
| virtual void | GetNodeProfile (Node *N, FoldingSetNodeID &ID) const =0 |
| GetNodeProfile - Instantiations of the FoldingSet template implement this function to gather data bits for the given node. More... | |
| virtual bool | NodeEquals (Node *N, const FoldingSetNodeID &ID, unsigned IDHash, FoldingSetNodeID &TempID) const =0 |
| NodeEquals - Instantiations of the FoldingSet template implement this function to compare the given node with the given ID. More... | |
| virtual unsigned | ComputeNodeHash (Node *N, FoldingSetNodeID &TempID) const =0 |
| ComputeNodeHash - Instantiations of the FoldingSet template implement this function to compute a hash value for the given node. More... | |
Protected Attributes | |
| void ** | Buckets |
| Buckets - Array of bucket chains. More... | |
| unsigned | NumBuckets |
| NumBuckets - Length of the Buckets array. More... | |
| unsigned | NumNodes |
| NumNodes - Number of nodes in the folding set. More... | |
FoldingSetImpl - Implements the folding set functionality.
The main structure is an array of buckets. Each bucket is indexed by the hash of the nodes it contains. The bucket itself points to the nodes contained in the bucket via a singly linked list. The last node in the list points back to the bucket to facilitate node removal.
Definition at line 113 of file FoldingSet.h.
|
explicitprotected |
Definition at line 228 of file FoldingSet.cpp.
References AllocateBuckets(), assert(), Buckets, NumBuckets, and NumNodes.
|
protected |
Definition at line 236 of file FoldingSet.cpp.
|
protected |
Definition at line 254 of file FoldingSet.cpp.
References Buckets.
|
inline |
capacity - Returns the number of nodes permitted in the folding set before a rebucket operation is performed.
Definition at line 195 of file FoldingSet.h.
References NumBuckets.
Referenced by InsertNode(), and reserve().
| void FoldingSetImpl::clear | ( | ) |
clear - Remove all nodes from the folding set.
Definition at line 258 of file FoldingSet.cpp.
References Buckets, NumBuckets, and NumNodes.
|
protectedpure virtual |
ComputeNodeHash - Instantiations of the FoldingSet template implement this function to compute a hash value for the given node.
Referenced by InsertNode().
|
inline |
empty - Returns true if there are no nodes in the folding set.
Definition at line 186 of file FoldingSet.h.
References NumNodes.
| FoldingSetImpl::Node * FoldingSetImpl::FindNodeOrInsertPos | ( | const FoldingSetNodeID & | ID, |
| void *& | InsertPos | ||
| ) |
FindNodeOrInsertPos - Look up the node specified by ID.
If it exists, return it. If not, return the insertion token that will make insertion faster.
Definition at line 320 of file FoldingSet.cpp.
References Buckets, llvm::FoldingSetNodeID::clear(), llvm::FoldingSetNodeID::ComputeHash(), GetBucketFor(), GetNextPtr(), NodeEquals(), and NumBuckets.
Referenced by llvm::FoldingSet< llvm::DIEAbbrev >::FindNodeOrInsertPos(), llvm::ContextualFoldingSet< T, Ctx >::FindNodeOrInsertPos(), and GetOrInsertNode().
|
protectedpure virtual |
GetNodeProfile - Instantiations of the FoldingSet template implement this function to gather data bits for the given node.
Referenced by GetOrInsertNode().
| FoldingSetImpl::Node * FoldingSetImpl::GetOrInsertNode | ( | FoldingSetImpl::Node * | N | ) |
GetOrInsertNode - If there is an existing simple Node exactly equal to the specified node, return it.
Otherwise, insert 'N' and return it instead.
Otherwise, insert 'N' and it instead.
Definition at line 415 of file FoldingSet.cpp.
References E, FindNodeOrInsertPos(), GetNodeProfile(), InsertNode(), and N.
Referenced by llvm::FoldingSet< llvm::DIEAbbrev >::GetOrInsertNode(), llvm::ContextualFoldingSet< T, Ctx >::GetOrInsertNode(), and InsertNode().
| void FoldingSetImpl::InsertNode | ( | Node * | N, |
| void * | InsertPos | ||
| ) |
InsertNode - Insert the specified node into the folding set, knowing that it is not already in the folding set.
InsertNode - Insert the specified node into the folding set, knowing that it is not already in the map.
InsertPos must be obtained from FindNodeOrInsertPos.
The insert position is actually a bucket pointer.
Definition at line 345 of file FoldingSet.cpp.
References assert(), Buckets, capacity(), ComputeNodeHash(), GetBucketFor(), llvm::FoldingSetImpl::Node::getNextInBucket(), N, NumBuckets, NumNodes, and llvm::FoldingSetImpl::Node::SetNextInBucket().
Referenced by llvm::ImmutableListFactory< T >::concat(), llvm::BitsInit::get(), llvm::ListInit::get(), llvm::UnOpInit::get(), llvm::BinOpInit::get(), llvm::TernOpInit::get(), llvm::DagInit::get(), and GetOrInsertNode().
|
inline |
InsertNode - Insert the specified node into the folding set, knowing that it is not already in the folding set.
Definition at line 176 of file FoldingSet.h.
References assert(), and GetOrInsertNode().
|
protectedpure virtual |
NodeEquals - Instantiations of the FoldingSet template implement this function to compare the given node with the given ID.
Referenced by FindNodeOrInsertPos().
|
protected |
Definition at line 243 of file FoldingSet.cpp.
References Buckets, NumBuckets, and NumNodes.
RemoveNode - Remove a node from the folding set, returning true if one was removed or false if the node was not in the folding set.
Definition at line 374 of file FoldingSet.cpp.
References GetBucketPtr(), llvm::FoldingSetImpl::Node::getNextInBucket(), GetNextPtr(), NumNodes, Ptr, and llvm::FoldingSetImpl::Node::SetNextInBucket().
| void FoldingSetImpl::reserve | ( | unsigned | EltCount | ) |
reserve - Increase the number of buckets such that adding the EltCount-th node won't cause a rebucket operation.
reserve is permitted to allocate more space than requested by EltCount.
Definition at line 307 of file FoldingSet.cpp.
References capacity(), and llvm::PowerOf2Floor().
|
inline |
size - Returns the number of nodes in the folding set.
Definition at line 183 of file FoldingSet.h.
References NumNodes.
|
protected |
Buckets - Array of bucket chains.
Definition at line 119 of file FoldingSet.h.
Referenced by llvm::FoldingSet< llvm::DIEAbbrev >::begin(), llvm::ContextualFoldingSet< T, Ctx >::begin(), llvm::FoldingSet< llvm::DIEAbbrev >::bucket_begin(), llvm::ContextualFoldingSet< T, Ctx >::bucket_begin(), llvm::FoldingSet< llvm::DIEAbbrev >::bucket_end(), llvm::ContextualFoldingSet< T, Ctx >::bucket_end(), clear(), llvm::FoldingSet< llvm::DIEAbbrev >::end(), llvm::ContextualFoldingSet< T, Ctx >::end(), FindNodeOrInsertPos(), FoldingSetImpl(), InsertNode(), operator=(), and ~FoldingSetImpl().
|
protected |
NumBuckets - Length of the Buckets array.
Always a power of 2.
Definition at line 123 of file FoldingSet.h.
Referenced by llvm::FoldingSet< llvm::DIEAbbrev >::bucket_begin(), llvm::ContextualFoldingSet< T, Ctx >::bucket_begin(), llvm::FoldingSet< llvm::DIEAbbrev >::bucket_end(), llvm::ContextualFoldingSet< T, Ctx >::bucket_end(), capacity(), clear(), llvm::FoldingSet< llvm::DIEAbbrev >::end(), llvm::ContextualFoldingSet< T, Ctx >::end(), FindNodeOrInsertPos(), FoldingSetImpl(), InsertNode(), and operator=().
|
protected |
NumNodes - Number of nodes in the folding set.
Growth occurs when NumNodes is greater than twice the number of buckets.
Definition at line 127 of file FoldingSet.h.
Referenced by clear(), empty(), FoldingSetImpl(), InsertNode(), operator=(), RemoveNode(), and size().
1.8.6