Enqueue node onto the queue's tail. This is O(1).
| 95 | |
| 96 | /// Enqueue node onto the queue's tail. This is O(1). |
| 97 | void Enqueue(T* n) { |
| 98 | Node* node = (Node*)n; |
| 99 | DCHECK(node->next == nullptr); |
| 100 | DCHECK(node->prev == nullptr); |
| 101 | DCHECK(node->parent_queue == nullptr); |
| 102 | node->parent_queue = this; |
| 103 | { |
| 104 | std::lock_guard<LockType> lock(lock_); |
| 105 | if (tail_ != nullptr) tail_->next = node; |
| 106 | node->prev = tail_; |
| 107 | tail_ = node; |
| 108 | if (head_ == nullptr) head_ = node; |
| 109 | ++size_; |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | /// Pushes the node onto the queue's head. This is O(1). |
| 114 | void PushFront(T* n) { |
no outgoing calls