From 6138978808829172448615980742756831959788 Mon Sep 17 00:00:00 2001 From: Scott Lagler Date: Fri, 12 Dec 2025 19:20:21 -0500 Subject: Add more reserve calls --- architecture.cpp | 3 +++ binaryview.cpp | 7 +++++++ collaboration.cpp | 6 ++++++ database.cpp | 5 +++++ debuginfo.cpp | 8 ++++++++ demangle.cpp | 1 + downloadprovider.cpp | 1 + enterprise.cpp | 1 + filemetadata.cpp | 2 ++ flowgraph.cpp | 1 + highlevelilinstruction.cpp | 1 + interaction.cpp | 2 ++ linearviewcursor.cpp | 2 ++ lineformatter.cpp | 1 + mediumlevelilinstruction.cpp | 1 + platform.cpp | 8 ++++++++ pluginmanager.cpp | 3 +++ scriptingprovider.cpp | 1 + secretsprovider.cpp | 1 + type.cpp | 2 ++ typearchive.cpp | 6 ++++++ typeparser.cpp | 6 ++++++ typeprinter.cpp | 4 +++- unicode.cpp | 1 + websocketprovider.cpp | 1 + 25 files changed, 74 insertions(+), 1 deletion(-) diff --git a/architecture.cpp b/architecture.cpp index c02f673c..089f421e 100644 --- a/architecture.cpp +++ b/architecture.cpp @@ -1699,6 +1699,7 @@ vector> Architecture::GetTypeLibraries() BNTypeLibrary** libs = BNGetArchitectureTypeLibraries(m_object, &count); vector> 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 CoreArchitecture::GetIntrinsicInputs(uint32_t intrinsic) BNNameAndType* inputs = BNGetArchitectureIntrinsicInputs(m_object, intrinsic, &count); vector result; + result.reserve(count); for (size_t i = 0; i < count; i++) { result.push_back(NameAndType(inputs[i].name, @@ -2150,6 +2152,7 @@ vector>> CoreArchitecture::GetIntrinsicOutputs(uint32_t int BNTypeWithConfidence* outputs = BNGetArchitectureIntrinsicOutputs(m_object, intrinsic, &count); vector>> result; + result.reserve(count); for (size_t i = 0; i < count; i++) result.push_back(Confidence>(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 BinaryView::GetOutgoingRecursiveTypeReferences(cons { size_t count; vector apiTypes; + apiTypes.resize(types.size()); for (auto& type: types) { apiTypes.push_back(type.GetAPIObject()); @@ -3146,6 +3147,7 @@ unordered_set BinaryView::GetIncomingRecursiveTypeReferences(cons { size_t count; vector apiTypes; + apiTypes.reserve(types.size()); for (auto& type: types) { apiTypes.push_back(type.GetAPIObject()); @@ -4045,6 +4047,7 @@ vector BinaryView::GetDerivedStrings() size_t count; BNDerivedString* strings = BNGetDerivedStrings(m_object, &count); vector 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 } vector coreOptions; + coreOptions.reserve(options.size()); for (auto& option : options) coreOptions.push_back(option.c_str()); vector 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& archiveTypeIds, std::unordered_map& updatedTypes) { std::vector 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& typeIds, std::unordered_map& updatedTypes) { std::vector 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> 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> Remote::GetAuthBackends() throw RemoteException("Failed to get authentication backends"); std::vector> 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> Remote::SearchGroups(const std::st throw RemoteException("Failed to search groups"); std::vector> 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> Remote::SearchUsers(const std:: throw RemoteException("Failed to search users"); std::vector> 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 CollabSnapshot::GetParentIds() size_t count = 0; char** strs = BNCollaborationSnapshotGetParentIds(m_object, &count); std::vector result; + result.reserve(count); for (size_t i = 0; i < count; i++) { result.push_back(strs[i]); @@ -2541,6 +2546,7 @@ std::vector CollabSnapshot::GetChildIds() size_t count = 0; char** strs = BNCollaborationSnapshotGetParentIds(m_object, &count); std::vector 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> Snapshot::GetParents() size_t count; BNSnapshot** parents = BNGetSnapshotParents(m_object, &count); vector> 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> Snapshot::GetChildren() size_t count; BNSnapshot** children = BNGetSnapshotChildren(m_object, &count); vector> 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> Snapshot::GetUndoEntries(const ProgressFunction& progress } vector> 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> Database::GetSnapshots() size_t count; BNSnapshot** snapshots = BNGetDatabaseSnapshots(m_object, &count); vector> 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 Database::GetGlobalKeys() const } std::vector 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 DebugInfo::GetParsers() const char** parsers = BNGetDebugParserNames(m_object, &count); vector result; + result.reserve(count); for (size_t i = 0; i < count; ++i) { result.emplace_back(parsers[i]); @@ -70,6 +71,7 @@ vector DebugInfo::GetTypes(const string& parserName) const return {}; vector result; + result.reserve(count); for (size_t i = 0; i < count; ++i) { result.emplace_back(nameAndTypes[i].name, @@ -136,6 +138,7 @@ vector DebugInfo::GetDataVariables(const string& parserName return {}; vector result; + result.reserve(count); for (size_t i = 0; i < count; ++i) { result.emplace_back(variablesAndName[i].address, @@ -193,6 +196,7 @@ vector>> DebugInfo::GetTypesByName(const string& name) c return {}; vector>> result; + result.reserve(count); for (size_t i = 0; i < count; ++i) { result.emplace_back(namesAndTypes[i].name, Ref(new Type(BNNewTypeReference(namesAndTypes[i].type)))); @@ -213,6 +217,7 @@ vector>> DebugInfo::GetDataVariablesByName(con return {}; vector>> 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>> DebugInfo::GetDataVariablesByAddress(co return {}; vector>> 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> DebugInfoParser::GetList() BNDebugInfoParser** parsers = BNGetDebugInfoParsers(&count); vector> 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> DebugInfoParser::GetListForView(const RefGetObject(), &count); vector> 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> 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> DownloadProvider::GetList() size_t count; BNDownloadProvider** list = BNGetDownloadProviderList(&count); vector> 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> BinaryNinja::Enterprise::GetAut size_t count = BNGetEnterpriseServerAuthenticationMethods(&methods, &names); std::vector> 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> FileMetadata::GetUndoEntries() BNUndoEntry** entries = BNGetUndoEntries(m_object, &count); vector> 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> FileMetadata::GetRedoEntries() BNUndoEntry** entries = BNGetRedoEntries(m_object, &count); vector> 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 FlowGraph::GetRenderLayers() const size_t count = 0; BNRenderLayer** layers = BNGetFlowGraphRenderLayers(m_object, &count); std::vector 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& exprs) { vector 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 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 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> LinearViewCursor::GetPathObjects() const size_t count; BNLinearViewObject** path = BNGetLinearViewCursorPathObjects(m_object, &count); vector> 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 LinearViewCursor::GetRenderLayers() const size_t count = 0; BNRenderLayer** layers = BNGetLinearViewCursorRenderLayers(m_object, &count); std::vector 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> LineFormatter::GetList() size_t count; BNLineFormatter** list = BNGetLineFormatterList(&count); vector> 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& exprs) { vector 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 parserCpp = new CoreTypeParser(parser); vector arguments; + arguments.reserve(argumentsLenIn); for (size_t i = 0; i < argumentsLenIn; i ++) { arguments.push_back(argumentsIn[i]); } + vector> 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 argumentsPtrs; + argumentsPtrs.reserve(arguments.size()); for (auto& argument : arguments) { argumentsPtrs.push_back(argument.c_str()); @@ -490,6 +494,7 @@ void CorePlatform::AdjustTypeParserInput( ) { vector 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> Platform::GetRelatedPlatforms() BNPlatform** related = BNGetRelatedPlatforms(m_object, &count); std::vector> 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> Platform::GetTypeLibraries() BNTypeLibrary** libs = BNGetPlatformTypeLibraries(m_object, &count); vector> 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> Platform::GetTypeLibrariesByName(const std::string& nam BNTypeLibrary** libs = BNGetPlatformTypeLibrariesByName(m_object, name.c_str(), &count); vector> 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 RepoPlugin::GetPluginTypes() const size_t count; BNPluginType* pluginTypesPtr = BNPluginGetPluginTypes(m_object, &count); vector pluginTypes; + pluginTypes.reserve(count); for (size_t i = 0; i < count; i++) { pluginTypes.push_back((PluginType)pluginTypesPtr[i]); @@ -170,6 +171,7 @@ vector RepoPlugin::GetInstallPlatforms() const vector 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> RepositoryManager::GetRepositories() vector> 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> ScriptingProvider::GetList() size_t count; BNScriptingProvider** list = BNGetScriptingProviderList(&count); vector> 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> SecretsProvider::GetList() size_t count; BNSecretsProvider** list = BNGetSecretsProviderList(&count); std::vector> 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 Type::GetAttributes() const size_t count = 0; BNTypeAttribute* attributes = BNGetTypeAttributes(m_object, &count); std::vector 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 TypeBuilder::GetAttributes() const size_t count; BNTypeAttribute* attributes = BNGetTypeBuilderAttributes(m_object, &count); std::vector 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 TypeArchive::GetAllSnapshotIds() const throw ExceptionWithStackTrace("BNGetTypeArchiveAllSnapshotIds"); std::vector result; + result.reserve(count); for (size_t i = 0; i < count; i ++) { result.push_back(ids[i]); @@ -195,6 +196,7 @@ std::vector TypeArchive::GetSnapshotParentIds(const std::string& id throw ExceptionWithStackTrace("BNGetTypeArchiveSnapshotParentIds"); std::vector result; + result.reserve(count); for (size_t i = 0; i < count; i ++) { result.push_back(ids[i]); @@ -213,6 +215,7 @@ std::vector TypeArchive::GetSnapshotChildIds(const std::string& id) throw ExceptionWithStackTrace("BNGetTypeArchiveSnapshotChildIds"); std::vector result; + result.reserve(count); for (size_t i = 0; i < count; i ++) { result.push_back(ids[i]); @@ -348,6 +351,7 @@ std::vector TypeArchive::GetTypeIds(std::string snapshot) const throw ExceptionWithStackTrace("BNGetTypeArchiveTypeIds"); std::vector result; + result.reserve(count); for (size_t i = 0; i < count; ++i) { result.push_back(ids[i]); @@ -367,6 +371,7 @@ std::vector TypeArchive::GetTypeNames(std::string snapshot) const throw ExceptionWithStackTrace("BNGetTypeArchiveTypeNames"); std::vector 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 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> TypeParser::GetList() size_t count; BNTypeParser** list = BNGetTypeParserList(&count); vector> 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 TypeParser::ParseOptionsText(const std::string& options char** options = BNParseTypeParserOptionsText(optionsText.c_str(), &count); std::vector 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 optionsCpp; + optionsCpp.reserve(optionCount); for (size_t i = 0; i < optionCount; i ++) { optionsCpp.push_back(options[i]); } vector 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 optionsCpp; + optionsCpp.reserve(optionCount); for (size_t i = 0; i < optionCount; i ++) { optionsCpp.push_back(options[i]); } vector 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>> 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> TypePrinter::GetList() size_t count; BNTypePrinter** list = BNGetTypePrinterList(&count); vector> 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 CoreTypePrinter::GetTypeLines(Ref type, return {}; vector 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>> BinaryNinja::Unicode::Ge for (size_t i = 0; i < blockListCounts; i ++) { std::vector> 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> WebsocketProvider::GetList() size_t count; BNWebsocketProvider** list = BNGetWebsocketProviderList(&count); vector> result; + result.reserve(count); for (size_t i = 0; i < count; i++) result.push_back(new CoreWebsocketProvider(list[i])); BNFreeWebsocketProviderList(list); -- cgit v1.3.1