From aeafe3451da2da31ef9e7064fe7138b6b3df1e82 Mon Sep 17 00:00:00 2001 From: Gerorge Liao Date: Mon, 27 Nov 2023 14:42:51 +0100 Subject: [PATCH] [virtual machine] added variadic templated function load_snapshot_and_optionally_update_unique_identifiers to reduce the repeated code. --- .../backends/shared/base_virtual_machine.cpp | 30 ++++++------------- .../backends/shared/base_virtual_machine.h | 8 ++--- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/platform/backends/shared/base_virtual_machine.cpp b/src/platform/backends/shared/base_virtual_machine.cpp index b04a77355ed..9daa1d6cc3c 100644 --- a/src/platform/backends/shared/base_virtual_machine.cpp +++ b/src/platform/backends/shared/base_virtual_machine.cpp @@ -366,7 +366,9 @@ void BaseVirtualMachine::load_snapshots_common(const std::function void { load_snapshot(file_path); }); + load_snapshots_common([this](const QString& file_path) -> void { + load_snapshot_and_optionally_update_unique_identifiers(file_path); + }); } void BaseVirtualMachine::load_snapshots_and_update_unique_identifiers(const VMSpecs& src_specs, @@ -375,7 +377,7 @@ void BaseVirtualMachine::load_snapshots_and_update_unique_identifiers(const VMSp { load_snapshots_common([this, &src_specs, &dest_specs, &src_vm_name](const QString& file_path) -> void { - load_snapshot_and_update_unique_identifiers(file_path, src_specs, dest_specs, src_vm_name); + load_snapshot_and_optionally_update_unique_identifiers(file_path, src_specs, dest_specs, src_vm_name); }); } @@ -428,27 +430,13 @@ void BaseVirtualMachine::log_latest_snapshot(LockT lock) const } } -void BaseVirtualMachine::load_snapshot(const QString& filename) -{ - auto snapshot = make_specific_snapshot(filename); - const auto& name = snapshot->get_name(); - auto [it, success] = snapshots.try_emplace(name, snapshot); - - if (!success) - { - mpl::log(mpl::Level::warning, vm_name, fmt::format("Snapshot name taken: {}", name)); - throw SnapshotNameTakenException{vm_name, name}; - } -} - -void BaseVirtualMachine::load_snapshot_and_update_unique_identifiers(const QString& filename, - const VMSpecs& src_specs, - const VMSpecs& dest_specs, - const std::string& src_vm_name) +template +void BaseVirtualMachine::load_snapshot_and_optionally_update_unique_identifiers(const QString& file_path, + Args&&... args) { - auto snapshot = make_specific_snapshot(filename, src_specs, dest_specs, src_vm_name); + const auto snapshot = make_specific_snapshot(file_path, std::forward(args)...); const auto& name = snapshot->get_name(); - auto [it, success] = snapshots.try_emplace(name, snapshot); + const auto [it, success] = snapshots.try_emplace(name, snapshot); if (!success) { diff --git a/src/platform/backends/shared/base_virtual_machine.h b/src/platform/backends/shared/base_virtual_machine.h index 3b0507bb06a..4e2f34f0d30 100644 --- a/src/platform/backends/shared/base_virtual_machine.h +++ b/src/platform/backends/shared/base_virtual_machine.h @@ -92,11 +92,9 @@ class BaseVirtualMachine : public VirtualMachine void log_latest_snapshot(LockT lock) const; void load_generic_snapshot_info(); - void load_snapshot(const QString& filename); - void load_snapshot_and_update_unique_identifiers(const QString& filename, - const VMSpecs& src_specs, - const VMSpecs& dest_specs, - const std::string& src_vm_name); + + template + void load_snapshot_and_optionally_update_unique_identifiers(const QString& file_path, Args&&... args); auto make_take_snapshot_rollback(SnapshotMap::iterator it); void take_snapshot_rollback_helper(SnapshotMap::iterator it, std::shared_ptr& old_head, int old_count);