1 /* (C) 2006-2010 by folkert@vanheusden.com GPLv2 applies */ 2 3 #include <sys/types.h> 4 5 /* code taken from linux kernel */ 6 #if __GNUC__ == 2 && __GNUC_MINOR__ < 96 7 #define __builtin_expect(x, expected_value) (x) 8 #endif 9 #ifndef __builtin_expect 10 #define __builtin_expect(x, expected_value) (x) 11 #endif 12 #define likely(x) __builtin_expect((x),1) 13 #define unlikely(x) __builtin_expect((x),0) 14 15 class buffered_reader 16 { 17 private: 18 int fd, block_size; 19 char *buffer; 20 long long int buffer_length, buffer_pointer; 21 char *mmap_addr, *cur_offset; 22 off_t size_of_file; 23 24 int number_of_bytes_in_buffer(void); 25 int read_into_buffer(void); 26 27 public: 28 buffered_reader(int fd, int block_size=4096); 29 ~buffered_reader(); 30 31 int garbage_collect(char shrink_buffer=0); 32 33 char * read_line(void); 34 35 off_t file_offset(void); 36 }; 37