[FEATURE]add maat_state_get_last_hit_group_ids API => TSG-17831
This commit is contained in:
@@ -119,6 +119,10 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
|
||||
|
||||
size_t compile_state_get_indirect_hit_group_cnt(struct compile_state *compile_state);
|
||||
|
||||
size_t compile_state_get_last_hit_group_id(struct compile_state *compile_state,
|
||||
long long *group_id_arary,
|
||||
size_t array_size);
|
||||
|
||||
int compile_state_get_compile_table_id(struct compile_state *compile_state,
|
||||
long long compile_id);
|
||||
|
||||
|
||||
@@ -2139,4 +2139,16 @@ size_t maat_state_get_indirect_hit_group_cnt(struct maat_state *state)
|
||||
}
|
||||
|
||||
return compile_state_get_indirect_hit_group_cnt(state->compile_state);
|
||||
}
|
||||
|
||||
int maat_state_get_last_hit_group_ids(struct maat_state *state,
|
||||
long long *group_id_array,
|
||||
size_t array_size)
|
||||
{
|
||||
if (NULL == state || NULL == state->compile_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return compile_state_get_last_hit_group_id(state->compile_state,
|
||||
group_id_array, array_size);
|
||||
}
|
||||
@@ -179,6 +179,7 @@ struct compile_state {
|
||||
UT_array *exclude_not_clauses;
|
||||
UT_array *direct_hit_groups;
|
||||
UT_array *indirect_hit_groups;
|
||||
UT_array *last_hit_group_ids;
|
||||
UT_array *hit_compile_table_ids;
|
||||
struct table_group *hit_not_tbl_groups;
|
||||
};
|
||||
@@ -1464,6 +1465,7 @@ struct compile_state *compile_state_new(void)
|
||||
utarray_new(compile_state->exclude_not_clauses, &ut_clause_id_icd);
|
||||
utarray_new(compile_state->direct_hit_groups, &ut_maat_hit_group_icd);
|
||||
utarray_new(compile_state->indirect_hit_groups, &ut_maat_hit_group_icd);
|
||||
utarray_new(compile_state->last_hit_group_ids, &ut_compile_group_id_icd);
|
||||
utarray_new(compile_state->hit_compile_table_ids, &ut_hit_compile_table_id_icd);
|
||||
compile_state->hit_not_tbl_groups = NULL;
|
||||
|
||||
@@ -1508,6 +1510,7 @@ void compile_state_reset(struct compile_state *compile_state)
|
||||
utarray_clear(compile_state->exclude_not_clauses);
|
||||
utarray_clear(compile_state->direct_hit_groups);
|
||||
utarray_clear(compile_state->indirect_hit_groups);
|
||||
utarray_clear(compile_state->last_hit_group_ids);
|
||||
utarray_clear(compile_state->hit_compile_table_ids);
|
||||
|
||||
struct table_group *tbl_group = NULL, *tmp_tbl_group = NULL;
|
||||
@@ -1567,6 +1570,12 @@ void compile_state_free(struct compile_state *compile_state,
|
||||
compile_state->indirect_hit_groups = NULL;
|
||||
}
|
||||
|
||||
if (compile_state->last_hit_group_ids != NULL) {
|
||||
free_bytes += utarray_size(compile_state->last_hit_group_ids) * sizeof(long long);
|
||||
utarray_free(compile_state->last_hit_group_ids);
|
||||
compile_state->last_hit_group_ids = NULL;
|
||||
}
|
||||
|
||||
if (compile_state->hit_compile_table_ids != NULL) {
|
||||
free_bytes += utarray_size(compile_state->hit_compile_table_ids) * sizeof(struct compile2table_id);
|
||||
utarray_free(compile_state->hit_compile_table_ids);
|
||||
@@ -2396,13 +2405,15 @@ int compile_state_update(struct compile_state *compile_state, struct maat *maat_
|
||||
size_t i = 0, j = 0;
|
||||
size_t hit_cnt = n_hit_item;
|
||||
long long hit_group_ids[MAX_HIT_GROUP_NUM];
|
||||
|
||||
|
||||
utarray_clear(compile_state->this_scan_hit_clauses);
|
||||
utarray_clear(compile_state->last_hit_group_ids);
|
||||
compile_state->this_scan_not_logic = 0;
|
||||
compile_state->Nth_scan = Nth_scan;
|
||||
|
||||
for (i = 0; i < hit_cnt; i++) {
|
||||
hit_group_ids[i] = hit_items[i].group_id;
|
||||
utarray_push_back(compile_state->last_hit_group_ids, &hit_items[i].group_id);
|
||||
}
|
||||
|
||||
int g2g_table_id = table_manager_get_group2group_table_id(maat_inst->tbl_mgr);
|
||||
@@ -2412,11 +2423,14 @@ int compile_state_update(struct compile_state *compile_state, struct maat *maat_
|
||||
size_t super_group_cnt = group2group_runtime_get_super_groups(g2g_rt, hit_group_ids,
|
||||
hit_cnt, super_group_ids,
|
||||
MAX_HIT_GROUP_NUM);
|
||||
for (i = 0; i < super_group_cnt; i++) {
|
||||
utarray_push_back(compile_state->last_hit_group_ids, &super_group_ids[i]);
|
||||
}
|
||||
|
||||
if (1 == maat_inst->opts.hit_path_on && hit_cnt > 0) {
|
||||
for (i = 0; i < hit_cnt; i++) {
|
||||
compile_state_add_internal_hit_path(compile_state, hit_items[i].item_id,
|
||||
hit_items[i].group_id, vtable_id,
|
||||
0, Nth_scan);
|
||||
hit_items[i].group_id, vtable_id, 0, Nth_scan);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2493,10 +2507,6 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
|
||||
struct maat_hit_group *group_array,
|
||||
size_t array_size)
|
||||
{
|
||||
if (NULL == compile_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t i = 0;
|
||||
struct maat_hit_group *hit_group = NULL;
|
||||
for (i = 0; i < utarray_len(compile_state->indirect_hit_groups) && i < array_size; i++) {
|
||||
@@ -2513,21 +2523,26 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
|
||||
|
||||
size_t compile_state_get_indirect_hit_group_cnt(struct compile_state *compile_state)
|
||||
{
|
||||
if (NULL == compile_state) {
|
||||
return 0;
|
||||
return utarray_len(compile_state->indirect_hit_groups);
|
||||
}
|
||||
|
||||
size_t compile_state_get_last_hit_group_id(struct compile_state *compile_state,
|
||||
long long *group_id_array,
|
||||
size_t array_size)
|
||||
{
|
||||
size_t i = 0;
|
||||
|
||||
for (i = 0; i < utarray_len(compile_state->last_hit_group_ids) && i < array_size; i++) {
|
||||
group_id_array[i] = *(long long *)utarray_eltptr(compile_state->last_hit_group_ids, i);
|
||||
}
|
||||
|
||||
return utarray_len(compile_state->indirect_hit_groups);
|
||||
return i;
|
||||
}
|
||||
|
||||
size_t compile_state_get_direct_hit_groups(struct compile_state *compile_state,
|
||||
struct maat_hit_group *group_array,
|
||||
size_t array_size)
|
||||
{
|
||||
if (NULL == compile_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
UT_array *direct_hit_group = compile_state->direct_hit_groups;
|
||||
|
||||
size_t i = 0;
|
||||
@@ -2546,10 +2561,6 @@ size_t compile_state_get_direct_hit_groups(struct compile_state *compile_state,
|
||||
|
||||
size_t compile_state_get_direct_hit_group_cnt(struct compile_state *compile_state)
|
||||
{
|
||||
if (NULL == compile_state) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return utarray_len(compile_state->direct_hit_groups);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user