summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhengchao <[email protected]>2021-07-19 17:43:01 +0800
committerzhengchao <[email protected]>2021-07-19 20:55:13 +0800
commit524edff8bee015e9c1faad359d1a24749a286aa3 (patch)
treebd8590f8f836f8187e6f89cf342c13b35e5a6b04
parent53beb2f221df84dbb30603909fb4c7ef886e426a (diff)
优化hit_path增加性能v3.2.4
-rw-r--r--src/entry/Maat_hierarchy.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/entry/Maat_hierarchy.cpp b/src/entry/Maat_hierarchy.cpp
index ca20b52..7732a49 100644
--- a/src/entry/Maat_hierarchy.cpp
+++ b/src/entry/Maat_hierarchy.cpp
@@ -70,24 +70,32 @@ struct Maat_hierarchy_internal_hit_path
int region_id;
int virtual_table_id;
};
-static inline int compare_internal_hit_path(const void* a, const void* b)
-{
- return memcmp(a, b, sizeof(struct Maat_hierarchy_internal_hit_path));
-}
static int Maat_hierarchy_hit_path_add(UT_array* hit_paths, int region_id, int virtual_table_id, int Nth_scan, int Nth_region_result)
{
- struct Maat_hierarchy_internal_hit_path new_path;
+ struct Maat_hierarchy_internal_hit_path new_path, *tmp_path=NULL;
new_path.region_id=region_id;
new_path.Nth_hit_region=Nth_region_result;
new_path.Nth_scan=Nth_scan;
new_path.virtual_table_id=virtual_table_id;
-
- if(utarray_find(hit_paths, &new_path, compare_internal_hit_path))
+ size_t i=0, num=utarray_len(hit_paths);
+ for(i=0; i<num; i--)
{
- return 0;
+ tmp_path=(struct Maat_hierarchy_internal_hit_path*)utarray_eltptr(hit_paths, num-i-1);
+ if(tmp_path->Nth_scan!=new_path.Nth_scan)
+ {
+ break;
+ }
+ else
+ {
+ if(tmp_path->region_id==new_path.region_id &&
+ tmp_path->virtual_table_id==new_path.virtual_table_id &&
+ tmp_path->Nth_hit_region==new_path.Nth_hit_region)
+ {
+ return 0;
+ }
+ }
}
utarray_push_back(hit_paths, &new_path);
- utarray_sort(hit_paths, compare_internal_hit_path);
return 1;
}