2019-05-12 08:45:56 -07:00
|
|
|
#include "index.h"
|
|
|
|
|
|
|
|
|
|
namespace firesse {
|
|
|
|
|
|
|
|
|
|
void Index::Add(Stream* stream) {
|
|
|
|
|
std::lock_guard l(mu_);
|
|
|
|
|
|
2019-05-12 08:56:57 -07:00
|
|
|
stream->last_message_time_ = std::chrono::steady_clock::now();
|
2019-05-12 08:45:56 -07:00
|
|
|
stream->fresher_ = nullptr;
|
|
|
|
|
stream->staler_ = freshest_;
|
|
|
|
|
if (stream->staler_) {
|
|
|
|
|
stream->staler_->fresher_ = stream;
|
|
|
|
|
}
|
|
|
|
|
freshest_ = stream;
|
|
|
|
|
if (!stalest_) {
|
|
|
|
|
stalest_ = stream;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Index::Remove(Stream* stream) {
|
|
|
|
|
std::lock_guard l(mu_);
|
|
|
|
|
|
|
|
|
|
if (freshest_ == stream) {
|
|
|
|
|
freshest_ = stream->staler_;
|
|
|
|
|
}
|
|
|
|
|
if (stalest_ == stream) {
|
|
|
|
|
stalest_ = stream->fresher_;
|
|
|
|
|
}
|
|
|
|
|
if (stream->fresher_) {
|
|
|
|
|
stream->fresher_->staler_ = stream->staler_;
|
|
|
|
|
stream->fresher_ = nullptr;
|
|
|
|
|
}
|
|
|
|
|
if (stream->staler_) {
|
|
|
|
|
stream->staler_->fresher_ = stream->fresher_;
|
|
|
|
|
stream->staler_ = nullptr;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-12 08:56:57 -07:00
|
|
|
void Index::Freshen(Stream* stream) {
|
|
|
|
|
std::lock_guard l(mu_);
|
|
|
|
|
if (freshest_ == stream) {
|
|
|
|
|
// Shortcut
|
|
|
|
|
stream->last_message_time_ = std::chrono::steady_clock::now();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Remove(stream);
|
|
|
|
|
Add(stream);
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-12 08:45:56 -07:00
|
|
|
} // namespace firesse
|