summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Lagler <laglerscott@gmail.com>2025-12-12 19:20:21 -0500
committerGlenn Smith <glenn@vector35.com>2025-12-16 17:45:24 -0500
commit6138978808829172448615980742756831959788 (patch)
tree746bb0a634c139967c1755dcbcfb8c3395b97ff5
parent3967000448807875468673398445854536525610 (diff)
Add more reserve calls
-rw-r--r--architecture.cpp3
-rw-r--r--binaryview.cpp7
-rw-r--r--collaboration.cpp6
-rw-r--r--database.cpp5
-rw-r--r--debuginfo.cpp8
-rw-r--r--demangle.cpp1
-rw-r--r--downloadprovider.cpp1
-rw-r--r--enterprise.cpp1
-rw-r--r--filemetadata.cpp2
-rw-r--r--flowgraph.cpp1
-rw-r--r--highlevelilinstruction.cpp1
-rw-r--r--interaction.cpp2
-rw-r--r--linearviewcursor.cpp2
-rw-r--r--lineformatter.cpp1
-rw-r--r--mediumlevelilinstruction.cpp1
-rw-r--r--platform.cpp8
-rw-r--r--pluginmanager.cpp3
-rw-r--r--scriptingprovider.cpp1
-rw-r--r--secretsprovider.cpp1
-rw-r--r--type.cpp2
-rw-r--r--typearchive.cpp6
-rw-r--r--typeparser.cpp6
-rw-r--r--typeprinter.cpp4
-rw-r--r--unicode.cpp1
-rw-r--r--websocketprovider.cpp1
25 files changed, 74 insertions, 1 deletions
diff --git a/architecture.cpp b/architecture.cpp
index c02f673c..089f421e 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -1699,6 +1699,7 @@ vector<Ref<TypeLibrary>> Architecture::GetTypeLibraries()
BNTypeLibrary** libs = BNGetArchitectureTypeLibraries(m_object, &count);
vector<Ref<TypeLibrary>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.push_back(new TypeLibrary(BNNewTypeLibraryReference(libs[i])));
@@ -2133,6 +2134,7 @@ vector<NameAndType> CoreArchitecture::GetIntrinsicInputs(uint32_t intrinsic)
BNNameAndType* inputs = BNGetArchitectureIntrinsicInputs(m_object, intrinsic, &count);
vector<NameAndType> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(NameAndType(inputs[i].name,
@@ -2150,6 +2152,7 @@ vector<Confidence<Ref<Type>>> CoreArchitecture::GetIntrinsicOutputs(uint32_t int
BNTypeWithConfidence* outputs = BNGetArchitectureIntrinsicOutputs(m_object, intrinsic, &count);
vector<Confidence<Ref<Type>>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(Confidence<Ref<Type>>(new Type(BNNewTypeReference(outputs[i].type)), outputs[i].confidence));
diff --git a/binaryview.cpp b/binaryview.cpp
index c1a22b0f..aaf63bf0 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -3095,6 +3095,7 @@ unordered_set<QualifiedName> BinaryView::GetOutgoingRecursiveTypeReferences(cons
{
size_t count;
vector<BNQualifiedName> apiTypes;
+ apiTypes.resize(types.size());
for (auto& type: types)
{
apiTypes.push_back(type.GetAPIObject());
@@ -3146,6 +3147,7 @@ unordered_set<QualifiedName> BinaryView::GetIncomingRecursiveTypeReferences(cons
{
size_t count;
vector<BNQualifiedName> apiTypes;
+ apiTypes.reserve(types.size());
for (auto& type: types)
{
apiTypes.push_back(type.GetAPIObject());
@@ -4045,6 +4047,7 @@ vector<DerivedString> BinaryView::GetDerivedStrings()
size_t count;
BNDerivedString* strings = BNGetDerivedStrings(m_object, &count);
vector<DerivedString> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(DerivedString::FromAPIObject(&strings[i], false));
BNFreeDerivedStringList(strings, count);
@@ -4281,10 +4284,12 @@ bool BinaryView::ParseTypesFromSource(const string& source, const vector<string>
}
vector<const char*> coreOptions;
+ coreOptions.reserve(options.size());
for (auto& option : options)
coreOptions.push_back(option.c_str());
vector<const char*> coreIncludeDirs;
+ coreIncludeDirs.reserve(includeDirs.size());
for (auto& includeDir : includeDirs)
coreIncludeDirs.push_back(includeDir.c_str());
@@ -4911,6 +4916,7 @@ bool BinaryView::DisassociateTypeArchiveType(const std::string& typeId)
bool BinaryView::PullTypeArchiveTypes(const std::string& archiveId, const std::unordered_set<std::string>& archiveTypeIds, std::unordered_map<std::string, std::string>& updatedTypes)
{
std::vector<const char*> apiArchiveTypeIds;
+ apiArchiveTypeIds.reserve(archiveTypeIds.size());
for (const auto& archiveTypeId: archiveTypeIds)
{
apiArchiveTypeIds.push_back(archiveTypeId.c_str());
@@ -4935,6 +4941,7 @@ bool BinaryView::PullTypeArchiveTypes(const std::string& archiveId, const std::u
bool BinaryView::PushTypeArchiveTypes(const std::string& archiveId, const std::unordered_set<std::string>& typeIds, std::unordered_map<std::string, std::string>& updatedTypes)
{
std::vector<const char*> apiTypeIds;
+ apiTypeIds.reserve(typeIds.size());
for (const auto& typeId: typeIds)
{
apiTypeIds.push_back(typeId.c_str());
diff --git a/collaboration.cpp b/collaboration.cpp
index b0cb5421..69916295 100644
--- a/collaboration.cpp
+++ b/collaboration.cpp
@@ -437,6 +437,7 @@ bool BinaryNinja::Collaboration::TypeArchiveConflictHandlerCallback(void* ctxt,
if (!chctxt->callback)
return true;
std::vector<Ref<TypeArchiveMergeConflict>> conflictVec;
+ conflictVec.reserve(count);
for (size_t i = 0; i < count; i++)
{
conflictVec.push_back(new TypeArchiveMergeConflict(conflicts[i]));
@@ -658,6 +659,7 @@ std::vector<std::pair<std::string, std::string>> Remote::GetAuthBackends()
throw RemoteException("Failed to get authentication backends");
std::vector<std::pair<std::string, std::string>> results;
+ results.reserve(count);
for (size_t i = 0; i < count; i++)
{
results.push_back({methods[i], names[i]});
@@ -855,6 +857,7 @@ std::vector<std::pair<uint64_t, std::string>> Remote::SearchGroups(const std::st
throw RemoteException("Failed to search groups");
std::vector<std::pair<uint64_t, std::string>> results;
+ results.reserve(count);
for (size_t i = 0; i < count; i++)
{
results.push_back({ids[i], names[i]});
@@ -965,6 +968,7 @@ std::vector<std::pair<std::string, std::string>> Remote::SearchUsers(const std::
throw RemoteException("Failed to search users");
std::vector<std::pair<std::string, std::string>> results;
+ results.reserve(count);
for (size_t i = 0; i < count; i++)
{
results.push_back({ids[i], names[i]});
@@ -2527,6 +2531,7 @@ std::vector<std::string> CollabSnapshot::GetParentIds()
size_t count = 0;
char** strs = BNCollaborationSnapshotGetParentIds(m_object, &count);
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(strs[i]);
@@ -2541,6 +2546,7 @@ std::vector<std::string> CollabSnapshot::GetChildIds()
size_t count = 0;
char** strs = BNCollaborationSnapshotGetParentIds(m_object, &count);
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(strs[i]);
diff --git a/database.cpp b/database.cpp
index 0fdc50e1..e1cdebd6 100644
--- a/database.cpp
+++ b/database.cpp
@@ -248,6 +248,7 @@ vector<Ref<Snapshot>> Snapshot::GetParents()
size_t count;
BNSnapshot** parents = BNGetSnapshotParents(m_object, &count);
vector<Ref<Snapshot>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new Snapshot(BNNewSnapshotReference(parents[i])));
@@ -262,6 +263,7 @@ vector<Ref<Snapshot>> Snapshot::GetChildren()
size_t count;
BNSnapshot** children = BNGetSnapshotChildren(m_object, &count);
vector<Ref<Snapshot>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new Snapshot(BNNewSnapshotReference(children[i])));
@@ -323,6 +325,7 @@ vector<Ref<UndoEntry>> Snapshot::GetUndoEntries(const ProgressFunction& progress
}
vector<Ref<UndoEntry>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new UndoEntry(BNNewUndoEntryReference(entries[i])));
@@ -390,6 +393,7 @@ vector<Ref<Snapshot>> Database::GetSnapshots()
size_t count;
BNSnapshot** snapshots = BNGetDatabaseSnapshots(m_object, &count);
vector<Ref<Snapshot>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new Snapshot(BNNewSnapshotReference(snapshots[i])));
BNFreeSnapshotList(snapshots, count);
@@ -455,6 +459,7 @@ std::vector<std::string> Database::GetGlobalKeys() const
}
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(value[i]);
diff --git a/debuginfo.cpp b/debuginfo.cpp
index ec02db4b..5ac09e98 100644
--- a/debuginfo.cpp
+++ b/debuginfo.cpp
@@ -44,6 +44,7 @@ vector<string> DebugInfo::GetParsers() const
char** parsers = BNGetDebugParserNames(m_object, &count);
vector<string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(parsers[i]);
@@ -70,6 +71,7 @@ vector<NameAndType> DebugInfo::GetTypes(const string& parserName) const
return {};
vector<NameAndType> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(nameAndTypes[i].name,
@@ -136,6 +138,7 @@ vector<DataVariableAndName> DebugInfo::GetDataVariables(const string& parserName
return {};
vector<DataVariableAndName> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(variablesAndName[i].address,
@@ -193,6 +196,7 @@ vector<tuple<string, Ref<Type>>> DebugInfo::GetTypesByName(const string& name) c
return {};
vector<tuple<string, Ref<Type>>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(namesAndTypes[i].name, Ref<Type>(new Type(BNNewTypeReference(namesAndTypes[i].type))));
@@ -213,6 +217,7 @@ vector<tuple<string, uint64_t, Ref<Type>>> DebugInfo::GetDataVariablesByName(con
return {};
vector<tuple<string, uint64_t, Ref<Type>>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(variablesAndName[i].name, variablesAndName[i].address,
@@ -234,6 +239,7 @@ vector<tuple<string, string, Ref<Type>>> DebugInfo::GetDataVariablesByAddress(co
return {};
vector<tuple<string, string, Ref<Type>>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(variablesAndName[i].parser, variablesAndName[i].name,
@@ -376,6 +382,7 @@ vector<Ref<DebugInfoParser>> DebugInfoParser::GetList()
BNDebugInfoParser** parsers = BNGetDebugInfoParsers(&count);
vector<Ref<DebugInfoParser>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(new DebugInfoParser(BNNewDebugInfoParserReference(parsers[i])));
@@ -392,6 +399,7 @@ vector<Ref<DebugInfoParser>> DebugInfoParser::GetListForView(const Ref<BinaryVie
BNDebugInfoParser** parsers = BNGetDebugInfoParsersForView(data->GetObject(), &count);
vector<Ref<DebugInfoParser>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.emplace_back(new DebugInfoParser(BNNewDebugInfoParserReference(parsers[i])));
diff --git a/demangle.cpp b/demangle.cpp
index ad392d47..8f13c213 100644
--- a/demangle.cpp
+++ b/demangle.cpp
@@ -191,6 +191,7 @@ namespace BinaryNinja {
size_t count;
BNDemangler** list = BNGetDemanglerList(&count);
vector<Ref<Demangler>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreDemangler(list[i]));
BNFreeDemanglerList(list);
diff --git a/downloadprovider.cpp b/downloadprovider.cpp
index 271e0cbf..4d5b704f 100644
--- a/downloadprovider.cpp
+++ b/downloadprovider.cpp
@@ -230,6 +230,7 @@ vector<Ref<DownloadProvider>> DownloadProvider::GetList()
size_t count;
BNDownloadProvider** list = BNGetDownloadProviderList(&count);
vector<Ref<DownloadProvider>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreDownloadProvider(list[i]));
BNFreeDownloadProviderList(list);
diff --git a/enterprise.cpp b/enterprise.cpp
index bc81a4ec..9f7ed44c 100644
--- a/enterprise.cpp
+++ b/enterprise.cpp
@@ -55,6 +55,7 @@ std::vector<std::pair<std::string, std::string>> BinaryNinja::Enterprise::GetAut
size_t count = BNGetEnterpriseServerAuthenticationMethods(&methods, &names);
std::vector<std::pair<std::string, std::string>> results;
+ results.reserve(count);
for (size_t i = 0; i < count; i++)
{
results.push_back({methods[i], names[i]});
diff --git a/filemetadata.cpp b/filemetadata.cpp
index 0ed8da22..101575a7 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -389,6 +389,7 @@ vector<Ref<UndoEntry>> FileMetadata::GetUndoEntries()
BNUndoEntry** entries = BNGetUndoEntries(m_object, &count);
vector<Ref<UndoEntry>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new UndoEntry(BNNewUndoEntryReference(entries[i])));
@@ -404,6 +405,7 @@ vector<Ref<UndoEntry>> FileMetadata::GetRedoEntries()
BNUndoEntry** entries = BNGetRedoEntries(m_object, &count);
vector<Ref<UndoEntry>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new UndoEntry(BNNewUndoEntryReference(entries[i])));
diff --git a/flowgraph.cpp b/flowgraph.cpp
index eb4613ec..cdd59cf3 100644
--- a/flowgraph.cpp
+++ b/flowgraph.cpp
@@ -442,6 +442,7 @@ std::vector<RenderLayer*> FlowGraph::GetRenderLayers() const
size_t count = 0;
BNRenderLayer** layers = BNGetFlowGraphRenderLayers(m_object, &count);
std::vector<RenderLayer*> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i ++)
{
result.push_back(new CoreRenderLayer(layers[i]));
diff --git a/highlevelilinstruction.cpp b/highlevelilinstruction.cpp
index 37504253..af5ae5f8 100644
--- a/highlevelilinstruction.cpp
+++ b/highlevelilinstruction.cpp
@@ -840,6 +840,7 @@ void HighLevelILInstructionBase::UpdateRawOperandAsExprList(
size_t operandIndex, const vector<HighLevelILInstruction>& exprs)
{
vector<ExprId> exprIndexList;
+ exprIndexList.reserve(exprs.size());
for (auto& i : exprs)
exprIndexList.push_back((ExprId)i.exprIndex);
UpdateRawOperand(operandIndex, exprIndexList.size());
diff --git a/interaction.cpp b/interaction.cpp
index c25095bb..afaa2b4a 100644
--- a/interaction.cpp
+++ b/interaction.cpp
@@ -276,6 +276,7 @@ static bool GetChoiceInputCallback(
{
InteractionHandler* handler = (InteractionHandler*)ctxt;
vector<string> choiceStrs;
+ choiceStrs.reserve(count);
for (size_t i = 0; i < count; i++)
choiceStrs.push_back(choices[i]);
return handler->GetChoiceInput(*result, prompt, title, choiceStrs);
@@ -287,6 +288,7 @@ static bool GetLargeChoiceInputCallback(
{
InteractionHandler* handler = (InteractionHandler*)ctxt;
vector<string> choiceStrs;
+ choiceStrs.reserve(count);
for (size_t i = 0; i < count; i++)
choiceStrs.push_back(choices[i]);
return handler->GetLargeChoiceInput(*result, prompt,title, choiceStrs);
diff --git a/linearviewcursor.cpp b/linearviewcursor.cpp
index 8e7ef838..6a1a7060 100644
--- a/linearviewcursor.cpp
+++ b/linearviewcursor.cpp
@@ -88,6 +88,7 @@ vector<Ref<LinearViewObject>> LinearViewCursor::GetPathObjects() const
size_t count;
BNLinearViewObject** path = BNGetLinearViewCursorPathObjects(m_object, &count);
vector<Ref<LinearViewObject>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new LinearViewObject(BNNewLinearViewObjectReference(path[i])));
BNFreeLinearViewCursorPathObjects(path, count);
@@ -217,6 +218,7 @@ std::vector<RenderLayer*> LinearViewCursor::GetRenderLayers() const
size_t count = 0;
BNRenderLayer** layers = BNGetLinearViewCursorRenderLayers(m_object, &count);
std::vector<RenderLayer*> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i ++)
{
result.push_back(new CoreRenderLayer(layers[i]));
diff --git a/lineformatter.cpp b/lineformatter.cpp
index 44eac0b3..4a66196c 100644
--- a/lineformatter.cpp
+++ b/lineformatter.cpp
@@ -126,6 +126,7 @@ vector<Ref<LineFormatter>> LineFormatter::GetList()
size_t count;
BNLineFormatter** list = BNGetLineFormatterList(&count);
vector<Ref<LineFormatter>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreLineFormatter(list[i]));
BNFreeLineFormatterList(list);
diff --git a/mediumlevelilinstruction.cpp b/mediumlevelilinstruction.cpp
index 00189313..1097dda9 100644
--- a/mediumlevelilinstruction.cpp
+++ b/mediumlevelilinstruction.cpp
@@ -1014,6 +1014,7 @@ void MediumLevelILInstructionBase::UpdateRawOperandAsExprList(
size_t operandIndex, const vector<MediumLevelILInstruction>& exprs)
{
vector<ExprId> exprIndexList;
+ exprIndexList.reserve(exprs.size());
for (auto& i : exprs)
exprIndexList.push_back((ExprId)i.exprIndex);
UpdateRawOperand(operandIndex, exprIndexList.size());
diff --git a/platform.cpp b/platform.cpp
index 1ceaf4c0..323e7d76 100644
--- a/platform.cpp
+++ b/platform.cpp
@@ -124,11 +124,14 @@ void Platform::AdjustTypeParserInputCallback(
Ref<TypeParser> parserCpp = new CoreTypeParser(parser);
vector<string> arguments;
+ arguments.reserve(argumentsLenIn);
for (size_t i = 0; i < argumentsLenIn; i ++)
{
arguments.push_back(argumentsIn[i]);
}
+
vector<pair<string, string>> sourceFiles;
+ sourceFiles.reserve(sourceFilesLenIn);
for (size_t i = 0; i < sourceFilesLenIn; i ++)
{
sourceFiles.push_back(make_pair(sourceFileNamesIn[i], sourceFileValuesIn[i]));
@@ -141,6 +144,7 @@ void Platform::AdjustTypeParserInputCallback(
);
vector<const char*> argumentsPtrs;
+ argumentsPtrs.reserve(arguments.size());
for (auto& argument : arguments)
{
argumentsPtrs.push_back(argument.c_str());
@@ -490,6 +494,7 @@ void CorePlatform::AdjustTypeParserInput(
)
{
vector<const char*> argumentsIn;
+ argumentsIn.reserve(arguments.size());
for (size_t i = 0; i < arguments.size(); i ++)
{
argumentsIn.push_back(arguments[i].c_str());
@@ -561,6 +566,7 @@ std::vector<Ref<Platform>> Platform::GetRelatedPlatforms()
BNPlatform** related = BNGetRelatedPlatforms(m_object, &count);
std::vector<Ref<Platform>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(new CorePlatform(BNNewPlatformReference(related[i])));
@@ -656,6 +662,7 @@ vector<Ref<TypeLibrary>> Platform::GetTypeLibraries()
BNTypeLibrary** libs = BNGetPlatformTypeLibraries(m_object, &count);
vector<Ref<TypeLibrary>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.push_back(new TypeLibrary(BNNewTypeLibraryReference(libs[i])));
@@ -672,6 +679,7 @@ vector<Ref<TypeLibrary>> Platform::GetTypeLibrariesByName(const std::string& nam
BNTypeLibrary** libs = BNGetPlatformTypeLibrariesByName(m_object, name.c_str(), &count);
vector<Ref<TypeLibrary>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.push_back(new TypeLibrary(BNNewTypeLibraryReference(libs[i])));
diff --git a/pluginmanager.cpp b/pluginmanager.cpp
index f1e674e1..dd62bde7 100644
--- a/pluginmanager.cpp
+++ b/pluginmanager.cpp
@@ -114,6 +114,7 @@ vector<PluginType> RepoPlugin::GetPluginTypes() const
size_t count;
BNPluginType* pluginTypesPtr = BNPluginGetPluginTypes(m_object, &count);
vector<PluginType> pluginTypes;
+ pluginTypes.reserve(count);
for (size_t i = 0; i < count; i++)
{
pluginTypes.push_back((PluginType)pluginTypesPtr[i]);
@@ -170,6 +171,7 @@ vector<string> RepoPlugin::GetInstallPlatforms() const
vector<string> result;
size_t count = 0;
char** platforms = BNPluginGetPlatforms(m_object, &count);
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(platforms[i]);
BNFreeStringList(platforms, count);
@@ -335,6 +337,7 @@ vector<Ref<Repository>> RepositoryManager::GetRepositories()
vector<Ref<Repository>> repos;
size_t count = 0;
BNRepository** reposPtr = BNRepositoryManagerGetRepositories(m_object, &count);
+ repos.reserve(count);
for (size_t i = 0; i < count; i++)
repos.push_back(new Repository(BNNewRepositoryReference(reposPtr[i])));
BNFreeRepositoryManagerRepositoriesList(reposPtr);
diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp
index ad10ec5e..4fd40879 100644
--- a/scriptingprovider.cpp
+++ b/scriptingprovider.cpp
@@ -388,6 +388,7 @@ vector<Ref<ScriptingProvider>> ScriptingProvider::GetList()
size_t count;
BNScriptingProvider** list = BNGetScriptingProviderList(&count);
vector<Ref<ScriptingProvider>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreScriptingProvider(list[i]));
BNFreeScriptingProviderList(list);
diff --git a/secretsprovider.cpp b/secretsprovider.cpp
index c4b81aeb..4c14e7cf 100644
--- a/secretsprovider.cpp
+++ b/secretsprovider.cpp
@@ -73,6 +73,7 @@ std::vector<Ref<SecretsProvider>> SecretsProvider::GetList()
size_t count;
BNSecretsProvider** list = BNGetSecretsProviderList(&count);
std::vector<Ref<SecretsProvider>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreSecretsProvider(list[i]));
BNFreeSecretsProviderList(list);
diff --git a/type.cpp b/type.cpp
index 086ac863..bd7dbaf2 100644
--- a/type.cpp
+++ b/type.cpp
@@ -758,6 +758,7 @@ std::vector<TypeAttribute> Type::GetAttributes() const
size_t count = 0;
BNTypeAttribute* attributes = BNGetTypeAttributes(m_object, &count);
std::vector<TypeAttribute> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.emplace_back(attributes[i].name, attributes[i].value);
BNFreeTypeAttributeList(attributes, count);
@@ -2259,6 +2260,7 @@ std::vector<TypeAttribute> TypeBuilder::GetAttributes() const
size_t count;
BNTypeAttribute* attributes = BNGetTypeBuilderAttributes(m_object, &count);
std::vector<TypeAttribute> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.emplace_back(attributes[i].name, attributes[i].value);
BNFreeTypeAttributeList(attributes, count);
diff --git a/typearchive.cpp b/typearchive.cpp
index ee2bd4df..c4cb865f 100644
--- a/typearchive.cpp
+++ b/typearchive.cpp
@@ -177,6 +177,7 @@ std::vector<std::string> TypeArchive::GetAllSnapshotIds() const
throw ExceptionWithStackTrace("BNGetTypeArchiveAllSnapshotIds");
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i ++)
{
result.push_back(ids[i]);
@@ -195,6 +196,7 @@ std::vector<std::string> TypeArchive::GetSnapshotParentIds(const std::string& id
throw ExceptionWithStackTrace("BNGetTypeArchiveSnapshotParentIds");
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i ++)
{
result.push_back(ids[i]);
@@ -213,6 +215,7 @@ std::vector<std::string> TypeArchive::GetSnapshotChildIds(const std::string& id)
throw ExceptionWithStackTrace("BNGetTypeArchiveSnapshotChildIds");
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i ++)
{
result.push_back(ids[i]);
@@ -348,6 +351,7 @@ std::vector<std::string> TypeArchive::GetTypeIds(std::string snapshot) const
throw ExceptionWithStackTrace("BNGetTypeArchiveTypeIds");
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.push_back(ids[i]);
@@ -367,6 +371,7 @@ std::vector<QualifiedName> TypeArchive::GetTypeNames(std::string snapshot) const
throw ExceptionWithStackTrace("BNGetTypeArchiveTypeNames");
std::vector<QualifiedName> result;
+ result.reserve(count);
for (size_t i = 0; i < count; ++i)
{
result.push_back(QualifiedName::FromAPIObject(&names[i]));
@@ -500,6 +505,7 @@ std::string TypeArchive::NewSnapshotTransaction(std::function<void(const std::st
ctxt.func = func;
std::vector<const char*> apiParents;
+ apiParents.reserve(parents.size());
for (const auto& parent: parents)
{
apiParents.push_back(parent.c_str());
diff --git a/typeparser.cpp b/typeparser.cpp
index 7cbd442b..8fe20a1f 100644
--- a/typeparser.cpp
+++ b/typeparser.cpp
@@ -20,6 +20,7 @@ vector<Ref<TypeParser>> TypeParser::GetList()
size_t count;
BNTypeParser** list = BNGetTypeParserList(&count);
vector<Ref<TypeParser>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreTypeParser(list[i]));
BNFreeTypeParserList(list);
@@ -63,6 +64,7 @@ std::vector<std::string> TypeParser::ParseOptionsText(const std::string& options
char** options = BNParseTypeParserOptionsText(optionsText.c_str(), &count);
std::vector<std::string> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
{
result.push_back(options[i]);
@@ -140,12 +142,14 @@ bool TypeParser::PreprocessSourceCallback(void* ctxt,
TypeParser* parser = (TypeParser*)ctxt;
vector<string> optionsCpp;
+ optionsCpp.reserve(optionCount);
for (size_t i = 0; i < optionCount; i ++)
{
optionsCpp.push_back(options[i]);
}
vector<string> includeDirsCpp;
+ includeDirsCpp.reserve(includeDirCount);
for (size_t i = 0; i < includeDirCount; i ++)
{
includeDirsCpp.push_back(includeDirs[i]);
@@ -200,12 +204,14 @@ bool TypeParser::ParseTypesFromSourceCallback(void* ctxt,
TypeParser* parser = (TypeParser*)ctxt;
vector<string> optionsCpp;
+ optionsCpp.reserve(optionCount);
for (size_t i = 0; i < optionCount; i ++)
{
optionsCpp.push_back(options[i]);
}
vector<string> includeDirsCpp;
+ includeDirsCpp.reserve(includeDirCount);
for (size_t i = 0; i < includeDirCount; i ++)
{
includeDirsCpp.push_back(includeDirs[i]);
diff --git a/typeprinter.cpp b/typeprinter.cpp
index 3b36da9d..9a67785a 100644
--- a/typeprinter.cpp
+++ b/typeprinter.cpp
@@ -121,6 +121,7 @@ bool TypePrinter::PrintAllTypesCallback(void* ctxt, BNQualifiedName* names, BNTy
{
TypePrinter* printer = (TypePrinter*)ctxt;
vector<pair<QualifiedName, Ref<Type>>> apiTypes;
+ apiTypes.reserve(typeCount);
for (size_t i = 0; i < typeCount; ++i)
{
apiTypes.push_back({QualifiedName::FromAPIObject(&names[i]), new Type(types[i])});
@@ -173,6 +174,7 @@ std::vector<Ref<TypePrinter>> TypePrinter::GetList()
size_t count;
BNTypePrinter** list = BNGetTypePrinterList(&count);
vector<Ref<TypePrinter>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreTypePrinter(list[i]));
BNFreeTypePrinterList(list);
@@ -449,7 +451,7 @@ std::vector<TypeDefinitionLine> CoreTypePrinter::GetTypeLines(Ref<Type> type,
return {};
vector<TypeDefinitionLine> cppLines;
-
+ cppLines.reserve(lineCount);
for (size_t i = 0; i < lineCount; ++i)
{
cppLines.push_back(TypeDefinitionLine::FromAPIObject(&lines[i]));
diff --git a/unicode.cpp b/unicode.cpp
index 127521be..9285269c 100644
--- a/unicode.cpp
+++ b/unicode.cpp
@@ -64,6 +64,7 @@ std::vector<std::vector<std::pair<uint32_t, uint32_t>>> BinaryNinja::Unicode::Ge
for (size_t i = 0; i < blockListCounts; i ++)
{
std::vector<std::pair<uint32_t, uint32_t>> blockList;
+ blockList.reserve(blockCounts[i]);
for (size_t j = 0; j < blockCounts[i]; j ++)
{
blockList.push_back(std::make_pair(blockStarts[i][j], blockEnds[i][j]));
diff --git a/websocketprovider.cpp b/websocketprovider.cpp
index 3273e34f..f7a5bed5 100644
--- a/websocketprovider.cpp
+++ b/websocketprovider.cpp
@@ -165,6 +165,7 @@ vector<Ref<WebsocketProvider>> WebsocketProvider::GetList()
size_t count;
BNWebsocketProvider** list = BNGetWebsocketProviderList(&count);
vector<Ref<WebsocketProvider>> result;
+ result.reserve(count);
for (size_t i = 0; i < count; i++)
result.push_back(new CoreWebsocketProvider(list[i]));
BNFreeWebsocketProviderList(list);