libimgdoc2
Loading...
Searching...
No Matches
TileCoordinate.h
1// SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <algorithm>
8#include <map>
9#include <vector>
10#include "ITileCoordinate.h"
11
12namespace imgdoc2
13{
16 {
17 imgdoc2::Dimension dimension;
18 int value;
19 };
20
23 {
24 private:
25 std::vector<DimensionAndValue> coordinates;
26 public:
29
34 explicit TileCoordinate(size_t reservedCapacity)
35 {
36 this->coordinates.reserve(reservedCapacity);
37 }
38
41 TileCoordinate(std::initializer_list<DimensionAndValue> list) : TileCoordinate(list.size())
42 {
43 for (auto d : list)
44 {
45 this->TileCoordinate::Set(d.dimension, d.value);
46 }
47 }
48
50 void Set(imgdoc2::Dimension d, int value) override
51 {
52 const auto it = std::find_if(
53 this->coordinates.begin(),
54 this->coordinates.end(),
55 [=](const DimensionAndValue& s) -> bool
56 {
57 return s.dimension == d;
58 });
59 if (it != this->coordinates.end())
60 {
61 it->value = value;
62 }
63 else
64 {
65 this->coordinates.push_back(DimensionAndValue{ d, value });
66 }
67 }
68
70 void Clear() override
71 {
72 this->coordinates.clear();
73 }
74
75 public:
76 bool TryGetCoordinate(imgdoc2::Dimension dim, int* coordVal) const override
77 {
78 const auto it = std::find_if(this->coordinates.cbegin(), this->coordinates.cend(), [=](const DimensionAndValue& s) { return s.dimension == dim; });
79 if (it != this->coordinates.cend())
80 {
81 if (coordVal != nullptr)
82 {
83 *coordVal = it->value;
84 }
85
86 return true;
87 }
88
89 return false;
90 }
91
92 void EnumCoordinates(const std::function<bool(imgdoc2::Dimension, int)>& f) const override
93 {
94 for (auto it = this->coordinates.cbegin(); it != this->coordinates.cend(); ++it)
95 {
96 const bool b = f(it->dimension, it->value);
97 if (b == false)
98 {
99 break;
100 }
101 }
102 }
103 };
104}
This interface provides modify access to the object and allows to mutate the object.
Definition: ITileCoordinate.h:145
Implementation of "tile coordinate object".
Definition: TileCoordinate.h:23
void EnumCoordinates(const std::function< bool(imgdoc2::Dimension, int)> &f) const override
Definition: TileCoordinate.h:92
void Clear() override
Clears this object to its blank/initial state.
Definition: TileCoordinate.h:70
void Set(imgdoc2::Dimension d, int value) override
Definition: TileCoordinate.h:50
TileCoordinate(size_t reservedCapacity)
Definition: TileCoordinate.h:34
TileCoordinate()
Default constructor, this reserves size for 5 dimensions.
Definition: TileCoordinate.h:28
TileCoordinate(std::initializer_list< DimensionAndValue > list)
Definition: TileCoordinate.h:41
bool TryGetCoordinate(imgdoc2::Dimension dim, int *coordVal) const override
Definition: TileCoordinate.h:76
A structure combining a dimension and a value.
Definition: TileCoordinate.h:16
imgdoc2::Dimension dimension
The dimension.
Definition: TileCoordinate.h:17
int value
The value (for this dimension).
Definition: TileCoordinate.h:18