Skip to content

Commit

Permalink
[virtual machine] added variadic templated function load_snapshot_and…
Browse files Browse the repository at this point in the history
…_optionally_update_unique_identifiers to reduce the repeated code.
  • Loading branch information
georgeliao committed Nov 27, 2023
1 parent 1d06601 commit aeafe34
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 26 deletions.
30 changes: 9 additions & 21 deletions src/platform/backends/shared/base_virtual_machine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,9 @@ void BaseVirtualMachine::load_snapshots_common(const std::function<void(const QS

void BaseVirtualMachine::load_snapshots()
{
load_snapshots_common([this](const QString& file_path) -> 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,
Expand All @@ -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);
});
}

Expand Down Expand Up @@ -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 <typename... Args>
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>(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)
{
Expand Down
8 changes: 3 additions & 5 deletions src/platform/backends/shared/base_virtual_machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <typename... Args>
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<Snapshot>& old_head, int old_count);

Expand Down

0 comments on commit aeafe34

Please sign in to comment.