ilist_node.h revision 0a0e68a7eac0513505aff3079e2d5d6864e51895
1fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman//==-- llvm/ADT/ilist_node.h - Intrusive Linked List Helper ------*- C++ -*-==// 23a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman// 3fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// The LLVM Compiler Infrastructure 4fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// 5fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// This file is distributed under the University of Illinois Open Source 6fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// License. See LICENSE.TXT for details. 73a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman// 8fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman//===----------------------------------------------------------------------===// 9fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// 10fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// This file defines the ilist_node class template, which is a convenient 11fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// base class for creating classes that can be used with ilists. 12fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman// 13fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman//===----------------------------------------------------------------------===// 14fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 15fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman#ifndef LLVM_ADT_ILIST_NODE_H 16fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman#define LLVM_ADT_ILIST_NODE_H 17fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 18fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmannamespace llvm { 19fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 20fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmantemplate<typename NodeTy> 21fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanstruct ilist_nextprev_traits; 22fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 230a0e68a7eac0513505aff3079e2d5d6864e51895Gabor Greiftemplate<typename NodeTy> 240a0e68a7eac0513505aff3079e2d5d6864e51895Gabor Greifstruct ilist_traits; 250a0e68a7eac0513505aff3079e2d5d6864e51895Gabor Greif 26fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman/// ilist_node - Base class that provides next/prev services for nodes 27fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman/// that use ilist_nextprev_traits or ilist_default_traits. 28fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman/// 29fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmantemplate<typename NodeTy> 30fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanclass ilist_node { 31fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanprivate: 32fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman friend struct ilist_nextprev_traits<NodeTy>; 33fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman NodeTy *Prev, *Next; 34fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman NodeTy *getPrev() { return Prev; } 35fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman NodeTy *getNext() { return Next; } 36fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman const NodeTy *getPrev() const { return Prev; } 37fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman const NodeTy *getNext() const { return Next; } 38fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman void setPrev(NodeTy *N) { Prev = N; } 39fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman void setNext(NodeTy *N) { Next = N; } 40fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohmanprotected: 41fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman ilist_node() : Prev(0), Next(0) {} 420a0e68a7eac0513505aff3079e2d5d6864e51895Gabor Greif friend struct ilist_traits<NodeTy>; 43fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman}; 44fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 45fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman} // End llvm namespace 46fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman 47fed90b6d097d50881afb45e4d79f430db66dd741Dan Gohman#endif 48