================ @@ -2407,6 +2407,53 @@ class ASTReader bool isProcessingUpdateRecords() { return ProcessingUpdateRecords; } }; +/// A simple helper class to unpack an integer to bits and consuming +/// the bits in order. +class BitsUnpacker { + constexpr static uint32_t BitsIndexUpbound = 32; + +public: + BitsUnpacker(uint32_t V) { updateValue(V); } + BitsUnpacker(const BitsUnpacker &) = delete; + BitsUnpacker(BitsUnpacker &&) = delete; + BitsUnpacker operator=(const BitsUnpacker &) = delete; + BitsUnpacker operator=(BitsUnpacker &&) = delete; + ~BitsUnpacker() { +#ifndef NDEBUG + while (isValid()) + assert(!getNextBit() && "There are bits failed to read!"); +#endif + } + + void updateValue(uint32_t V) { + Value = V; + CurrentBitsIndex = 0; + } + + bool getNextBit() { + assert(isValid()); + return Value & (1 << CurrentBitsIndex++); + } + + uint32_t getNextBits(uint32_t Width) { + assert(isValid()); + assert(Width < BitsIndexUpbound); + uint32_t Ret = (Value >> CurrentBitsIndex) & ((1 << Width) - 1); + CurrentBitsIndex += Width; + return Ret; + } + + bool isValidToGetNextNBits(uint32_t Width) const { ---------------- ChuanqiXu9 wrote:
Done https://github.com/llvm/llvm-project/pull/69287 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits