PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
storage_interface.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
18#pragma once
19
21
22#include <kcenon/common/patterns/result.h>
23
24#include <cstddef>
25#include <cstdint>
26#include <memory>
27#include <string>
28#include <string_view>
29#include <vector>
30
31namespace kcenon::pacs::storage {
32
34template <typename T>
36
38using VoidResult = kcenon::common::VoidResult;
39
47 std::size_t total_instances{0};
48
50 std::size_t total_bytes{0};
51
53 std::size_t studies_count{0};
54
56 std::size_t series_count{0};
57
59 std::size_t patients_count{0};
60};
61
94public:
96 virtual ~storage_interface() = default;
97
98 // =========================================================================
99 // CRUD Operations
100 // =========================================================================
101
113 [[nodiscard]] virtual auto store(const core::dicom_dataset& dataset)
114 -> VoidResult = 0;
115
122 [[nodiscard]] virtual auto retrieve(std::string_view sop_instance_uid)
124
133 [[nodiscard]] virtual auto remove(std::string_view sop_instance_uid)
134 -> VoidResult = 0;
135
142 [[nodiscard]] virtual auto exists(std::string_view sop_instance_uid) const
143 -> bool = 0;
144
145 // =========================================================================
146 // Query Operations
147 // =========================================================================
148
160 [[nodiscard]] virtual auto find(const core::dicom_dataset& query)
162
163 // =========================================================================
164 // Batch Operations
165 // =========================================================================
166
178 [[nodiscard]] virtual auto store_batch(
179 const std::vector<core::dicom_dataset>& datasets) -> VoidResult;
180
192 [[nodiscard]] virtual auto retrieve_batch(
193 const std::vector<std::string>& sop_instance_uids)
195
196 // =========================================================================
197 // Maintenance Operations
198 // =========================================================================
199
207 [[nodiscard]] virtual auto get_statistics() const
208 -> storage_statistics = 0;
209
218 [[nodiscard]] virtual auto verify_integrity() -> VoidResult = 0;
219
220protected:
222 storage_interface() = default;
223
226 storage_interface& operator=(const storage_interface&) = delete;
227
230 storage_interface& operator=(storage_interface&&) = default;
231};
232
233} // namespace kcenon::pacs::storage
virtual ~storage_interface()=default
Virtual destructor for proper polymorphic destruction.
virtual auto retrieve_batch(const std::vector< std::string > &sop_instance_uids) -> Result< std::vector< core::dicom_dataset > >
Retrieve multiple DICOM datasets by their SOP Instance UIDs.
virtual auto exists(std::string_view sop_instance_uid) const -> bool=0
Check if a DICOM instance exists.
virtual auto get_statistics() const -> storage_statistics=0
Get storage statistics.
virtual auto retrieve(std::string_view sop_instance_uid) -> Result< core::dicom_dataset >=0
Retrieve a DICOM dataset by SOP Instance UID.
virtual auto find(const core::dicom_dataset &query) -> Result< std::vector< core::dicom_dataset > >=0
Find DICOM datasets matching query criteria.
virtual auto store_batch(const std::vector< core::dicom_dataset > &datasets) -> VoidResult
Store multiple DICOM datasets in a single operation.
virtual auto store(const core::dicom_dataset &dataset) -> VoidResult=0
Store a DICOM dataset.
virtual auto remove(std::string_view sop_instance_uid) -> VoidResult=0
Remove a DICOM dataset by SOP Instance UID.
virtual auto verify_integrity() -> VoidResult=0
Verify storage integrity.
DICOM Dataset - ordered collection of Data Elements.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
std::size_t total_bytes
Total storage size in bytes.
std::size_t patients_count
Number of unique patients.
std::size_t series_count
Number of unique series.
std::size_t studies_count
Number of unique studies.
std::size_t total_instances
Total number of DICOM instances stored.