32 #ifndef GOOGLETEST_SAMPLES_SAMPLE3_INL_H_ 33 #define GOOGLETEST_SAMPLES_SAMPLE3_INL_H_ 48 friend class Queue<E>;
52 const E& element()
const {
return element_; }
55 QueueNode* next() {
return next_; }
56 const QueueNode* next()
const {
return next_; }
61 explicit QueueNode(
const E& an_element)
62 : element_(an_element), next_(nullptr) {}
65 const QueueNode& operator = (
const QueueNode&);
66 QueueNode(
const QueueNode&);
76 Queue() : head_(nullptr), last_(nullptr), size_(0) {}
85 QueueNode<E>* node = head_;
86 QueueNode<E>* next = node->next();
90 if (node ==
nullptr)
break;
95 head_ = last_ =
nullptr;
101 size_t Size()
const {
return size_; }
104 QueueNode<E>* Head() {
return head_; }
105 const QueueNode<E>* Head()
const {
return head_; }
108 QueueNode<E>* Last() {
return last_; }
109 const QueueNode<E>* Last()
const {
return last_; }
115 void Enqueue(
const E& element) {
116 QueueNode<E>* new_node =
new QueueNode<E>(element);
119 head_ = last_ = new_node;
122 last_->next_ = new_node;
135 const QueueNode<E>*
const old_head = head_;
136 head_ = head_->next_;
142 E* element =
new E(old_head->element());
151 template <
typename F>
152 Queue* Map(F
function)
const {
153 Queue* new_queue =
new Queue();
154 for (
const QueueNode<E>* node = head_; node !=
nullptr;
155 node = node->next_) {
156 new_queue->Enqueue(
function(node->element()));
169 const Queue& operator = (
const Queue&);
172 #endif // GOOGLETEST_SAMPLES_SAMPLE3_INL_H_