summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-05-01 04:59:06 +0000
committerChris Lattner <sabre@nondot.org>2007-05-01 04:59:06 +0000
commit90a5c7dbc150af336b6e153427f21fb8a1d46d78 (patch)
tree1f27c535ada19baa75201b71c84cf2ecde8a7e47
parent9dd446c56162ce51e40f37941f48c86850302c9e (diff)
downloadllvm-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.h30
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; }