diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-03-29 00:18:42 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-03-29 00:18:42 +0000 | 
| commit | dc2999b4dfcfb0b63809a0344a0f212c221f4802 (patch) | |
| tree | fcf0e1991e196e36c4861ce35f2badbd607ce754 | |
| parent | bbcf49e4107aa9fa769bc561a1de9325a565541d (diff) | |
| download | bcm5719-llvm-dc2999b4dfcfb0b63809a0344a0f212c221f4802.tar.gz bcm5719-llvm-dc2999b4dfcfb0b63809a0344a0f212c221f4802.zip  | |
teach SmallPtrSet that PointerIntPair is "basically a pointer".
llvm-svn: 67970
| -rw-r--r-- | llvm/include/llvm/ADT/PointerIntPair.h | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/PointerIntPair.h b/llvm/include/llvm/ADT/PointerIntPair.h index 8b476199d38..92259298efc 100644 --- a/llvm/include/llvm/ADT/PointerIntPair.h +++ b/llvm/include/llvm/ADT/PointerIntPair.h @@ -21,6 +21,8 @@ namespace llvm {  template<typename T>  struct DenseMapInfo; +template<typename> +class PointerLikeTypeInfo;  /// PointerIntPair - This class implements a pair of a pointer and small  /// integer.  It is designed to represent this in the space required by one @@ -62,6 +64,10 @@ public:    void *getOpaqueValue() const { return reinterpret_cast<void*>(Value); }    void setFromOpaqueValue(void *Val) { Value = reinterpret_cast<intptr_t>(Val);} +  static PointerIntPair getFromOpaqueValue(void *V) { +    PointerIntPair P; P.setFromOpaqueValue(V); return P;  +  } +      bool operator==(const PointerIntPair &RHS) const {return Value == RHS.Value;}    bool operator!=(const PointerIntPair &RHS) const {return Value != RHS.Value;}    bool operator<(const PointerIntPair &RHS) const {return Value < RHS.Value;} @@ -89,5 +95,19 @@ struct DenseMapInfo<PointerIntPair<PointerTy, IntBits, IntType> > {    static bool isPod() { return true; }  }; +// Teach SmallPtrSet that PointerIntPair is "basically a pointer". +template<typename PointerTy, unsigned IntBits, typename IntType> +class PointerLikeTypeInfo<PointerIntPair<PointerTy, IntBits, IntType> > { +public: +  static inline void * +  getAsVoidPointer(const PointerIntPair<PointerTy, IntBits, IntType> &P) { +    return P.getOpaqueValue(); +  } +  static inline PointerIntPair<PointerTy, IntBits, IntType> +  getFromVoidPointer(void *P) { +    return PointerIntPair<PointerTy, IntBits, IntType>::getFromOpaqueValue(P); +  } +}; +  } // end namespace llvm  #endif  | 

