IOLink  IOL_v1.2.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/TilingInfoExtension.h>
14 #include <iolink/view/View.h>
15 
16 namespace iolink
17 {
18 
22 enum class ImageCapability
23 {
24  // Flags
25  READ = 0x1,
26  WRITE = 0x2,
27  RESHAPE = 0x4,
28  MEMORY_ACCESS = 0x8,
29 
30  // Combinations
31  READ_WRITE = 0x3,
32 };
33 
34 extern template class IOLINK_API_IMPORT FlagSet<ImageCapability>;
35 
40 
41 // Define bitwise operators for ImageCapability
42 IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(ImageCapability)
43 
44 
68 class IOLINK_API ImageView : public View
69 {
70 
71 public:
72  virtual ~ImageView() = default;
73 
77  inline size_t dimensionCount() { return this->shape().size(); }
78 
82  inline bool support(ImageCapabilitySet flags) { return this->capabilities().has(flags); }
83 
87  virtual ImageCapabilitySet capabilities() const = 0;
88 
100  virtual const VectorXu64& shape() = 0;
101 
105  virtual DataType dataType() = 0;
106 
110  virtual std::shared_ptr<const ImageProperties> properties() = 0;
111 
115  std::string toString() const;
116 
117  // ==== //
118  // READ //
119  // ==== //
120 
128  virtual std::shared_ptr<const MetadataNode> metadata() const;
129 
141  virtual void read(const VectorXu64& index, void* dst);
142 
153  virtual void readRegion(const RegionXu64& region, void* dst);
154 
155  // ===== //
156  // WRITE //
157  // ===== //
158 
166  virtual void setProperties(std::shared_ptr<const ImageProperties> properties);
167 
175  virtual void setMetadata(std::shared_ptr<MetadataNode> metadata);
176 
188  virtual void write(const VectorXu64& index, const void* src);
189 
200  virtual void writeRegion(const RegionXu64& region, const void* src);
201 
202  // ======= //
203  // RESHAPE //
204  // ======= //
205 
218  virtual void reshape(const VectorXu64& shape, DataType dataType);
219 
220  // ============= //
221  // MEMORY_ACCESS //
222  // ============= //
223 
231  virtual const Indexer& indexer();
232 
240  virtual void* buffer();
241 
249  virtual const void* bufferReadOnly() const;
250 
258  virtual size_t bufferSize();
259 
260  // ========== //
261  // Extensions //
262  // ========== //
263 
264  std::shared_ptr<TilingInfoExtension> tilingInfo();
265 };
266 
267 } // namespace iolink