mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: replace divesite_table_t by a vector of std::unique_ptr<>s
This is a long commit, because it introduces a new abstraction: a general std::vector<> of std::unique_ptrs<>. Moreover, it replaces a number of pointers by C++ references, when the callee does not suppoert null objects. This simplifies memory management and makes ownership more explicit. It is a proof-of-concept and a test-bed for the other core data structrures. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
411188728d
commit
e39dea3d68
41 changed files with 451 additions and 426 deletions
|
@ -22,14 +22,12 @@ divelog::divelog() :
|
|||
{
|
||||
*dives = empty_dive_table;
|
||||
*trips = empty_trip_table;
|
||||
*sites = empty_dive_site_table;
|
||||
}
|
||||
|
||||
divelog::~divelog()
|
||||
{
|
||||
clear_dive_table(dives);
|
||||
clear_trip_table(trips);
|
||||
clear_dive_site_table(sites);
|
||||
delete dives;
|
||||
delete trips;
|
||||
delete sites;
|
||||
|
@ -40,16 +38,14 @@ divelog::~divelog()
|
|||
divelog::divelog(divelog &&log) :
|
||||
dives(new dive_table),
|
||||
trips(new trip_table),
|
||||
sites(new dive_site_table),
|
||||
sites(new dive_site_table(std::move(*log.sites))),
|
||||
devices(new device_table),
|
||||
filter_presets(new filter_preset_table)
|
||||
{
|
||||
*dives = empty_dive_table;
|
||||
*trips = empty_trip_table;
|
||||
*sites = empty_dive_site_table;
|
||||
move_dive_table(log.dives, dives);
|
||||
move_trip_table(log.trips, trips);
|
||||
move_dive_site_table(log.sites, sites);
|
||||
*devices = std::move(*log.devices);
|
||||
*filter_presets = std::move(*log.filter_presets);
|
||||
}
|
||||
|
@ -58,7 +54,7 @@ struct divelog &divelog::operator=(divelog &&log)
|
|||
{
|
||||
move_dive_table(log.dives, dives);
|
||||
move_trip_table(log.trips, trips);
|
||||
move_dive_site_table(log.sites, sites);
|
||||
*sites = std::move(*log.sites);
|
||||
*devices = std::move(*log.devices);
|
||||
*filter_presets = std::move(*log.filter_presets);
|
||||
return *this;
|
||||
|
@ -82,8 +78,7 @@ void divelog::clear()
|
|||
{
|
||||
while (dives->nr > 0)
|
||||
delete_single_dive(this, dives->nr - 1);
|
||||
while (sites->nr)
|
||||
delete_dive_site(get_dive_site(0, sites), sites);
|
||||
sites->clear();
|
||||
if (trips->nr != 0) {
|
||||
report_info("Warning: trip table not empty in divelog::clear()!");
|
||||
trips->nr = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue