From fe82cb32b93e906b9bf53010538651b9c84df9db Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Fri, 17 Apr 2020 16:49:15 +0200 Subject: media: add small C++ helper describing a picture struct By using a std::string instead of a C-string, memory management becomes so much simpler! This class will be used for keeping track of deleted/added pictures in the undo system. Signed-off-by: Berthold Stoeger --- core/CMakeLists.txt | 2 ++ core/pictureobj.cpp | 27 +++++++++++++++++++++++++++ core/pictureobj.h | 25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 core/pictureobj.cpp create mode 100644 core/pictureobj.h (limited to 'core') diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 7699877bc..4a498cde8 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -127,6 +127,8 @@ set(SUBSURFACE_CORE_LIB_SRCS parse.h picture.c picture.h + pictureobj.cpp + pictureobj.h planner.c planner.h plannernotes.c diff --git a/core/pictureobj.cpp b/core/pictureobj.cpp new file mode 100644 index 000000000..cb6b32675 --- /dev/null +++ b/core/pictureobj.cpp @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "pictureobj.h" +#include "qthelper.h" + +PictureObj::PictureObj() : offset({ 0 }), location({ 0 }) +{ +} + +PictureObj::PictureObj(const picture &pic) : filename(pic.filename), offset(pic.offset), location(pic.location) +{ +} + +picture PictureObj::toCore() const +{ + return picture { + strdup(filename.c_str()), + offset, + location + }; +} + +bool PictureObj::operator<(const PictureObj &p2) const +{ + if (offset.seconds != p2.offset.seconds) + return offset.seconds < p2.offset.seconds; + return strcmp(filename.c_str(), p2.filename.c_str()) < 0; +} diff --git a/core/pictureobj.h b/core/pictureobj.h new file mode 100644 index 000000000..6ea20259b --- /dev/null +++ b/core/pictureobj.h @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0 + +#ifndef PICTUREOBJ_H +#define PICTUREOBJ_H + +// A tiny helper class that represents a struct picture of the core +// It does, however, keep the filename as a std::string so that C++ code +// doesn't have do its own memory-management. + +#include "core/units.h" +#include "core/picture.h" +#include + +struct PictureObj { + std::string filename; + offset_t offset; + location_t location; + + PictureObj(); // Initialize to empty picture. + PictureObj(const picture &pic); // Create from core struct picture. + picture toCore() const; // Turn into core structure. Caller responsible for freeing. + bool operator<(const PictureObj &p2) const; +}; + +#endif // PICTUREOBJ_H -- cgit v1.2.3-70-g09d2