void metadb_handle_list_helper::sort_by_format(metadb_handle_list_ref p_list,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook, int direction) { const t_size count = p_list.get_count(); pfc::array_t<t_size> order; order.set_size(count); sort_by_format_get_order(p_list,order.get_ptr(),p_script,p_hook,direction); p_list.reorder(order.get_ptr()); }
void metadb_handle_list::sort_by_format(const char * spec,const char * extra_items) { unsigned count = get_count(); mem_block_t<int> order(count); sort_by_format_get_order(order,spec,extra_items); apply_order(order,count); }
void metadb_handle_list::remove_duplicates(bool b_release) { unsigned count = get_count(); if (count>0) { bit_array_bittable mask(count); mem_block_t<int> order(count); sort_by_format_get_order(order,"%_path_raw%|$num(%_subsong%,9)",0); unsigned n; for(n=0;n<count-1;n++) { if (get_item(order[n])==get_item(order[n+1])) { mask.set(order[n+1],true); } } if (b_release) delete_mask(mask); else remove_mask(mask); } }
void metadb_handle_list_helper::sort_by_format_get_order(metadb_handle_list_cref p_list,t_size* order,const char * spec,titleformat_hook * p_hook) { service_ptr_t<titleformat_object> script; if (static_api_ptr_t<titleformat_compiler>()->compile(script,spec)) sort_by_format_get_order(p_list,order,script,p_hook); }