IOLink  IOL_v1.1.0_release
ImageView.h
1 #pragma once
2 
3 #include <memory>
4 
5 #include <iolink/DataType.h>
6 #include <iolink/FlagSet.h>
7 #include <iolink/IOLinkAPI.h>
8 #include <iolink/Indexer.h>
9 #include <iolink/RegionX.h>
10 #include <iolink/VectorX.h>
11 #include <iolink/metadata/MetadataNode.h>
12 #include <iolink/property/ImageProperties.h>
13 #include <iolink/view/View.h>
14 
15 namespace iolink
16 {
17 
21 enum class ImageCapability
22 {
23  // Flags
24  READ = 0x1,
25  WRITE = 0x2,
26  RESHAPE = 0x4,
27  MEMORY_ACCESS = 0x8,
28 
29  // Combinations
30  READ_WRITE = 0x3,
31 };
32 
33 extern template class IOLINK_API_IMPORT FlagSet<ImageCapability>;
34 
39 
40 // Define bitwise operators for ImageCapability
41 IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(ImageCapability)
42 
43 
67 class IOLINK_API ImageView : public View
68 {
69 
70 public:
71  virtual ~ImageView() = default;
72 
76  inline size_t dimensionCount() { return this->shape().size(); }
77 
81  inline bool support(ImageCapabilitySet flags) { return this->capabilities().has(flags); }
82 
86  virtual ImageCapabilitySet capabilities() const = 0;
87 
99  virtual const VectorXu64& shape() = 0;
100 
104  virtual DataType dataType() = 0;
105 
109  virtual std::shared_ptr<const ImageProperties> properties() = 0;
110 
114  std::string toString() const;
115 
116  // ==== //
117  // READ //
118  // ==== //
119 
127  virtual std::shared_ptr<const MetadataNode> metadata() const;
128 
140  virtual void read(const VectorXu64& index, void* dst);
141 
152  virtual void readRegion(const RegionXu64& region, void* dst);
153 
154  // ===== //
155  // WRITE //
156  // ===== //
157 
165  virtual void setProperties(std::shared_ptr<const ImageProperties> properties);
166 
174  virtual void setMetadata(std::shared_ptr<MetadataNode> metadata);
175 
187  virtual void write(const VectorXu64& index, const void* src);
188 
199  virtual void writeRegion(const RegionXu64& region, const void* src);
200 
201  // ======= //
202  // RESHAPE //
203  // ======= //
204 
217  virtual void reshape(const VectorXu64& shape, DataType dataType);
218 
219  // ============= //
220  // MEMORY_ACCESS //
221  // ============= //
222 
230  virtual const Indexer& indexer();
231 
239  virtual void* buffer();
240 
248  virtual const void* bufferReadOnly() const;
249 
257  virtual size_t bufferSize();
258 };
259 
260 } // namespace iolink