1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include "io-buffer.hh"
#include <cassert>
namespace nix {
std::span<const char> IoBuffer::getReadBuffer()
{
const auto used = std::min(bufSize - bufBegin, bufUsed);
return {buffer.get() + bufBegin, used};
}
void IoBuffer::consumed(size_t size)
{
assert(size <= bufUsed);
bufBegin = (bufBegin + size) % bufSize;
bufUsed -= size;
if (bufUsed == 0) {
bufBegin = 0;
}
}
std::span<char> IoBuffer::getWriteBuffer()
{
if (!buffer) {
buffer.reset(new char[bufSize]);
}
const auto bufEnd = (bufBegin + bufUsed) % bufSize;
const auto free = std::min(bufSize - bufEnd, bufSize - bufUsed);
return {buffer.get() + bufEnd, free};
}
void IoBuffer::added(size_t size)
{
assert(size <= bufSize - bufUsed);
bufUsed += size;
}
}
|