SharedMemoryStream.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * SharedMemoryStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "DataSourceStream.h"
14 #include <memory>
15 
24 template <typename T> class SharedMemoryStream : public IDataSourceStream
25 {
26 public:
31  SharedMemoryStream(std::shared_ptr<T>(buffer), size_t size) : buffer(buffer), capacity(size * sizeof(T))
32  {
33  }
34 
35  StreamType getStreamType() const override
36  {
37  return eSST_Memory;
38  }
39 
40  int available() override
41  {
42  return capacity - readPos;
43  }
44 
45  size_t getCapacity() const
46  {
47  return capacity;
48  }
49 
50  uint16_t readMemoryBlock(char* data, int bufSize) override
51  {
52  size_t written = std::min(bufSize, available());
53  auto bufptr = reinterpret_cast<const uint8_t*>(buffer.get()) + readPos;
54  memcpy(data, bufptr, written);
55 
56  return written;
57  }
58 
59  bool seek(int len) override
60  {
61  if(readPos + len > capacity) {
62  return false;
63  }
64 
65  readPos += len;
66  return true;
67  }
68 
69  bool isFinished() override
70  {
71  return available() <= 0;
72  }
73 
74 private:
75  std::shared_ptr<T> buffer;
76  size_t capacity;
77  size_t readPos{0};
78 };
Base class for read-only stream.
Definition: DataSourceStream.h:45
size_t getCapacity() const
Definition: SharedMemoryStream.h:53
StreamType getStreamType() const override
Get the stream type.
Definition: SharedMemoryStream.h:43
SharedMemoryStream(std::shared_ptr< T >(buffer), size_t size)
Constructor for use with pre-existing buffer.
Definition: SharedMemoryStream.h:39
StreamType
Data stream type.
Definition: DataSourceStream.h:25
bool isFinished() override
Check if all data has been read.
Definition: SharedMemoryStream.h:77
int available() override
Return the total length of the stream.
Definition: SharedMemoryStream.h:48
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
Definition: SharedMemoryStream.h:58
@ eSST_Memory
Memory stream.
Definition: DataSourceStream.h:27
Memory stream operating on fixed shared buffer.
Definition: SharedMemoryStream.h:24
bool seek(int len) override
Move read cursor.
Definition: SharedMemoryStream.h:67