IOLink  IOL_v1.1.0_release
RandomAccess.h
1 #pragma once
2 
3 #include <iolink/FlagSet.h>
4 #include <iolink/IOLinkAPI.h>
5 #include <iolink/storage/DataAccess.h>
6 
7 #include <cstdint>
8 
9 namespace iolink
10 {
11 
16 {
17  READ = 0x1,
18  WRITE = 0x2,
19  RESIZE = 0x4,
20  MEMORY_ACCESS = 0x8,
21 
22  READ_WRITE = 0x3,
23  WRITE_RESIZE = 0x6,
24 };
25 
26 extern template class IOLINK_API_IMPORT FlagSet<RandomAccessCapability>;
27 
30 
31 // Define bitwise operators for RandomAccessCapability
32 IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(RandomAccessCapability)
33 
34 
45 class IOLINK_API RandomAccess : public DataAccess
46 {
47 public:
48  virtual ~RandomAccess() = default;
49 
53  virtual RandomAccessCapabilitySet capabilities() const = 0;
54 
58  inline bool support(RandomAccessCapabilitySet flags) { return this->capabilities().has(flags); }
59 
63  virtual size_t size() const = 0;
64 
65  // ==== //
66  // READ //
67  // ==== //
68 
82  virtual size_t read(size_t offset, size_t size, void* dst);
83 
84  // ===== //
85  // WRITE //
86  // ===== //
87 
101  virtual size_t write(size_t offset, size_t size, const void* src);
102 
103  // ====== //
104  // RESIZE //
105  // ====== //
106 
114  virtual void resize(size_t newSize);
115 
116  // ============= //
117  // MEMORY_ACCESS //
118  // ============= //
119 
127  virtual void* buffer();
128 
136  virtual const void* bufferReadOnly() const;
137 
145  virtual size_t bufferSize();
146 };
147 
148 } // namespace iolink