mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: use std::unique_ptr<> to make ownership transfer more clear
The decostate was generated in the main thread and passed down to a worker thread. To make that explicit, use an std::unique_ptr<> and std::move(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
d594cc72f0
commit
541abf7ae4
2 changed files with 8 additions and 10 deletions
|
@ -1081,12 +1081,9 @@ void DivePlannerPointsModel::updateDiveProfile()
|
||||||
#ifdef VARIATIONS_IN_BACKGROUND
|
#ifdef VARIATIONS_IN_BACKGROUND
|
||||||
// Since we're calling computeVariations asynchronously and plan_deco_state is allocated
|
// Since we're calling computeVariations asynchronously and plan_deco_state is allocated
|
||||||
// on the stack, it must be copied and freed by the worker-thread.
|
// on the stack, it must be copied and freed by the worker-thread.
|
||||||
struct deco_state *plan_deco_state_copy = new deco_state(plan_deco_state);
|
auto plan_deco_state_copy = std::make_unique<deco_state>(plan_deco_state);
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
QtConcurrent::run([this, plan_copy, &plan_deco_state_copy] ()
|
||||||
QtConcurrent::run(&DivePlannerPointsModel::computeVariationsFreeDeco, this, plan_copy, plan_deco_state_copy);
|
{ this->computeVariationsFreeDeco(plan_copy, std::move(plan_deco_state_copy)); });
|
||||||
#else
|
|
||||||
QtConcurrent::run(this, &DivePlannerPointsModel::computeVariationsFreeDeco, plan_copy, plan_deco_state_copy);
|
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
computeVariations(plan_copy, &plan_deco_state);
|
computeVariations(plan_copy, &plan_deco_state);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1171,10 +1168,10 @@ int DivePlannerPointsModel::analyzeVariations(struct decostop *min, struct decos
|
||||||
return (leftsum + rightsum) / 2;
|
return (leftsum + rightsum) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivePlannerPointsModel::computeVariationsFreeDeco(struct diveplan *original_plan, struct deco_state *previous_ds)
|
void DivePlannerPointsModel::computeVariationsFreeDeco(struct diveplan *original_plan, std::unique_ptr<struct deco_state> previous_ds)
|
||||||
{
|
{
|
||||||
computeVariations(original_plan, previous_ds);
|
computeVariations(original_plan, previous_ds.get());
|
||||||
delete previous_ds;
|
// Note: previous ds automatically free()d by virtue of being a unique_ptr.
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivePlannerPointsModel::computeVariations(struct diveplan *original_plan, const struct deco_state *previous_ds)
|
void DivePlannerPointsModel::computeVariations(struct diveplan *original_plan, const struct deco_state *previous_ds)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "core/deco.h"
|
#include "core/deco.h"
|
||||||
|
@ -132,7 +133,7 @@ private:
|
||||||
struct divedatapoint *cloneDiveplan(struct diveplan *plan_src, struct diveplan *plan_copy);
|
struct divedatapoint *cloneDiveplan(struct diveplan *plan_src, struct diveplan *plan_copy);
|
||||||
void computeVariationsDone(QString text);
|
void computeVariationsDone(QString text);
|
||||||
void computeVariations(struct diveplan *diveplan, const struct deco_state *ds);
|
void computeVariations(struct diveplan *diveplan, const struct deco_state *ds);
|
||||||
void computeVariationsFreeDeco(struct diveplan *diveplan, struct deco_state *ds);
|
void computeVariationsFreeDeco(struct diveplan *diveplan, std::unique_ptr<struct deco_state> ds);
|
||||||
int analyzeVariations(struct decostop *min, struct decostop *mid, struct decostop *max, const char *unit);
|
int analyzeVariations(struct decostop *min, struct decostop *mid, struct decostop *max, const char *unit);
|
||||||
struct dive *d;
|
struct dive *d;
|
||||||
int dcNr;
|
int dcNr;
|
||||||
|
|
Loading…
Add table
Reference in a new issue