LLVM: llvm::PointerUnion< PTs > Class Template Reference (original) (raw)

A discriminated union of two or more pointer types, with the discriminator in the low bit of the pointer. More...

#include "[llvm/ADT/PointerUnion.h](PointerUnion%5F8h%5Fsource.html)"

Public Member Functions
PointerUnion ()=default
PointerUnion (std::nullptr_t)
bool isNull () const
Test if the pointer held in the union is null, regardless of which type it is.
operator bool () const
template<typename T>
bool is () const
Test if the Union currently holds the type matching T.
template<typename T>
T get () const
Returns the value of the specified pointer type.
template<typename T>
T dyn_cast () const
Returns the current pointer if it is of the specified pointer type, otherwise returns null.
First const * getAddrOfPtr1 () const
If the union is set to the first pointer type get an address pointing to it.
First * getAddrOfPtr1 ()
If the union is set to the first pointer type get an address pointing to it.
const PointerUnion & operator= (std::nullptr_t)
Assignment from nullptr which just clears the union.
void * getOpaqueValue () const
Friends
template<typename To, typename From, typename Enable>
struct CastInfo

template<typename... PTs>
class llvm::PointerUnion< PTs >

A discriminated union of two or more pointer types, with the discriminator in the low bit of the pointer.

This implementation is extremely efficient in space due to leveraging the low bits of the pointer, while exposing a 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. PointerUnion<int*, int*> Q; // compile time failure.

Definition at line 104 of file PointerUnion.h.

template<typename... PTs>

PointerUnion() [2/2]

template<typename... PTs>

dyn_cast()

template<typename... PTs>

template<typename T>

Returns the current pointer if it is of the specified pointer type, otherwise returns null.

Definition at line 162 of file PointerUnion.h.

get()

template<typename... PTs>

template<typename T>

Returns the value of the specified pointer type.

If the specified pointer type is incorrect, assert.

Definition at line 155 of file PointerUnion.h.

getAddrOfPtr1() [1/2]

template<typename... PTs>

If the union is set to the first pointer type get an address pointing to it.

Definition at line 174 of file PointerUnion.h.

getAddrOfPtr1() [2/2]

template<typename... PTs>

getFromOpaqueValue()

template<typename... PTs>

getOpaqueValue()

template<typename... PTs>

is()

template<typename... PTs>

template<typename T>

Test if the Union currently holds the type matching T.

Definition at line 146 of file PointerUnion.h.

isNull()

template<typename... PTs>

operator bool()

template<typename... PTs>

operator=()

template<typename... PTs>

Assignment from nullptr which just clears the union.

Definition at line 185 of file PointerUnion.h.

CastInfo

template<typename... PTs>

template<typename To, typename From, typename Enable>


The documentation for this class was generated from the following file: