IOLink  IOL_v1.6.1_release
ImageType.h
1 #pragma once
2 
3 #include <cstdint>
4 #include <initializer_list>
5 #include <string>
6 
7 #include <iolink/IOLinkAPI.h>
8 
9 namespace iolink
10 {
11 
15 enum class ImageDimension
16 {
18  COLUMN = 0,
20  ROW = 1,
22  SLICE = 2,
24  CHANNEL = 3,
26  SEQUENCE = 4,
27 };
28 
39 class IOLINK_API ImageType
40 {
41 public:
45  ImageType();
46 
50  explicit ImageType(ImageDimension dimension);
51 
55  explicit ImageType(const ImageDimension* dimensionsList, size_t count);
56 
60  explicit ImageType(std::initializer_list<ImageDimension> dimensionsList);
61 
65  explicit ImageType(uint64_t val);
66 
72  bool has(ImageDimension dimension) const;
73 
78  void add(ImageDimension dimension);
79 
83  size_t dimensionCount() const;
84 
89  void add(ImageType other);
90 
95  void remove(ImageDimension dimension);
96 
101  void remove(size_t index);
102 
107  void remove(ImageType other);
108 
121  ImageDimension dimension(size_t index) const;
122 
134  size_t indexDimension(ImageDimension dimension);
135 
141  ImageType operator|(ImageDimension rhs) const;
142 
148  bool operator==(ImageType other) const;
149 
155  bool operator!=(ImageType other) const;
156 
164  {
165  return ImageType(dimensionFlag(lhs) | dimensionFlag(rhs));
166  }
167 
174  friend ImageType operator|(ImageDimension lhs, ImageType rhs) { return rhs | lhs; }
175 
179  std::string toString() const;
180 
184  uint64_t value() const;
185 
186 private:
187  static uint64_t dimensionFlag(ImageDimension dimension);
188 
189  uint64_t m_value;
190 };
191 
202 class IOLINK_API ImageTypeId
203 {
204 public:
206  static const ImageType UNKNOWN;
208  static const ImageType IMAGE;
211  static const ImageType VOLUME;
220  static const ImageType IMAGE_SEQUENCE;
231 };
232 
233 } // end namespace iolink