libimgdoc2
Loading...
Searching...
No Matches
BlobOutputImplementations.h
1// SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <cstring>
8#include <cstdint>
9#include <memory>
10#include <exception>
11#include "../IBlobOutput.h"
12
13namespace imgdoc2
14{
20 {
21 private:
22 std::uint8_t* buffer_{ nullptr };
23 size_t buffer_size_{ 0 };
24 bool is_reserved_{ false };
25 public:
28 {
29 free(this->buffer_);
30 }
31
33 [[nodiscard]] bool Reserve(size_t s) override
34 {
35 if (this->is_reserved_)
36 {
37 throw std::logic_error("This instance has already been initialized.");
38 }
39
40 this->buffer_ = static_cast<uint8_t*>(malloc(s));
41 this->buffer_size_ = s;
42 this->is_reserved_ = true;
43 return true;
44 }
45
47 [[nodiscard]] bool SetData(size_t offset, size_t size, const void* data) override
48 {
49 if (!this->is_reserved_)
50 {
51 throw std::logic_error("'Reserve' was not called before.");
52 }
53
54 if (offset + size > this->buffer_size_)
55 {
56 throw std::invalid_argument("out-of-bounds");
57 }
58
59 memcpy(this->buffer_ + offset, data, size);
60 return true;
61 }
62 public:
66 [[nodiscard]] bool GetHasData() const { return this->is_reserved_; }
67
71 [[nodiscard]] const std::uint8_t* GetDataC() const { return this->buffer_; }
72
76 [[nodiscard]] std::uint8_t* GetData() { return this->buffer_; }
77
80 [[nodiscard]] size_t GetSizeOfData() const { return this->buffer_size_; }
81 public:
82 // no copy and no move
83 BlobOutputOnHeap() = default;
84 BlobOutputOnHeap(const BlobOutputOnHeap&) = delete; // copy constructor
85 BlobOutputOnHeap& operator=(const BlobOutputOnHeap&) = delete; // copy assignment
86 BlobOutputOnHeap(BlobOutputOnHeap&&) = delete; // move constructor
87 BlobOutputOnHeap& operator=(BlobOutputOnHeap&&) = delete; // move assignment
88 };
89}
implementation of the IBlobOutput interface
Definition: BlobOutputImplementations.h:20
const std::uint8_t * GetDataC() const
Definition: BlobOutputImplementations.h:71
bool SetData(size_t offset, size_t size, const void *data) override
Definition: BlobOutputImplementations.h:47
size_t GetSizeOfData() const
Definition: BlobOutputImplementations.h:80
std::uint8_t * GetData()
Definition: BlobOutputImplementations.h:76
~BlobOutputOnHeap() override
Destructor which releases the allocated memory.
Definition: BlobOutputImplementations.h:27
bool GetHasData() const
Definition: BlobOutputImplementations.h:66
bool Reserve(size_t s) override
Definition: BlobOutputImplementations.h:33
interface for outputting binary data
Definition: IBlobOutput.h:16