From 2ea7f378917d75f47f2d0ae46d2b0e94f39c4d20 Mon Sep 17 00:00:00 2001 From: liuwentan Date: Fri, 2 Jun 2023 11:37:13 +0800 Subject: [PATCH] [OPTIMIZE]groups not in g2g table no need to get super groups --- src/maat_group.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/maat_group.c b/src/maat_group.c index 033eba1..554f872 100644 --- a/src/maat_group.c +++ b/src/maat_group.c @@ -927,13 +927,13 @@ void verify_candidate_super_group_ids(struct maat_group_topology *group_topo, } utarray_push_back(kept_super_group_ids, p); - utarray_sort(kept_super_group_ids, compare_group_id); - + if (!utarray_find(all_hit_group_ids, p, compare_group_id)) { utarray_push_back(all_hit_group_ids, p); utarray_sort(all_hit_group_ids, compare_group_id); } } + utarray_sort(kept_super_group_ids, compare_group_id); /** * candidate_group_ids clone all_hit_group_ids @@ -1080,8 +1080,23 @@ size_t group2group_runtime_get_super_groups(void *g2g_runtime, long long *group_ } struct group2group_runtime *g2g_rt = (struct group2group_runtime *)g2g_runtime; + long long g2g_group_ids[n_group_ids]; + size_t g2g_group_ids_cnt = 0; + + for (size_t i = 0; i < n_group_ids; i++) { + struct maat_group *group = group_topology_find_group(g2g_rt->group_topo, group_ids[i]); + if (NULL == group) { + continue; + } - return group_topology_get_super_groups(g2g_rt->group_topo, group_ids, n_group_ids, + g2g_group_ids[g2g_group_ids_cnt++] = group_ids[i]; + } + + if (0 == g2g_group_ids_cnt) { + return 0; + } + + return group_topology_get_super_groups(g2g_rt->group_topo, g2g_group_ids, g2g_group_ids_cnt, super_group_ids, super_group_ids_size); }