From b141e397d52d9946e93f84c65c6b2e653b026041 Mon Sep 17 00:00:00 2001 From: Gabor Greif Date: Sat, 28 Feb 2009 10:17:32 +0000 Subject: [PATCH] make traits more flexible by splitting out node-related fragment git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65690 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/ilist.h | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/include/llvm/ADT/ilist.h b/include/llvm/ADT/ilist.h index 9a088fd71e6..962a29d0ff2 100644 --- a/include/llvm/ADT/ilist.h +++ b/include/llvm/ADT/ilist.h @@ -69,21 +69,29 @@ struct ilist_sentinel_traits { 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 +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 /*first*/, + ilist_iterator /*last*/) {} +}; + /// ilist_default_traits - Default template traits for intrusive list. /// By inheriting from this, you can easily use default implementations /// for all common operations. /// template struct ilist_default_traits : ilist_nextprev_traits, - ilist_sentinel_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_default_traits & /*SrcTraits*/, - ilist_iterator /*first*/, - ilist_iterator /*last*/) {} + ilist_sentinel_traits, + ilist_node_traits { }; // Template traits for intrusive list. By specializing this template class, you