add JumpToBit, an explicit init method, and a default ctor.
authorChris Lattner <sabre@nondot.org>
Tue, 1 May 2007 04:59:06 +0000 (04:59 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 1 May 2007 04:59:06 +0000 (04:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36613 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitstreamReader.h

index 71cb5bb33d665e47716a2c97c43cdeb67fe2343a..634bc738dfdd71bb5a650965bf09968456750287 100644 (file)
@@ -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; }