X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2Filist_node.h;h=f0080035cb885157e0a80b9e0300227e21ad3300;hb=e82fafe9e22c7f0bb35ec4cb7d5428bf9e930807;hp=ae4a5905f83cd6f26d5e6fe9e5cfa56d5fe4d419;hpb=2600ca8b3f3602d0904289eeed3d26f3d7aad2ae;p=oota-llvm.git diff --git a/include/llvm/ADT/ilist_node.h b/include/llvm/ADT/ilist_node.h index ae4a5905f83..f0080035cb8 100644 --- a/include/llvm/ADT/ilist_node.h +++ b/include/llvm/ADT/ilist_node.h @@ -15,15 +15,6 @@ #ifndef LLVM_ADT_ILIST_NODE_H #define LLVM_ADT_ILIST_NODE_H -#undef LLVM_COMPACTIFY_SENTINELS -/// @brief activate small sentinel structs -/// Comment out if you want better debuggability -/// of ilist<> end() iterators. -/// See also llvm/ADT/ilist.h, where the -/// same change must be made. -/// -#define LLVM_COMPACTIFY_SENTINELS 1 - namespace llvm { template @@ -49,7 +40,7 @@ struct ilist_nextprev_traits; /// that use ilist_nextprev_traits or ilist_default_traits. /// template -class ilist_node : ilist_half_node { +class ilist_node : private ilist_half_node { friend struct ilist_nextprev_traits; friend struct ilist_traits; NodeTy *Next; @@ -58,19 +49,57 @@ class ilist_node : ilist_half_node { void setNext(NodeTy *N) { Next = N; } protected: ilist_node() : Next(0) {} -}; -/// When assertions are off, the Next field of sentinels -/// will not be accessed. So it is not necessary to allocate -/// space for it. The following macro selects the most -/// efficient traits class. The LLVM_COMPACTIFY_SENTINELS -/// preprocessor symbol controls this. -/// -#if defined(LLVM_COMPACTIFY_SENTINELS) && LLVM_COMPACTIFY_SENTINELS -# define ILIST_NODE ilist_half_node -#else -# define ILIST_NODE ilist_node -#endif +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 { + 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 { + const NodeTy *Next = getNext(); + + // Check for sentinel. + if (!Next->getNext()) + return 0; + + return Next; + } + + /// @} +}; } // End llvm namespace