Files
firesse/index.h

31 lines
873 B
C
Raw Normal View History

#pragma once
#include "stream.h"
namespace firesse {
// Track live streams
// O(1) for Add(), Remove(), and Freshen()
// Manages this by only supporting insertion of the freshest element,
// and by requiring an iterator for removal.
// Avoids allocation and folds in iterators by using an intrusive list
// inside Stream.
class Index {
public:
void Add(Stream* stream);
void Remove(Stream* stream);
2019-05-12 08:56:57 -07:00
void Freshen(Stream* stream);
// Returns time to sleep until next stalest, or min_stale if none
// Only calls callback if stalest is at least min_stale
// Handles all locking and marks Stream as fresh after callback
std::chrono::nanoseconds WithStalest(std::function<void(Stream*)> callback, const std::chrono::nanoseconds& min_stale);
private:
2019-05-12 08:56:57 -07:00
std::recursive_mutex mu_;
Stream* freshest_ = nullptr;
Stream* stalest_ = nullptr;
};
} // namespace firesse