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 private: 00008 struct t_entry { 00009 metadb_handle_ptr m_handle; 00010 pfc::rcptr_t<file_info_const_impl> m_info; 00011 t_filestats m_stats; 00012 bool m_fresh; 00013 }; 00014 class metadb_io_hintlist_wrapper_part1 : public pfc::list_base_const_t<metadb_handle_ptr> { 00015 public: 00016 metadb_io_hintlist_wrapper_part1(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00017 t_size get_count() const {return m_list.get_count();} 00018 void get_item_ex(metadb_handle_ptr & p_out, t_size n) const {p_out = m_list[n].m_handle;} 00019 00020 private: 00021 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00022 }; 00023 class metadb_io_hintlist_wrapper_part2 : public pfc::list_base_const_t<const file_info*> { 00024 public: 00025 metadb_io_hintlist_wrapper_part2(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00026 t_size get_count() const {return m_list.get_count();} 00027 void get_item_ex(const file_info* & p_out, t_size n) const {p_out = &*m_list[n].m_info;} 00028 private: 00029 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00030 }; 00031 class metadb_io_hintlist_wrapper_part3 : public pfc::list_base_const_t<t_filestats> { 00032 public: 00033 metadb_io_hintlist_wrapper_part3(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00034 t_size get_count() const {return m_list.get_count();} 00035 void get_item_ex(t_filestats & p_out, t_size n) const {p_out = m_list[n].m_stats;} 00036 private: 00037 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00038 }; 00039 class metadb_io_hintlist_wrapper_part4 : public bit_array { 00040 public: 00041 metadb_io_hintlist_wrapper_part4(const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & p_list) : m_list(p_list) {} 00042 bool get(t_size n) const {return m_list[n].m_fresh;} 00043 private: 00044 const pfc::list_base_const_t<metadb_io_hintlist::t_entry> & m_list; 00045 }; 00046 00047 pfc::list_t<t_entry,pfc::alloc_fast> m_entries; 00048 }; 00049
1.5.5