| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH | ||
| 2 | // | ||
| 3 | // SPDX-License-Identifier: MIT | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <utility> | ||
| 8 | #include <memory> | ||
| 9 | #include <imgdoc2.h> | ||
| 10 | #include "document.h" | ||
| 11 | #include "ITileCoordinate.h" | ||
| 12 | |||
| 13 | /// This class implements the IDocWrite3d interface, i.e. write access to a 3D image document. | ||
| 14 | class DocumentWrite3d : public imgdoc2::IDocWrite3d | ||
| 15 | { | ||
| 16 | private: | ||
| 17 | std::shared_ptr < Document> document_; | ||
| 18 | public: | ||
| 19 | 64 | explicit DocumentWrite3d(std::shared_ptr<Document> document) : document_(std::move(document)) | |
| 20 | 64 | {} | |
| 21 | |||
| 22 | imgdoc2::dbIndex AddBrick( | ||
| 23 | const imgdoc2::ITileCoordinate* coordinate, | ||
| 24 | const imgdoc2::LogicalPositionInfo3D* logical_position_3d_info, | ||
| 25 | const imgdoc2::BrickBaseInfo* brick_base_info, | ||
| 26 | imgdoc2::DataTypes data_type, | ||
| 27 | imgdoc2::TileDataStorageType storage_type, | ||
| 28 | const imgdoc2::IDataObjBase* data) override; | ||
| 29 | |||
| 30 | void BeginTransaction() override; | ||
| 31 | void CommitTransaction() override; | ||
| 32 | void RollbackTransaction() override; | ||
| 33 | |||
| 34 | 128 | ~DocumentWrite3d() override = default; | |
| 35 | |||
| 36 | private: | ||
| 37 | imgdoc2::dbIndex AddBrickInternal( | ||
| 38 | const imgdoc2::ITileCoordinate* coordinate, | ||
| 39 | const imgdoc2::LogicalPositionInfo3D* logical_position_info_3d, | ||
| 40 | const imgdoc2::BrickBaseInfo* brick_base_info, | ||
| 41 | imgdoc2::DataTypes data_type, | ||
| 42 | imgdoc2::TileDataStorageType storage_type, | ||
| 43 | const imgdoc2::IDataObjBase* data); | ||
| 44 | |||
| 45 | void AddToSpatialIndex(imgdoc2::dbIndex index, const imgdoc2::LogicalPositionInfo3D& logical_position_info); | ||
| 46 | |||
| 47 | imgdoc2::dbIndex AddBrickData(const imgdoc2::BrickBaseInfo* brick_base_info, imgdoc2::DataTypes data_type, imgdoc2::TileDataStorageType storage_type, const imgdoc2::IDataObjBase* data); | ||
| 48 | imgdoc2::dbIndex AddBlobData(imgdoc2::TileDataStorageType storage_type, const imgdoc2::IDataObjBase* data); | ||
| 49 | |||
| 50 | std::shared_ptr<IDbStatement> CreateInsertDataStatement(const imgdoc2::IDataObjBase* data); | ||
| 51 | public: | ||
| 52 | // no copy and no move (-> https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c21-if-you-define-or-delete-any-copy-move-or-destructor-function-define-or-delete-them-all ) | ||
| 53 | DocumentWrite3d() = default; | ||
| 54 | DocumentWrite3d(const DocumentWrite3d&) = delete; // copy constructor | ||
| 55 | DocumentWrite3d& operator=(const DocumentWrite3d&) = delete; // copy assignment | ||
| 56 | DocumentWrite3d(DocumentWrite3d&&) = delete; // move constructor | ||
| 57 | DocumentWrite3d& operator=(DocumentWrite3d&&) = delete; // move assignment | ||
| 58 | }; | ||
| 59 |