void metadb_handle_list_helper::sort_by_format_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) { assert(base+count<=p_list.get_count()); t_size n; pfc::array_t<custom_sort_data> data; data.set_size(count); pfc::string8_fastalloc temp; pfc::string8_fastalloc temp2; temp.prealloc(512); for(n=0;n<count;n++) { metadb_handle_ptr item; p_list.get_item_ex(item,base+n); assert(item.is_valid()); item->format_title(p_hook,temp,p_script,0); data[n].index = n; data[n].text = uSortStringCreate(temp); //data[n].subsong = item->get_subsong_index(); } pfc::sort_t(data,custom_sort_compare,count); //qsort(data.get_ptr(),count,sizeof(custom_sort_data),(int (__cdecl *)(const void *elem1, const void *elem2 ))custom_sort_compare); for(n=0;n<count;n++) { order[n]=data[n].index; uSortStringFree(data[n].text); } }
void metadb_handle_list_helper::sort_by_relative_path_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order) { assert(base+count<=p_list.get_count()); t_size n; pfc::array_t<custom_sort_data> data; data.set_size(count); static_api_ptr_t<library_manager> api; pfc::string8_fastalloc temp; temp.prealloc(512); for(n=0;n<count;n++) { metadb_handle_ptr item; p_list.get_item_ex(item,base+n); if (!api->get_relative_path(item,temp)) temp = ""; data[n].index = n; data[n].text = uSortStringCreate(temp); //data[n].subsong = item->get_subsong_index(); } pfc::sort_t(data,custom_sort_compare,count); //qsort(data.get_ptr(),count,sizeof(custom_sort_data),(int (__cdecl *)(const void *elem1, const void *elem2 ))custom_sort_compare); for(n=0;n<count;n++) { order[n]=data[n].index; uSortStringFree(data[n].text); } }
~sort_info() {uSortStringFree(text);}