//MTk中查找categories时候的算法,最终得到g_categories_controls_map的对应的数组值 U8 *dm_search_control_set(S32 category_id, S16 **default_coordinate_set_p) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ U8 min = 0, max = 0, mid = 0; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ /* MMI_ASSERT(category_id); */ if (category_id == 0) { return NULL; } max = dm_get_control_sets_count(); /* set max as max number of records */ min = 0; *default_coordinate_set_p = NULL; while (min <= max) { mid = (max + min) >> 1; if (g_categories_controls_map[mid].category_id == (U16) category_id) { #ifdef __MMI_SCREEN_ROTATE__ MMI_DBG_ASSERT(!mmi_frm_is_screen_width_height_swapped() || g_categories_controls_map[mid].rotated_coordinate_set_p); if (mmi_frm_is_screen_width_height_swapped() && g_categories_controls_map[mid].rotated_coordinate_set_p) { *default_coordinate_set_p = g_categories_controls_map[mid].rotated_coordinate_set_p; } else { *default_coordinate_set_p = g_categories_controls_map[mid].default_coordinate_set_p; } #else /* __MMI_SCREEN_ROTATE__ */ *default_coordinate_set_p = g_categories_controls_map[mid].default_coordinate_set_p; #endif /* __MMI_SCREEN_ROTATE__ */ return g_categories_controls_map[mid].control_set_p; } else if (g_categories_controls_map[mid].category_id > (U16) category_id) { max = mid - 1; } else { min = mid + 1; } } MMI_ASSERT(0); return NULL; } /* end of dm_search_control_set */ //categories的坐标设置coordinate_set,与上面用的相同的折中的寻找方法 S16 *dm_search_coordinate_set(S32 ScrId) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 StartIndex = 0; S32 EndIndex = dm_get_coordinate_sets_count(); /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ while (EndIndex >= StartIndex) { S32 MiddleIndex = (EndIndex + StartIndex) >> 1; if (g_screenid_coordinate_sets_map[MiddleIndex].screen_id == ScrId) { return g_screenid_coordinate_sets_map[MiddleIndex].coordinate_set_p; } else if (g_screenid_coordinate_sets_map[MiddleIndex].screen_id > ScrId) { EndIndex = MiddleIndex - 1; } else { StartIndex = MiddleIndex + 1; } } return NULL; } /* end of dm_search_coordinate_set */