X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FPackedVector.h;h=1ae2a77e7eaf2614355253213fd4db89a2d90ef6;hb=75eac5f0ebff4d0ffe10ce6bc8f2867c5f15315b;hp=272322a2f4ba74b984df963c30255e87aca0ab0d;hpb=74ee8ace0c6fd6715d16fd4f1a0e36a8a158868e;p=oota-llvm.git diff --git a/include/llvm/ADT/PackedVector.h b/include/llvm/ADT/PackedVector.h index 272322a2f4b..1ae2a77e7ea 100644 --- a/include/llvm/ADT/PackedVector.h +++ b/include/llvm/ADT/PackedVector.h @@ -19,32 +19,32 @@ namespace llvm { -template +template class PackedVectorBase; // This won't be necessary if we can specialize members without specializing // the parent template. -template -class PackedVectorBase { +template +class PackedVectorBase { protected: - static T getValue(const llvm::BitVector &Bits, unsigned Idx) { + static T getValue(const BitVectorTy &Bits, unsigned Idx) { T val = T(); for (unsigned i = 0; i != BitNum; ++i) val = T(val | ((Bits[(Idx << (BitNum-1)) + i] ? 1UL : 0UL) << i)); return val; } - static void setValue(llvm::BitVector &Bits, unsigned Idx, T val) { + static void setValue(BitVectorTy &Bits, unsigned Idx, T val) { assert((val >> BitNum) == 0 && "value is too big"); for (unsigned i = 0; i != BitNum; ++i) Bits[(Idx << (BitNum-1)) + i] = val & (T(1) << i); } }; -template -class PackedVectorBase { +template +class PackedVectorBase { protected: - static T getValue(const llvm::BitVector &Bits, unsigned Idx) { + static T getValue(const BitVectorTy &Bits, unsigned Idx) { T val = T(); for (unsigned i = 0; i != BitNum-1; ++i) val = T(val | ((Bits[(Idx << (BitNum-1)) + i] ? 1UL : 0UL) << i)); @@ -53,7 +53,7 @@ protected: return val; } - static void setValue(llvm::BitVector &Bits, unsigned Idx, T val) { + static void setValue(BitVectorTy &Bits, unsigned Idx, T val) { if (val < 0) { val = ~val; Bits.set((Idx << (BitNum-1)) + BitNum-1); @@ -71,11 +71,12 @@ protected: /// @endcode /// will create a vector accepting values -2, -1, 0, 1. Any other value will hit /// an assertion. -template -class PackedVector : public PackedVectorBase +class PackedVector : public PackedVectorBase::is_signed> { - llvm::BitVector Bits; - typedef PackedVectorBase::is_signed> base; + BitVectorTy Bits; + typedef PackedVectorBase::is_signed> base; public: class reference { @@ -90,7 +91,7 @@ public: Vec.setValue(Vec.Bits, Idx, val); return *this; } - operator T() { + operator T() const { return Vec.getValue(Vec.Bits, Idx); } };