ilist_node.h revision 59bf4fcc0680e75b408579064d1205a132361196
1//==-- llvm/ADT/ilist_node.h - Intrusive Linked List Helper ------*- C++ -*-==// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines the ilist_node class template, which is a convenient 11// base class for creating classes that can be used with ilists. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_ADT_ILIST_NODE_H 16#define LLVM_ADT_ILIST_NODE_H 17 18namespace llvm { 19 20template<typename NodeTy> 21struct ilist_traits; 22 23/// ilist_half_node - Base class that provides prev services for sentinels. 24/// 25template<typename NodeTy> 26class ilist_half_node { 27 friend struct ilist_traits<NodeTy>; 28 NodeTy *Prev; 29protected: 30 NodeTy *getPrev() { return Prev; } 31 const NodeTy *getPrev() const { return Prev; } 32 void setPrev(NodeTy *P) { Prev = P; } 33 ilist_half_node() : Prev(0) {} 34}; 35 36template<typename NodeTy> 37struct ilist_nextprev_traits; 38 39/// ilist_node - Base class that provides next/prev services for nodes 40/// that use ilist_nextprev_traits or ilist_default_traits. 41/// 42template<typename NodeTy> 43class ilist_node : private ilist_half_node<NodeTy> { 44 friend struct ilist_nextprev_traits<NodeTy>; 45 friend struct ilist_traits<NodeTy>; 46 NodeTy *Next; 47 NodeTy *getNext() { return Next; } 48 const NodeTy *getNext() const { return Next; } 49 void setNext(NodeTy *N) { Next = N; } 50protected: 51 ilist_node() : Next(0) {} 52}; 53 54} // End llvm namespace 55 56#endif 57