|
LLVM
3.7.0
|
PointerUnion - This implements a discriminated union of two pointer types, and keeps the discriminator bit-mangled into the low bits of the pointer. More...
#include <PointerUnion.h>
Public Types | |
| typedef PointerIntPair< void *, 1, bool, PointerUnionUIntTraits< PT1, PT2 > > | ValTy |
Public Member Functions | |
| PointerUnion () | |
| PointerUnion (PT1 V) | |
| PointerUnion (PT2 V) | |
| bool | isNull () const |
| isNull - Return true if the pointer held in the union is null, regardless of which type it is. More... | |
| operator bool () const | |
| template<typename T > | |
| int | is () const |
| is<T>() return true if the Union currently holds the type matching T. More... | |
| template<typename T > | |
| T | get () const |
| get<T>() - Return the value of the specified pointer type. More... | |
| template<typename T > | |
| T | dyn_cast () const |
| dyn_cast<T>() - If the current value is of the specified pointer type, return it, otherwise return null. More... | |
| PT1 const * | getAddrOfPtr1 () const |
| If the union is set to the first pointer type get an address pointing to it. More... | |
| PT1 * | getAddrOfPtr1 () |
| If the union is set to the first pointer type get an address pointing to it. More... | |
| const PointerUnion & | operator= (std::nullptr_t) |
| Assignment from nullptr which just clears the union. More... | |
| const PointerUnion & | operator= (const PT1 &RHS) |
| Assignment operators - Allow assigning into this union from either pointer type, setting the discriminator to remember what it came from. More... | |
| const PointerUnion & | operator= (const PT2 &RHS) |
| void * | getOpaqueValue () const |
Static Public Member Functions | |
| static PointerUnion | getFromOpaqueValue (void *VP) |
PointerUnion - This implements a discriminated union of two pointer types, and keeps the discriminator bit-mangled into the low bits of the pointer.
This allows the implementation to be extremely efficient in space, but permits a very natural and type-safe API.
Common use patterns would be something like this: PointerUnion<int*, float*> P; P = (int*)0; printf("%d %d", P.is<int*>(), P.is<float*>()); // prints "1 0" X = P.get<int*>(); // ok. Y = P.get<float*>(); // runtime assertion failure. Z = P.get<double*>(); // compile time failure. P = (float*)0; Y = P.get<float*>(); // ok. X = P.get<int*>(); // runtime assertion failure.
Definition at line 81 of file PointerUnion.h.
| typedef PointerIntPair<void*, 1, bool, PointerUnionUIntTraits<PT1,PT2> > llvm::PointerUnion< PT1, PT2 >::ValTy |
Definition at line 84 of file PointerUnion.h.
|
inline |
Definition at line 98 of file PointerUnion.h.
|
inline |
Definition at line 100 of file PointerUnion.h.
|
inline |
Definition at line 103 of file PointerUnion.h.
|
inline |
dyn_cast<T>() - If the current value is of the specified pointer type, return it, otherwise return null.
Definition at line 138 of file PointerUnion.h.
Referenced by llvm::MachineMemOperand::getPseudoValue(), and llvm::MachineMemOperand::getValue().
|
inline |
get<T>() - Return the value of the specified pointer type.
If the specified pointer type is incorrect, assert.
Definition at line 130 of file PointerUnion.h.
Referenced by llvm::MachinePointerInfo::getWithOffset(), and llvm::ReplaceableMetadataImpl::replaceAllUsesWith().
|
inline |
If the union is set to the first pointer type get an address pointing to it.
Definition at line 145 of file PointerUnion.h.
Referenced by llvm::TinyPtrVector< llvm::BasicBlock * >::begin(), llvm::PointerUnion< llvm::BasicBlock *, VecTy * >::getAddrOfPtr1(), llvm::TinyPtrVector< llvm::MCSymbol * >::operator ArrayRef< llvm::MCSymbol * >(), and llvm::TinyPtrVector< llvm::MCSymbol * >::operator MutableArrayRef< llvm::MCSymbol * >().
|
inline |
If the union is set to the first pointer type get an address pointing to it.
Definition at line 151 of file PointerUnion.h.
|
inlinestatic |
Definition at line 179 of file PointerUnion.h.
Referenced by llvm::PointerLikeTypeTraits< PointerUnion< PT1, PT2 > >::getFromVoidPointer().
|
inline |
Definition at line 178 of file PointerUnion.h.
Referenced by llvm::PointerLikeTypeTraits< PointerUnion< PT1, PT2 > >::getAsVoidPointer(), llvm::DenseMapInfo< PointerUnion< T, U > >::getHashValue(), llvm::MachineMemOperand::getOpaqueValue(), llvm::PointerUnion3< PT1, PT2, PT3 >::getOpaqueValue(), llvm::PointerUnion4< PT1, PT2, PT3, PT4 >::getOpaqueValue(), llvm::operator!=(), llvm::operator<(), and llvm::operator==().
|
inline |
is<T>() return true if the Union currently holds the type matching T.
Definition at line 118 of file PointerUnion.h.
Referenced by llvm::MachinePointerInfo::getWithOffset(), and llvm::ReplaceableMetadataImpl::replaceAllUsesWith().
|
inline |
isNull - Return true if the pointer held in the union is null, regardless of which type it is.
Definition at line 109 of file PointerUnion.h.
Referenced by llvm::TinyPtrVector< llvm::BasicBlock * >::empty(), llvm::TinyPtrVector< llvm::BasicBlock * >::end(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTruncStore(), llvm::MachinePointerInfo::getWithOffset(), llvm::TinyPtrVector< llvm::BasicBlock * >::insert(), llvm::PointerUnion3< PT1, PT2, PT3 >::isNull(), llvm::PointerUnion4< PT1, PT2, PT3, PT4 >::isNull(), llvm::TinyPtrVector< llvm::MCSymbol * >::operator ArrayRef< llvm::MCSymbol * >(), llvm::PointerUnion< llvm::BasicBlock *, VecTy * >::operator bool(), llvm::TinyPtrVector< llvm::MCSymbol * >::operator MutableArrayRef< llvm::MCSymbol * >(), llvm::TinyPtrVector< llvm::BasicBlock * >::operator[](), and llvm::TinyPtrVector< llvm::BasicBlock * >::push_back().
|
inlineexplicit |
Definition at line 114 of file PointerUnion.h.
|
inline |
Assignment from nullptr which just clears the union.
Definition at line 159 of file PointerUnion.h.
|
inline |
Assignment operators - Allow assigning into this union from either pointer type, setting the discriminator to remember what it came from.
Definition at line 166 of file PointerUnion.h.
|
inline |
Definition at line 171 of file PointerUnion.h.
1.8.6