Skip to content

Commit

Permalink
ringbuf: Add fill_with()
Browse files Browse the repository at this point in the history
  • Loading branch information
jlindgren90 committed Nov 30, 2023
1 parent 773b5a6 commit 8a01eaa
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/libaudcore/ringbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,15 @@ class RingBuf : private RingBufBase
return val;
}

template<class... Args>
void fill_with(Args &&... args)
{
discard();
add(raw(size()));
for (int i = 0; i < len(); i++)
aud::construct<T>::make(at(raw(i)), std::forward<Args>(args)...);
}

private:
static constexpr int raw(int len) { return len * sizeof(T); }
static constexpr int cooked(int len) { return len / sizeof(T); }
Expand Down
10 changes: 10 additions & 0 deletions src/libaudcore/tests/test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,16 @@ static void test_ringbuf()
ring.discard(5);
assert(ring.len() == 5);

ring.fill_with("fill");

assert(ring.size() == 10);
assert(ring.len() == 10);
assert(ring.linear() == 10);
assert(ring.space() == 0);

for (int i = 0; i < 10; i++)
assert(ring[i] == String("fill"));

ring.discard();
assert(ring.len() == 0);

Expand Down

0 comments on commit 8a01eaa

Please sign in to comment.