177 template <
class Sample>
197 storage_.assign(
capacity, Sample{});
198 written_.store(0, std::memory_order_release);
204 if (storage_.empty())
209 const std::uint64_t n = written_.load(std::memory_order_relaxed);
210 storage_[
static_cast<std::size_t
>(n % storage_.size())] = sample;
214 written_.store(n + 1, std::memory_order_release);
220 return storage_.size();
226 return written_.load(std::memory_order_acquire);
237 const std::uint64_t n =
written();
252 const std::uint64_t n =
written();
254 if (storage_.empty() or n <= storage_.size())
259 const std::uint64_t oldest = n - storage_.size();
260 return storage_[
static_cast<std::size_t
>(oldest % storage_.size())].episode == episode;
276 snapshot(
const std::uint64_t episode, std::vector<Sample>& out)
const
280 if (storage_.empty())
285 const std::uint64_t n =
written();
286 const std::uint64_t first = n > storage_.size() ? n - storage_.size() : 0;
288 out.reserve(
static_cast<std::size_t
>(n - first));
290 for (std::uint64_t i = first; i < n; i++)
292 const Sample& sample = storage_[
static_cast<std::size_t
>(i % storage_.size())];
294 if (sample.episode == episode)
296 out.push_back(sample);
303 std::vector<Sample> storage_;
305 std::atomic<std::uint64_t> written_{0};
363 std::string
writeDump(
const Episode& episode,
const Params& params);
This file offers overloads of toIce() and fromIce() functions for STL container types.