static t_size merge_tags_calc_rating(const file_info & p_info,const char * p_field) { t_size field_index = p_info.meta_find(p_field); if (field_index != ~0) { return merge_tags_calc_rating_by_index(p_info,field_index); } else { return 0; } }
static void merge_meta(file_info & p_out,const pfc::list_base_const_t<const file_info*> & p_in) { pfc::map_t<const char *,meta_merge_entry,pfc::comparator_stricmp_ascii> map; for(t_size in_walk = 0; in_walk < p_in.get_count(); in_walk++) { const file_info & in = * p_in[in_walk]; for(t_size meta_walk = 0, meta_count = in.meta_get_count(); meta_walk < meta_count; meta_walk++ ) { meta_merge_entry & entry = map.find_or_add(in.meta_enum_name(meta_walk)); t_size rating = merge_tags_calc_rating_by_index(in,meta_walk); if (rating > entry.m_rating) { entry.m_rating = rating; const t_size value_count = in.meta_enum_value_count(meta_walk); entry.m_data.set_size(value_count); for(t_size value_walk = 0; value_walk < value_count; value_walk++ ) { entry.m_data[value_walk] = in.meta_enum_value(meta_walk,value_walk); } } } } map.enumerate(meta_merge_map_enumerator(p_out)); }