// SPDX-License-Identifier: GPL-2.0 // Convenience classes defining owning pointers to C-objects that // automatically clean up the objects if the pointers go out of // scope. Based on unique_ptr<>. // In the future, we should replace these by real destructors. #ifndef OWNING_PTR_H #define OWNING_PTR_H #include #include struct dive; struct dive_trip; struct dive_site; struct event; extern "C" void free_dive(struct dive *); extern "C" void free_trip(struct dive_trip *); extern "C" void free_dive_site(struct dive_site *); // Classes used to automatically call the appropriate free_*() function for owning pointers that go out of scope. struct DiveDeleter { void operator()(dive *d) { free_dive(d); } }; struct TripDeleter { void operator()(dive_trip *t) { free_trip(t); } }; struct DiveSiteDeleter { void operator()(dive_site *ds) { free_dive_site(ds); } }; struct EventDeleter { void operator()(event *ev) { free(ev); } }; // Owning pointers to dive, dive_trip, dive_site and event objects. using OwningDivePtr = std::unique_ptr; using OwningTripPtr = std::unique_ptr; using OwningDiveSitePtr = std::unique_ptr; using OwningEventPtr = std::unique_ptr; #endif