00001 00002 class metadb_io_hintlist { 00003 public: 00004 void hint_reader(service_ptr_t<input_info_reader> p_reader, const char * p_path,abort_callback & p_abort); 00005 void add(metadb_handle_ptr const & p_handle,const file_info & p_info,t_filestats const & p_stats,bool p_fresh); 00006 void run(); 00007 t_size get_pending_count() const {return m_entries.get_count();} 00008 private: 00009 struct t_entry { 00010 metadb_handle_ptr m_handle; 00011 pfc::rcptr_t<file_info_const_impl> m_info; 00012 t_filestats m_stats; 00013 bool m_fresh; 00014 }; 00015 class metadb_io_hintlist_wrapper_part1 : public pfc::list_base_const_t<metadb_handle_ptr> { 00016 public: 00017 metadb_io_hintlist_wrapper_part1(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00018 t_size get_count() const {return m_list.get_count();} 00019 void get_item_ex(metadb_handle_ptr & p_out, t_size n) const {p_out = m_list[n].m_handle;} 00020 00021 private: 00022 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00023 }; 00024 class metadb_io_hintlist_wrapper_part2 : public pfc::list_base_const_t<const file_info*> { 00025 public: 00026 metadb_io_hintlist_wrapper_part2(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00027 t_size get_count() const {return m_list.get_count();} 00028 void get_item_ex(const file_info* & p_out, t_size n) const {p_out = &*m_list[n].m_info;} 00029 private: 00030 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00031 }; 00032 class metadb_io_hintlist_wrapper_part3 : public pfc::list_base_const_t<t_filestats> { 00033 public: 00034 metadb_io_hintlist_wrapper_part3(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00035 t_size get_count() const {return m_list.get_count();} 00036 void get_item_ex(t_filestats & p_out, t_size n) const {p_out = m_list[n].m_stats;} 00037 private: 00038 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00039 }; 00040 class metadb_io_hintlist_wrapper_part4 : public bit_array { 00041 public: 00042 metadb_io_hintlist_wrapper_part4(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00043 bool get(t_size n) const {return m_list[n].m_fresh;} 00044 private: 00045 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00046 }; 00047 00048 pfc::list_t<t_entry,pfc::alloc_fast> m_entries; 00049 }; 00050
1.5.5