void metadb_handle_list_helper::remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list) { t_size count = p_list.get_count(); if (count>0) { bit_array_bittable mask(count); pfc::array_t<t_size> order; order.set_size(count); order_helper::g_fill(order); p_list.sort_get_permutation_t(pfc::compare_t<metadb_handle_ptr,metadb_handle_ptr>,order.get_ptr()); t_size n; bool found = false; for(n=0;n<count-1;n++) { if (p_list.get_item(order[n])==p_list.get_item(order[n+1])) { found = true; mask.set(order[n+1],true); } } if (found) p_list.remove_mask(mask); } }
void metadb_handle_list_helper::sort_by_pointer_remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list) { t_size count = p_list.get_count(); if (count>0) { sort_by_pointer(p_list); bool b_found = false; t_size n; for(n=0;n<count-1;n++) { if (p_list.get_item(n)==p_list.get_item(n+1)) { b_found = true; break; } } if (b_found) { bit_array_bittable mask(count); t_size n; for(n=0;n<count-1;n++) { if (p_list.get_item(n)==p_list.get_item(n+1)) mask.set(n+1,true); } p_list.remove_mask(mask); } } }
t_size file_move_helper::g_filter_dead_files_sorted_make_mask(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead,bit_array_var & p_mask) { t_size n, m = p_data.get_count(); t_size found = 0; for(n=0;n<m;n++) { t_size dummy; bool dead = p_dead.bsearch_t(metadb::path_compare,p_data.get_item(n)->get_path(),dummy); if (dead) found++; p_mask.set(n,dead); } return found; }