diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-12 21:35:19 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-12 21:35:19 +0000 |
commit | aa81380353a27d9d216cafdd88df08a5eef43b74 (patch) | |
tree | f7ef143fdf660030e760607e80245e36d8a93c0e /include/llvm/ADT/ilist_node.h | |
parent | a4d73d01c4850dce6a951228b13dcd8e733704b4 (diff) | |
download | llvm-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.h | 50 |
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 |