Separate Index class to track streams via intrusive list

This commit is contained in:
flamingcow
2019-05-12 08:45:56 -07:00
parent 79709c5b25
commit d29157c1ac
7 changed files with 84 additions and 29 deletions

39
index.cc Normal file
View File

@@ -0,0 +1,39 @@
#include "index.h"
namespace firesse {
void Index::Add(Stream* stream) {
std::lock_guard l(mu_);
// Implicitly freshest
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;
}
}
} // namespace firesse