diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-06-12 23:46:47 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-06-12 23:46:47 (GMT) |
commit | 04d108111fe7ddd01713b4ca22f8d96961ec2486 (patch) | |
tree | 72ca086e0db2568bc93acb865b84e29c7d206897 /src/analysis/disass/area.c | |
parent | 64aee7b4301e720a7420ab8942ef88f72d7a2c99 (diff) |
Improved loading speed with binary search of sorted arrays.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@538 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/disass/area.c')
-rw-r--r-- | src/analysis/disass/area.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c index 2e7b46d..6ce9272 100644 --- a/src/analysis/disass/area.c +++ b/src/analysis/disass/area.c @@ -1553,10 +1553,25 @@ static bool insert_extra_symbol_into_mem_areas(mem_area **list, size_t *count, G size_t find_memory_area_by_addr(mem_area *list, size_t count, const vmpa2t *addr) { size_t result; /* Trouvaille à retourner */ + mem_area *found; /* Elément trouvé éventuel */ - for (result = 0; result < count; result++) - if (mrange_contains_addr(&list[result].range, addr)) - break; + int find_mem_area(const vmpa2t *addr, const mem_area *area) + { + int status; /* Bilan à retourner */ + + if (mrange_contains_addr(&area->range, addr)) + status = 0; + + else + status = cmp_vmpa(addr, get_mrange_addr(&area->range)); + + return status; + + } + + found = bsearch(addr, list, count, sizeof(mem_area), (__compar_fn_t)find_mem_area); + + result = (found != NULL ? found - list : count); return result; |