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