GCC Code Coverage Report


Directory: libimgdoc2/
File: libimgdoc2/inc/ICreateOptions.h
Date: 2025-02-03 12:41:04
Exec Total Coverage
Lines: 4 4 100.0%
Functions: 2 2 100.0%
Branches: 0 0 -%

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 <string>
8 #include <unordered_set>
9 #include "types.h"
10 #include "DocumentType.h"
11
12 namespace imgdoc2
13 {
14 /// Options for creating an imgdoc2-document.
15 class ICreateOptions
16 {
17 public:
18 /// Sets the document type. Note that a newly created instance will have the document type "kImage2d2".
19 /// \param document_type Type of the document.
20 virtual void SetDocumentType(imgdoc2::DocumentType document_type) = 0;
21
22 /// Sets the filename. For a Sqlite-based database, this string allows for additional functionality
23 /// (like an in-memory database) - cf. https://sqlite.org/inmemorydb.html, https://sqlite.org/uri.html.
24 /// The string must be given in UTF-8 encoding.
25 ///
26 /// \param filename The filename (in UTF8-encoding).
27 virtual void SetFilename(const char* filename) = 0;
28
29 /// Adds a dimension.
30 /// Adding the same dimension multiple times is valid, no error is reported in this case.
31 /// If the argument 'dim' is not a valid dimension identifier, an "invalid_argument" exception
32 /// will be thrown.
33 /// \param dim The dimension to add.
34 virtual void AddDimension(imgdoc2::Dimension dim) = 0;
35
36 /// Sets a flag indicating whether the database should be created containing a spatial index.
37 /// \param use_spatial_index True if to construct with a spatial index.
38 virtual void SetUseSpatialIndex(bool use_spatial_index) = 0;
39
40 /// Adds a dimension for which an index is to be created.
41 /// Adding the same dimension multiple times is valid, no error is reported in this case.
42 /// If the argument 'dim' is not a valid dimension identifier, an "invalid_argument" exception
43 /// will be thrown.
44 /// \param dim The dimension for which to create an index.
45 virtual void AddIndexForDimension(imgdoc2::Dimension dim) = 0;
46
47 /// Sets a flag indicating whether a BLOB table is to be constructed. Only if a BLOB table is present, the storage-type "BlobInDatabase" can be used.
48 /// \param create_blob_table True to create BLOB table.
49 virtual void SetCreateBlobTable(bool create_blob_table) = 0;
50
51 /// Gets the document type.
52 /// \returns The document type.
53 [[nodiscard]] virtual imgdoc2::DocumentType GetDocumentType() const = 0;
54
55 /// Whether the document should be created with a spatial index.
56 /// \returns True if a spatial index is requested; false otherwise.
57 [[nodiscard]] virtual bool GetUseSpatialIndex() const = 0;
58
59 /// Gets the filename. The returned string is given in UTF8-encoding.
60 /// \returns The filename.
61 [[nodiscard]] virtual const std::string& GetFilename() const = 0;
62
63 /// Gets the dimensions.
64 /// \returns The dimensions.
65 [[nodiscard]] virtual const std::unordered_set<imgdoc2::Dimension>& GetDimensions() const = 0;
66
67 /// Gets dimensions for which an index is to be created.
68 /// \returns The indexed dimensions.
69 [[nodiscard]] virtual const std::unordered_set<imgdoc2::Dimension>& GetIndexedDimensions() const = 0;
70
71 /// Gets a boolean indicating whether a blob table is to be created.
72 /// \returns True if a blob table is to be created; false otherwise.
73 [[nodiscard]] virtual bool GetCreateBlobTable() const = 0;
74
75 516 virtual ~ICreateOptions() = default;
76
77 /// Sets the filename. For a Sqlite-based database, this string allows for additional functionality
78 /// (like an in-memory database) - cf. https://sqlite.org/inmemorydb.html, https://sqlite.org/uri.html.
79 /// The string must be given in UTF-8 encoding.
80 ///
81 /// \param filename The filename (in UTF8-encoding).
82 4 void SetFilename(const std::string& filename)
83 {
84 4 this->SetFilename(filename.c_str());
85 4 }
86 public:
87 /// Adds the dimensions from the specified iterator.
88 /// \tparam ForwardIterator Type of the forward iterator.
89 /// \param start The start.
90 /// \param end The end.
91 template<class ForwardIterator>
92 void AddDimensions(ForwardIterator start, ForwardIterator end)
93 {
94 while (start != end)
95 {
96 this->AddDimension(*start++);
97 }
98 }
99 };
100 }
101