LLVM  3.7.0
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
llvm::PointerUnion< PT1, PT2 > Class Template Reference

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>

Inheritance diagram for llvm::PointerUnion< PT1, PT2 >:
[legend]

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 constgetAddrOfPtr1 () 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 PointerUnionoperator= (std::nullptr_t)
 Assignment from nullptr which just clears the union. More...
 
const PointerUnionoperator= (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 PointerUnionoperator= (const PT2 &RHS)
 
void * getOpaqueValue () const
 

Static Public Member Functions

static PointerUnion getFromOpaqueValue (void *VP)
 

Detailed Description

template<typename PT1, typename PT2>
class llvm::PointerUnion< PT1, PT2 >

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.

Member Typedef Documentation

template<typename PT1, typename PT2>
typedef PointerIntPair<void*, 1, bool, PointerUnionUIntTraits<PT1,PT2> > llvm::PointerUnion< PT1, PT2 >::ValTy

Definition at line 84 of file PointerUnion.h.

Constructor & Destructor Documentation

template<typename PT1, typename PT2>
llvm::PointerUnion< PT1, PT2 >::PointerUnion ( )
inline

Definition at line 98 of file PointerUnion.h.

template<typename PT1, typename PT2>
llvm::PointerUnion< PT1, PT2 >::PointerUnion ( PT1  V)
inline

Definition at line 100 of file PointerUnion.h.

template<typename PT1, typename PT2>
llvm::PointerUnion< PT1, PT2 >::PointerUnion ( PT2  V)
inline

Definition at line 103 of file PointerUnion.h.

Member Function Documentation

template<typename PT1, typename PT2>
template<typename T >
T llvm::PointerUnion< PT1, PT2 >::dyn_cast ( ) const
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().

template<typename PT1, typename PT2>
template<typename T >
T llvm::PointerUnion< PT1, PT2 >::get ( ) const
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().

template<typename PT1, typename PT2>
PT1 const* llvm::PointerUnion< PT1, PT2 >::getAddrOfPtr1 ( ) const
inline
template<typename PT1, typename PT2>
PT1* llvm::PointerUnion< PT1, PT2 >::getAddrOfPtr1 ( )
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.

template<typename PT1, typename PT2>
static PointerUnion llvm::PointerUnion< PT1, PT2 >::getFromOpaqueValue ( void *  VP)
inlinestatic
template<typename PT1, typename PT2>
void* llvm::PointerUnion< PT1, PT2 >::getOpaqueValue ( ) const
inline
template<typename PT1, typename PT2>
template<typename T >
int llvm::PointerUnion< PT1, PT2 >::is ( ) const
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().

template<typename PT1, typename PT2>
bool llvm::PointerUnion< PT1, PT2 >::isNull ( ) const
inline
template<typename PT1, typename PT2>
llvm::PointerUnion< PT1, PT2 >::operator bool ( ) const
inlineexplicit

Definition at line 114 of file PointerUnion.h.

template<typename PT1, typename PT2>
const PointerUnion& llvm::PointerUnion< PT1, PT2 >::operator= ( std::nullptr_t  )
inline

Assignment from nullptr which just clears the union.

Definition at line 159 of file PointerUnion.h.

template<typename PT1, typename PT2>
const PointerUnion& llvm::PointerUnion< PT1, PT2 >::operator= ( const PT1 &  RHS)
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.

template<typename PT1, typename PT2>
const PointerUnion& llvm::PointerUnion< PT1, PT2 >::operator= ( const PT2 &  RHS)
inline

Definition at line 171 of file PointerUnion.h.


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