summaryrefslogtreecommitdiff
path: root/include/llvm/ADT/ilist_node.h
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-05-12 21:35:19 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-05-12 21:35:19 +0000
commitaa81380353a27d9d216cafdd88df08a5eef43b74 (patch)
treef7ef143fdf660030e760607e80245e36d8a93c0e /include/llvm/ADT/ilist_node.h
parenta4d73d01c4850dce6a951228b13dcd8e733704b4 (diff)
downloadllvm-aa81380353a27d9d216cafdd88df08a5eef43b74.tar.gz
llvm-aa81380353a27d9d216cafdd88df08a5eef43b74.tar.bz2
llvm-aa81380353a27d9d216cafdd88df08a5eef43b74.tar.xz
ADT: Add ilist_node::get{Prev,Next}Node, which return the adjacent node or null.
- This provides a convenient alternative to using something llvm::prior or manual iterator access, for example:: if (T *Prev = foo->getPrevNode()) ... instead of:: iterator it(foo); if (it != begin()) { --it; ... } - Chris, please review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103647 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/ilist_node.h')
-rw-r--r--include/llvm/ADT/ilist_node.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/llvm/ADT/ilist_node.h b/include/llvm/ADT/ilist_node.h
index da25f959e6..3de4f156d2 100644
--- a/include/llvm/ADT/ilist_node.h
+++ b/include/llvm/ADT/ilist_node.h
@@ -49,6 +49,56 @@ class ilist_node : private ilist_half_node<NodeTy> {
void setNext(NodeTy *N) { Next = N; }
protected:
ilist_node() : Next(0) {}
+
+public:
+ /// @name Adjacent Node Accessors
+ /// @{
+
+ /// \brief Get the previous node, or 0 for the list head.
+ NodeTy *getPrevNode() {
+ NodeTy *Prev = this->getPrev();
+
+ // Check for sentinel.
+ if (!Prev->getNext())
+ return 0;
+
+ return Prev;
+ }
+
+ /// \brief Get the previous node, or 0 for the list head.
+ const NodeTy *getPrevNode() const {
+ NodeTy *Prev = this->getPrev();
+
+ // Check for sentinel.
+ if (!Prev->getNext())
+ return 0;
+
+ return Prev;
+ }
+
+ /// \brief Get the next node, or 0 for the list tail.
+ NodeTy *getNextNode() {
+ NodeTy *Next = getNext();
+
+ // Check for sentinel.
+ if (!Next->getNext())
+ return 0;
+
+ return Next;
+ }
+
+ /// \brief Get the next node, or 0 for the list tail.
+ const NodeTy *getNextNode() const {
+ NodeTy *Next = getNext();
+
+ // Check for sentinel.
+ if (!Next->getNext())
+ return 0;
+
+ return Next;
+ }
+
+ /// @}
};
} // End llvm namespace