25 #ifndef LLVM_IR_SYMBOLTABLELISTTRAITS_H
26 #define LLVM_IR_SYMBOLTABLELISTTRAITS_H
31 class ValueSymbolTable;
33 template<
typename NodeTy>
class ilist_iterator;
34 template<
typename NodeTy,
typename Traits>
class iplist;
35 template<
typename Ty>
struct ilist_traits;
40 template<
typename ValueSubClass,
typename ItemParentClass>
41 class SymbolTableListTraits :
public ilist_default_traits<ValueSubClass> {
42 typedef ilist_traits<ValueSubClass> TraitsClass;
49 size_t Offset(
size_t(&((ItemParentClass*)0->*ItemParentClass::
50 getSublistAccess(static_cast<ValueSubClass*>(0)))));
52 return reinterpret_cast<ItemParentClass*
>(
reinterpret_cast<char*
>(Anchor)-
57 return Par->*(Par->getSublistAccess((ValueSubClass*)0));
61 return Par ?
toPtr(Par->getValueSymbolTable()) : 0;
70 template<
typename TPtr>
ItemParentClass * getListOwner()
static iplist< ValueSubClass > & getList(ItemParentClass *Par)
static ValueSymbolTable * getSymTab(ItemParentClass *Par)
void transferNodesFromList(ilist_traits< ValueSubClass > &L2, ilist_iterator< ValueSubClass > first, ilist_iterator< ValueSubClass > last)
void removeNodeFromList(ValueSubClass *V)
void setSymTabObject(TPtr *, TPtr)
static ValueSymbolTable * toPtr(ValueSymbolTable *P)
static ValueSymbolTable * toPtr(ValueSymbolTable &R)
void addNodeToList(ValueSubClass *V)