/* YUNTAI KYONG
Advanced Internet Service
term project
*/
#ifndef _FILE_STREAM_H_
#define _FILE_STREAM_H_
#include <stdio.h>


#define BUFFER_SIZE	65536

class fileStream
{
private:
	FILE *inputFile;
public:
	fileStream(FILE *inputFile);
	unsigned int get_bits(int bit_left);
	
	int cur_bit;
	
	bool BYTEALIGNED()
	{
		return (cur_bit == 7);
	}
	void mark();
	int load(void *outBuf);

	// buffer management variables
	int get_next_data(void);	
	unsigned int get_byte(void);
	unsigned int next_bits(int bit_count, unsigned int string);
	unsigned int get_bit(void);
	int load(unsigned char *outBuf );
	int getSizeFromMark();
	void rewind();
	unsigned char buffer[BUFFER_SIZE];
	int buffer_toggle;

	unsigned char *cur_byte;
	int bytesToRead;
	int m_cur_pos;
	__int64 m_mark_pos;
	__int64 m_cur_file_pos;
	unsigned char *m_mark;
	int m_b_Mark;
	int m_skip_size;
	unsigned char *cur_buf;
	unsigned char *old_buf;
};

#endif /* _FILE_STREAM_H_ */