LLVM API Documentation
#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 |
LLVM_EXPLICIT | 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 |
template<typename T > | |
T | dyn_cast () const |
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= (const PT1 &RHS) |
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 80 of file PointerUnion.h.
typedef PointerIntPair<void*, 1, bool, PointerUnionUIntTraits<PT1,PT2> > llvm::PointerUnion< PT1, PT2 >::ValTy |
Definition at line 83 of file PointerUnion.h.
|
inline |
Definition at line 97 of file PointerUnion.h.
|
inline |
Definition at line 99 of file PointerUnion.h.
|
inline |
Definition at line 102 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 137 of file PointerUnion.h.
|
inline |
get<T>() - Return the value of the specified pointer type. If the specified pointer type is incorrect, assert.
Definition at line 129 of file PointerUnion.h.
|
inline |
If the union is set to the first pointer type get an address pointing to it.
Definition at line 144 of file PointerUnion.h.
Referenced by llvm::PointerUnion< EltTy, llvm::SmallVector * >::getAddrOfPtr1().
|
inline |
If the union is set to the first pointer type get an address pointing to it.
Definition at line 150 of file PointerUnion.h.
|
inlinestatic |
Definition at line 172 of file PointerUnion.h.
Referenced by llvm::PointerLikeTypeTraits< PointerUnion< PT1, PT2 > >::getFromVoidPointer().
|
inline |
|
inline |
is<T>() return true if the Union currently holds the type matching T.
Definition at line 117 of file PointerUnion.h.
|
inline |
isNull - Return true if the pointer held in the union is null, regardless of which type it is.
Definition at line 108 of file PointerUnion.h.
Referenced by llvm::PointerUnion3< PT1, PT2, PT3 >::isNull(), llvm::PointerUnion4< PT1, PT2, PT3, PT4 >::isNull(), and llvm::PointerUnion< EltTy, llvm::SmallVector * >::operator bool().
|
inline |
Definition at line 113 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 159 of file PointerUnion.h.
|
inline |
Definition at line 164 of file PointerUnion.h.