make traits more flexible by splitting out node-related fragment

llvm-svn: 65690
This commit is contained in:
Gabor Greif 2009-02-28 10:17:32 +00:00
parent fda885d048
commit e57d407fc2
1 changed files with 17 additions and 9 deletions

View File

@ -69,21 +69,29 @@ struct ilist_sentinel_traits {
static void destroySentinel(NodeTy *N) { delete N; } static void destroySentinel(NodeTy *N) { delete N; }
}; };
/// ilist_node_traits - A fragment for template traits for intrusive list
/// that provides default node related operations.
///
template<typename NodeTy>
struct ilist_node_traits {
static NodeTy *createNode(const NodeTy &V) { return new NodeTy(V); }
static void deleteNode(NodeTy *V) { delete V; }
void addNodeToList(NodeTy *) {}
void removeNodeFromList(NodeTy *) {}
void transferNodesFromList(ilist_node_traits & /*SrcTraits*/,
ilist_iterator<NodeTy> /*first*/,
ilist_iterator<NodeTy> /*last*/) {}
};
/// ilist_default_traits - Default template traits for intrusive list. /// ilist_default_traits - Default template traits for intrusive list.
/// By inheriting from this, you can easily use default implementations /// By inheriting from this, you can easily use default implementations
/// for all common operations. /// for all common operations.
/// ///
template<typename NodeTy> template<typename NodeTy>
struct ilist_default_traits : ilist_nextprev_traits<NodeTy>, struct ilist_default_traits : ilist_nextprev_traits<NodeTy>,
ilist_sentinel_traits<NodeTy> { ilist_sentinel_traits<NodeTy>,
static NodeTy *createNode(const NodeTy &V) { return new NodeTy(V); } ilist_node_traits<NodeTy> {
static void deleteNode(NodeTy *V) { delete V; }
void addNodeToList(NodeTy *) {}
void removeNodeFromList(NodeTy *) {}
void transferNodesFromList(ilist_default_traits & /*SrcTraits*/,
ilist_iterator<NodeTy> /*first*/,
ilist_iterator<NodeTy> /*last*/) {}
}; };
// Template traits for intrusive list. By specializing this template class, you // Template traits for intrusive list. By specializing this template class, you