diff options
author | Chris Lattner <sabre@nondot.org> | 2007-05-01 04:59:06 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-05-01 04:59:06 +0000 |
commit | 90a5c7dbc150af336b6e153427f21fb8a1d46d78 (patch) | |
tree | 1f27c535ada19baa75201b71c84cf2ecde8a7e47 | |
parent | 9dd446c56162ce51e40f37941f48c86850302c9e (diff) | |
download | llvm-90a5c7dbc150af336b6e153427f21fb8a1d46d78.tar.gz llvm-90a5c7dbc150af336b6e153427f21fb8a1d46d78.tar.bz2 llvm-90a5c7dbc150af336b6e153427f21fb8a1d46d78.tar.xz |
add JumpToBit, an explicit init method, and a default ctor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36613 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Bitcode/BitstreamReader.h | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/include/llvm/Bitcode/BitstreamReader.h b/include/llvm/Bitcode/BitstreamReader.h index 71cb5bb33d..634bc738df 100644 --- a/include/llvm/Bitcode/BitstreamReader.h +++ b/include/llvm/Bitcode/BitstreamReader.h @@ -51,8 +51,20 @@ class BitstreamReader { /// FirstChar - This remembers the first byte of the stream. const unsigned char *FirstChar; public: - BitstreamReader(const unsigned char *Start, const unsigned char *End) - : NextChar(Start), LastChar(End), FirstChar(Start) { + BitstreamReader() { + NextChar = FirstChar = LastChar = 0; + CurWord = 0; + BitsInCurWord = 0; + CurCodeSize = 0; + } + + BitstreamReader(const unsigned char *Start, const unsigned char *End) { + init(Start, End); + } + + void init(const unsigned char *Start, const unsigned char *End) { + NextChar = FirstChar = Start; + LastChar = End; assert(((End-Start) & 3) == 0 &&"Bitcode stream not a multiple of 4 bytes"); CurWord = 0; BitsInCurWord = 0; @@ -79,6 +91,20 @@ public: return (NextChar-FirstChar)*8 + (32-BitsInCurWord); } + /// JumpToBit - Reset the stream to the specified bit number. + void JumpToBit(uint64_t BitNo) { + unsigned WordNo = BitNo/32; + unsigned WordBitNo = BitNo & 31; + assert(WordNo < (unsigned)(LastChar-FirstChar) && "Invalid location"); + + // Move the cursor to the right word. + NextChar = FirstChar+WordNo; + BitsInCurWord = 0; + + // Skip over any bits that are already consumed. + if (WordBitNo) Read(WordBitNo); + } + /// GetAbbrevIDWidth - Return the number of bits used to encode an abbrev #. unsigned GetAbbrevIDWidth() const { return CurCodeSize; } |