diff options
| author | Scott Lagler <laglerscott@gmail.com> | 2025-12-12 19:20:21 -0500 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2025-12-16 17:45:24 -0500 |
| commit | 6138978808829172448615980742756831959788 (patch) | |
| tree | 746bb0a634c139967c1755dcbcfb8c3395b97ff5 | |
| parent | 3967000448807875468673398445854536525610 (diff) | |
Add more reserve calls
| -rw-r--r-- | architecture.cpp | 3 | ||||
| -rw-r--r-- | binaryview.cpp | 7 | ||||
| -rw-r--r-- | collaboration.cpp | 6 | ||||
| -rw-r--r-- | database.cpp | 5 | ||||
| -rw-r--r-- | debuginfo.cpp | 8 | ||||
| -rw-r--r-- | demangle.cpp | 1 | ||||
| -rw-r--r-- | downloadprovider.cpp | 1 | ||||
| -rw-r--r-- | enterprise.cpp | 1 | ||||
| -rw-r--r-- | filemetadata.cpp | 2 | ||||
| -rw-r--r-- | flowgraph.cpp | 1 | ||||
| -rw-r--r-- | highlevelilinstruction.cpp | 1 | ||||
| -rw-r--r-- | interaction.cpp | 2 | ||||
| -rw-r--r-- | linearviewcursor.cpp | 2 | ||||
| -rw-r--r-- | lineformatter.cpp | 1 | ||||
| -rw-r--r-- | mediumlevelilinstruction.cpp | 1 | ||||
| -rw-r--r-- | platform.cpp | 8 | ||||
| -rw-r--r-- | pluginmanager.cpp | 3 | ||||
| -rw-r--r-- | scriptingprovider.cpp | 1 | ||||
| -rw-r--r-- | secretsprovider.cpp | 1 | ||||
| -rw-r--r-- | type.cpp | 2 | ||||
| -rw-r--r-- | typearchive.cpp | 6 | ||||
| -rw-r--r-- | typeparser.cpp | 6 | ||||
| -rw-r--r-- | typeprinter.cpp | 4 | ||||
| -rw-r--r-- | unicode.cpp | 1 | ||||
| -rw-r--r-- | websocketprovider.cpp | 1 |
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); @@ -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); |
