in source/timed_single_thread_context.cpp [35:64]
void timed_single_thread_context::enqueue(task_base* task) noexcept {
std::lock_guard lock{mutex_};
if (head_ == nullptr || task->dueTime_ < head_->dueTime_) {
// Insert at the head of the queue.
task->next_ = head_;
task->prevNextPtr_ = &head_;
if (head_ != nullptr) {
head_->prevNextPtr_ = &task->next_;
}
head_ = task;
// New minimum due-time has changed, wake the thread.
cv_.notify_one();
} else {
auto* queuedTask = head_;
while (queuedTask->next_ != nullptr &&
queuedTask->next_->dueTime_ <= task->dueTime_) {
queuedTask = queuedTask->next_;
}
// Insert after queuedTask
task->prevNextPtr_ = &queuedTask->next_;
task->next_ = queuedTask->next_;
if (task->next_ != nullptr) {
task->next_->prevNextPtr_ = &task->next_;
}
queuedTask->next_ = task;
}
}