00001 class seekabilizer_backbuffer
00002 {
00003 public:
00004 void initialize(t_size p_size);
00005 void write(const void * p_buffer,t_size p_bytes);
00006 void read(t_size p_backlogdepth,void * p_buffer,t_size p_bytes) const;
00007 t_size get_depth() const;
00008 void reset();
00009 t_size get_max_depth() const;
00010 private:
00011 pfc::array_t<t_uint8> m_buffer;
00012 t_size m_depth,m_cursor;
00013 };
00014
00015 class seekabilizer : public file_readonly {
00016 public:
00017 void initialize(service_ptr_t<file> p_base,t_size p_buffer_size,abort_callback & p_abort);
00018
00019 static void g_seekabilize(service_ptr_t<file> & p_reader,t_size p_buffer_size,abort_callback & p_abort);
00020
00021 t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort);
00022 t_filesize get_size(abort_callback & p_abort);
00023 t_filesize get_position(abort_callback & p_abort);
00024 void seek(t_filesize p_position,abort_callback & p_abort);
00025 bool can_seek();
00026 bool get_content_type(pfc::string_base & p_out);
00027 bool is_in_memory();
00028 void on_idle(abort_callback & p_abort);
00029 t_filetimestamp get_timestamp(abort_callback & p_abort);
00030 void reopen(abort_callback & p_abort);
00031 bool is_remote();
00032 private:
00033 service_ptr_t<file> m_file;
00034 seekabilizer_backbuffer m_buffer;
00035 t_filesize m_size,m_position,m_position_base;
00036 };