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*)nullptr->*ItemParentClass::
50 getSublistAccess(static_cast<ValueSubClass*>(
nullptr)))));
52 return reinterpret_cast<ItemParentClass*
>(
reinterpret_cast<char*
>(Anchor)-
57 return Par->*(Par->getSublistAccess((ValueSubClass*)
nullptr));
61 return Par ?
toPtr(Par->getValueSymbolTable()) :
nullptr;
70 template<
typename TPtr>
This class provides a symbol table of name/value pairs.
ItemParentClass * getListOwner()
getListOwner - Return the object that owns this list.
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)
setSymTabObject - This is called when (f.e.) the parent of a basic block changes. ...
iplist - The subset of list functionality that can safely be used on nodes of polymorphic types...
static ValueSymbolTable * toPtr(ValueSymbolTable *P)
static ValueSymbolTable * toPtr(ValueSymbolTable &R)
void addNodeToList(ValueSubClass *V)