Do an increment of the copy.
42{
45
46#ifndef NDEBUG
47
48 std::optional<sampleCount> oldRemaining;
51
52#endif
53
55 const auto curBlockSize = *oCurBlockSize;
56#ifndef NDEBUG
59
61 *oldRemaining == remaining);
62 oldRemaining.emplace(remaining);
63
64 assert(blockSize == 0 || remaining == 0 || curBlockSize > 0);
65#endif
66 if (curBlockSize == 0)
67
69
70
71 assert(curBlockSize <= blockSize);
74
75
77
78
79
83#ifndef NDEBUG
84
87#endif
88
89
93
95 }
96 else
98}
void Advance(size_t count)
Move the positions.
virtual bool Acquire(Buffers &data)=0
Guarantee empty space in Buffers before they are written.
virtual bool Release(const Buffers &data, size_t curBlockSize)=0
Acknowledge receipt of data in Buffers, which caller may then Advance()
virtual sampleCount Remaining() const =0
Result includes any amount Acquired and not yet Released.
virtual bool Terminates() const
Needed only to make some postconditions assertable; defaults true.
virtual std::optional< size_t > Acquire(Buffers &data, size_t bound)=0
Occupy vacant space in Buffers with some data.
virtual bool Release()=0
Caller is done examining last Acquire()d positions.