DiskStorage/src/include/Storage/Disk/Buffer.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  * Buffer.h
8  *
9  ****/
10 #pragma once
11 
12 #include <Storage/Device.h>
13 #include <map>
14 
15 namespace Storage::Disk
16 {
17 struct Buffer : public std::unique_ptr<uint8_t[]> {
18  static constexpr uint32_t invalid{uint32_t(-1)};
19  uint32_t sector{invalid};
20  bool dirty{false};
21 
22  void invalidate()
23  {
24  sector = invalid;
25  dirty = false;
26  }
27 };
28 
30 {
31 public:
32  BufferList(uint16_t sectorSize, size_t count) : mSize(1 << getSizeBits(count))
33  {
34  list = std::make_unique<Buffer[]>(mSize);
35  if(!list) {
36  mSize = 0;
37  }
38  for(unsigned i = 0; i < mSize; ++i) {
39  list[i].reset(new uint8_t[sectorSize]);
40  }
41  }
42 
44  {
45  return list[sector & (mSize - 1)];
46  }
47 
48  Buffer* begin() const
49  {
50  return &list[0];
51  }
52 
53  Buffer* end() const
54  {
55  return &list[mSize];
56  }
57 
58  size_t size() const
59  {
60  return mSize;
61  }
62 
63 private:
64  std::unique_ptr<Buffer[]> list;
65  size_t mSize;
66 };
67 
68 } // namespace Storage::Disk
uint32_t storage_size_t
Definition: Components/Storage/src/include/Storage/Types.h:19
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:30
Buffer * begin() const
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:48
Buffer & get(storage_size_t sector)
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:43
Buffer * end() const
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:53
size_t size() const
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:58
BufferList(uint16_t sectorSize, size_t count)
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:32
Definition: Partition.h:78
constexpr std::enable_if<(sizeof(T)<=4), uint8_t >::type getSizeBits(T value)
Definition: Components/Storage/src/include/Storage/Types.h:49
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:17
static constexpr uint32_t invalid
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:18
bool dirty
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:20
uint32_t sector
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:19
void invalidate()
Definition: DiskStorage/src/include/Storage/Disk/Buffer.h:22