diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-06-26 17:21:03 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-07-18 06:01:07 -0700 |
commit | a5e7f4253ac98ad18354973fda7049e9daaea8eb (patch) | |
tree | 16b95a18d0a1af296e4645d6b7a204b5b325ff01 /desktop-widgets/command_edit.cpp | |
parent | efdb3503eadd7e47cb64b1c252e50488d2e9d0fe (diff) | |
download | subsurface-a5e7f4253ac98ad18354973fda7049e9daaea8eb.tar.gz |
Core: dynamically resize weight table
Replace the fixed-size weightsystem table by a dynamically
relocated table. Reuse the table-macros used in other parts
of the code.
The table stores weightsystem entries, not pointers to
weightsystems. Thus, ownership of the description string is
taken when adding a weightsystem. An extra function adds
a cloned weightsystem at the end of the table.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/command_edit.cpp')
-rw-r--r-- | desktop-widgets/command_edit.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/desktop-widgets/command_edit.cpp b/desktop-widgets/command_edit.cpp index df22552e7..6f69f8d8a 100644 --- a/desktop-widgets/command_edit.cpp +++ b/desktop-widgets/command_edit.cpp @@ -654,7 +654,7 @@ PasteState::PasteState(dive *dIn, const dive *data, dive_components what) : d(dI tags(nullptr) { memset(&cylinders[0], 0, sizeof(cylinders)); - memset(&weightsystems[0], 0, sizeof(weightsystems)); + clear_weightsystem_table(&weightsystems); if (what.notes) notes = data->notes; if (what.divemaster) @@ -675,12 +675,8 @@ PasteState::PasteState(dive *dIn, const dive *data, dive_components what) : d(dI for (int i = 0; i < MAX_CYLINDERS; ++i) copy_cylinder(data->cylinder[i], cylinders[i]); } - if (what.weights) { - for (int i = 0; i < MAX_WEIGHTSYSTEMS; ++i) { - weightsystems[i] = data->weightsystem[i]; - weightsystems[i].description = copy_string(data->weightsystem[i].description); - } - } + if (what.weights) + copy_weights(&data->weightsystems, &weightsystems); } PasteState::~PasteState() @@ -688,8 +684,8 @@ PasteState::~PasteState() taglist_free(tags); for (cylinder_t &c: cylinders) free((void *)c.type.description); - for (weightsystem_t &w: weightsystems) - free((void *)w.description); + clear_weightsystem_table(&weightsystems); + free(weightsystems.weightsystems); } void PasteState::swap(dive_components what) @@ -713,7 +709,7 @@ void PasteState::swap(dive_components what) if (what.cylinders) std::swap(cylinders, d->cylinder); if (what.weights) - std::swap(weightsystems, d->weightsystem); + std::swap(weightsystems, d->weightsystems); } // ***** Paste ***** |