/ source / libsmackerdec / include / BitReader.h
BitReader.h
 1  /*
 2   * libsmackerdec - Smacker video decoder
 3   * Copyright (C) 2011 Barry Duncan
 4   *
 5   * This library is free software; you can redistribute it and/or
 6   * modify it under the terms of the GNU Lesser General Public
 7   * License as published by the Free Software Foundation; either
 8   * version 2.1 of the License, or (at your option) any later version.
 9   *
10   * This library is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   * Lesser General Public License for more details.
14   *
15   * You should have received a copy of the GNU Lesser General Public
16   * License along with this library; if not, write to the Free Software
17   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18   */
19  
20  #ifndef _SmackerBitReader_h_
21  #define _SmackerBitReader_h_
22  
23  #include <stdint.h>
24  #include "FileStream.h"
25  
26  namespace SmackerCommon {
27  
28  class BitReader
29  {
30  	public:
31  		BitReader(SmackerCommon::FileStream &file, uint32_t size);
32  		~BitReader();
33  		uint32_t GetBit();
34  		uint32_t GetBits(uint32_t n);
35  		void SkipBits(uint32_t n);
36  
37  		uint32_t GetSize();
38  		uint32_t GetPosition();
39  
40  	private:
41  		uint32_t totalSize;
42  		uint32_t currentOffset;
43  		uint32_t bytesRead;
44  
45  		SmackerCommon::FileStream *file;
46  
47  		uint8_t *cache;
48  
49  		void FillCache();
50  };
51  
52  } // close namespace SmackerCommon
53  
54  #endif