diff options
| author | Peter LaFosse <peter@vector35.com> | 2019-07-15 22:04:10 -0400 |
|---|---|---|
| committer | Peter LaFosse <peter@vector35.com> | 2019-07-15 22:04:10 -0400 |
| commit | 0082df357b828d85b34901381928d3b9025ee8f4 (patch) | |
| tree | 11af4aede1d2a8e2422ed8572f74fe41c3877fef | |
| parent | 8aaa6ab73566c69aad61ebeb8adfe5c40929b956 (diff) | |
Add move constructors and name caching for performance when sorting large symbol sets
| -rw-r--r-- | ui/symbollist.h | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/ui/symbollist.h b/ui/symbollist.h index da68fd06..b7e48aa9 100644 --- a/ui/symbollist.h +++ b/ui/symbollist.h @@ -34,25 +34,43 @@ public: { SymbolRef sym; std::string archName; - NamedObject() : sym(nullptr), archName(emptyArch) {} - NamedObject(SymbolRef s, std::string& a=emptyArch) : sym(s), archName(a) {} + mutable std::string name; + mutable bool named; + NamedObject() : sym(nullptr), archName(emptyArch), named(false) {} + NamedObject(SymbolRef s, std::string& a=emptyArch) : sym(s), archName(a), named(false) {} NamedObject(const NamedObject& n) { sym = n.sym; archName = n.archName; + named = n.named; + name = n.name; } - // NamedObject(const NamedObject&& n) - // { - // sym = std::move(n.sym); - // archName = std::move(n.archName); - // } + NamedObject(const NamedObject&& n) + { + sym = std::move(n.sym); + archName = std::move(n.archName); + name = std::move(n.name); + named = n.named; + } + + NamedObject& operator=(const NamedObject&& n) + { + sym = std::move(n.sym); + archName = std::move(n.archName); + name = std::move(n.name); + named = n.named; + return *this; + } - // NamedObject& operation=(const NamedObject&& n) - // { - // sym = std::move(n.sym); - // archName = std::move(n.archName); - // } + NamedObject& operator=(const NamedObject& n) + { + sym = n.sym; + archName = n.archName; + name = n.name; + named = n.named; + return *this; + } bool operator<(const NamedObject& other) const { @@ -80,7 +98,13 @@ public: bool isFunc() const { return sym->GetType() == FunctionSymbol; } uint64_t getStart() const { return sym->GetAddress(); } - std::string getName() const { return sym->GetFullName(); } + std::string getName() const { + if (named) + return name; + name = sym->GetFullName(); + named = true; + return name; + } BNSymbolType getType() const { return sym->GetType(); } }; |
