Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- llvm/ADT/ilist_node_base.h - Intrusive List Node Base -----*- C++ -*-==//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_ADT_ILIST_NODE_BASE_H
  10. #define LLVM_ADT_ILIST_NODE_BASE_H
  11.  
  12. #include "llvm/ADT/PointerIntPair.h"
  13.  
  14. namespace llvm {
  15.  
  16. /// Base class for ilist nodes.
  17. ///
  18. /// Optionally tracks whether this node is the sentinel.
  19. template <bool EnableSentinelTracking> class ilist_node_base;
  20.  
  21. template <> class ilist_node_base<false> {
  22.   ilist_node_base *Prev = nullptr;
  23.   ilist_node_base *Next = nullptr;
  24.  
  25. public:
  26.   void setPrev(ilist_node_base *Prev) { this->Prev = Prev; }
  27.   void setNext(ilist_node_base *Next) { this->Next = Next; }
  28.   ilist_node_base *getPrev() const { return Prev; }
  29.   ilist_node_base *getNext() const { return Next; }
  30.  
  31.   bool isKnownSentinel() const { return false; }
  32.   void initializeSentinel() {}
  33. };
  34.  
  35. template <> class ilist_node_base<true> {
  36.   PointerIntPair<ilist_node_base *, 1> PrevAndSentinel;
  37.   ilist_node_base *Next = nullptr;
  38.  
  39. public:
  40.   void setPrev(ilist_node_base *Prev) { PrevAndSentinel.setPointer(Prev); }
  41.   void setNext(ilist_node_base *Next) { this->Next = Next; }
  42.   ilist_node_base *getPrev() const { return PrevAndSentinel.getPointer(); }
  43.   ilist_node_base *getNext() const { return Next; }
  44.  
  45.   bool isSentinel() const { return PrevAndSentinel.getInt(); }
  46.   bool isKnownSentinel() const { return isSentinel(); }
  47.   void initializeSentinel() { PrevAndSentinel.setInt(true); }
  48. };
  49.  
  50. } // end namespace llvm
  51.  
  52. #endif // LLVM_ADT_ILIST_NODE_BASE_H
  53.