util/StaticFifoBuffer: add method MoveFrom()
This commit is contained in:
parent
4bb4611e78
commit
01c02a1ef8
|
@ -80,6 +80,31 @@ public:
|
||||||
tail += n;
|
tail += n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move as much data as possible from the specified buffer.
|
||||||
|
*
|
||||||
|
* @return the number of items moved
|
||||||
|
*/
|
||||||
|
template<typename U>
|
||||||
|
constexpr size_type MoveFrom(std::span<U> src) noexcept {
|
||||||
|
auto w = Write();
|
||||||
|
|
||||||
|
if (src.size() > w.size() && head > 0) {
|
||||||
|
/* if the source contains more data than we
|
||||||
|
can append at the tail, try to make more
|
||||||
|
room by shifting the head to 0 */
|
||||||
|
Shift();
|
||||||
|
w = Write();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src.size() > w.size())
|
||||||
|
src = src.first(w.size());
|
||||||
|
|
||||||
|
std::move(src.begin(), src.end(), w.begin());
|
||||||
|
Append(src.size());
|
||||||
|
return src.size();
|
||||||
|
}
|
||||||
|
|
||||||
constexpr size_type GetAvailable() const noexcept {
|
constexpr size_type GetAvailable() const noexcept {
|
||||||
return tail - head;
|
return tail - head;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue