#include #include "pls/internal/base/deque.h" namespace pls { namespace internal { namespace base { deque_item* deque_internal::pop_head_internal() { std::lock_guard lock{lock_}; if (head_ == nullptr) { return nullptr; } deque_item* result = head_; head_ = head_->prev_; if (head_ == nullptr) { tail_ = nullptr; } else { head_->next_ = nullptr; } return result; } deque_item* deque_internal::pop_tail_internal() { std::lock_guard lock{lock_}; if (tail_ == nullptr) { return nullptr; } deque_item* result = tail_; tail_ = tail_->next_; if (tail_ == nullptr) { head_ = nullptr; } else { tail_->prev_ = nullptr; } return result; } void deque_internal::push_tail_internal(deque_item *new_item) { std::lock_guard lock{lock_}; if (tail_ != nullptr) { tail_->prev_ = new_item; } else { head_ = new_item; } new_item->next_ = tail_; new_item->prev_ = nullptr; tail_ = new_item; } } } }