summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2023-02-15 11:44:26 -0500
committerPeter LaFosse <peter@vector35.com>2023-02-17 09:07:17 -0500
commit8b9d446826a1752b44a56158182723b16307fdfa (patch)
tree461535ce8c2013a6a8ba89751839018b1c44e5ee
parent88acbd3b77961187e20b712b37de9453c6f5151d (diff)
Ensure we reserve space in the vector in NameList constructor
-rw-r--r--binaryninjaapi.h4
-rw-r--r--type.cpp25
2 files changed, 23 insertions, 6 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index f0f3ce89..9c8dd572 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -2328,7 +2328,8 @@ namespace BinaryNinja {
std::vector<std::string> m_name;
public:
- NameList(const std::string& join);
+ NameList(const BNQualifiedName* name);
+ NameList(const std::string& join, size_t size = 0);
NameList(const std::string& name, const std::string& join);
NameList(const std::vector<std::string>& name, const std::string& join);
NameList(const NameList& name, const std::string& join);
@@ -2385,6 +2386,7 @@ namespace BinaryNinja {
{
public:
QualifiedName();
+ QualifiedName(const BNQualifiedName* name);
QualifiedName(const std::string& name);
QualifiedName(const std::vector<std::string>& name);
QualifiedName(const QualifiedName& name);
diff --git a/type.cpp b/type.cpp
index 9c5492f4..1cab11bd 100644
--- a/type.cpp
+++ b/type.cpp
@@ -25,7 +25,22 @@ using namespace BinaryNinja;
using namespace std;
-NameList::NameList(const string& join) : m_join(join) {}
+NameList::NameList(const string& join, size_t size) : m_join(join)
+{
+ m_name.reserve(size);
+}
+
+
+NameList::NameList(const BNQualifiedName* name)
+{
+ if (name->join)
+ m_join = name->join;
+ m_name.reserve(name->nameCount);
+ for (size_t i = 0; i < name->nameCount; i++)
+ m_name.push_back(name->name[i]);
+}
+
+
NameList::NameList(const string& name, const string& join) : m_join(join)
@@ -274,6 +289,9 @@ NameList NameList::FromAPIObject(BNNameList* name)
QualifiedName::QualifiedName() : NameList("::") {}
+QualifiedName::QualifiedName(const BNQualifiedName* name) : NameList(name) {}
+
+
QualifiedName::QualifiedName(const string& name) : NameList(name, "::") {}
@@ -342,10 +360,7 @@ void QualifiedName::FreeAPIObject(BNQualifiedName* name)
QualifiedName QualifiedName::FromAPIObject(const BNQualifiedName* name)
{
- QualifiedName result;
- for (size_t i = 0; i < name->nameCount; i++)
- result.push_back(name->name[i]);
- return result;
+ return QualifiedName(name);
}