@@ -28,33 +28,33 @@ bool ListNode<T>::IsEmpty() const {
28
28
return prev_ == this ;
29
29
}
30
30
31
- template <typename T, ListNodeMember(T) M >
31
+ template <typename T, ListNode<T> (T::*M) >
32
32
ListHead<T, M>::Iterator::Iterator(ListNode<T>* node) : node_(node) {}
33
33
34
- template <typename T, ListNodeMember(T) M >
34
+ template <typename T, ListNode<T> (T::*M) >
35
35
T* ListHead<T, M>::Iterator::operator *() const {
36
36
return ContainerOf (M, node_);
37
37
}
38
38
39
- template <typename T, ListNodeMember(T) M >
39
+ template <typename T, ListNode<T> (T::*M) >
40
40
const typename ListHead<T, M>::Iterator&
41
41
ListHead<T, M>::Iterator::operator ++() {
42
42
node_ = node_->next_ ;
43
43
return *this ;
44
44
}
45
45
46
- template <typename T, ListNodeMember(T) M >
46
+ template <typename T, ListNode<T> (T::*M) >
47
47
bool ListHead<T, M>::Iterator::operator !=(const Iterator& that) const {
48
48
return node_ != that.node_ ;
49
49
}
50
50
51
- template <typename T, ListNodeMember(T) M >
51
+ template <typename T, ListNode<T> (T::*M) >
52
52
ListHead<T, M>::~ListHead () {
53
53
while (IsEmpty () == false )
54
54
head_.next_ ->Remove ();
55
55
}
56
56
57
- template <typename T, ListNodeMember(T) M >
57
+ template <typename T, ListNode<T> (T::*M) >
58
58
void ListHead<T, M>::MoveBack(ListHead* that) {
59
59
if (IsEmpty ())
60
60
return ;
@@ -67,7 +67,7 @@ void ListHead<T, M>::MoveBack(ListHead* that) {
67
67
head_.next_ = &head_;
68
68
}
69
69
70
- template <typename T, ListNodeMember(T) M >
70
+ template <typename T, ListNode<T> (T::*M) >
71
71
void ListHead<T, M>::PushBack(T* element) {
72
72
ListNode<T>* that = &(element->*M);
73
73
head_.prev_ ->next_ = that;
@@ -76,7 +76,7 @@ void ListHead<T, M>::PushBack(T* element) {
76
76
head_.prev_ = that;
77
77
}
78
78
79
- template <typename T, ListNodeMember(T) M >
79
+ template <typename T, ListNode<T> (T::*M) >
80
80
void ListHead<T, M>::PushFront(T* element) {
81
81
ListNode<T>* that = &(element->*M);
82
82
head_.next_ ->prev_ = that;
@@ -85,12 +85,12 @@ void ListHead<T, M>::PushFront(T* element) {
85
85
head_.next_ = that;
86
86
}
87
87
88
- template <typename T, ListNodeMember(T) M >
88
+ template <typename T, ListNode<T> (T::*M) >
89
89
bool ListHead<T, M>::IsEmpty() const {
90
90
return head_.IsEmpty ();
91
91
}
92
92
93
- template <typename T, ListNodeMember(T) M >
93
+ template <typename T, ListNode<T> (T::*M) >
94
94
T* ListHead<T, M>::PopFront() {
95
95
if (IsEmpty ())
96
96
return nullptr ;
@@ -99,12 +99,12 @@ T* ListHead<T, M>::PopFront() {
99
99
return ContainerOf (M, node);
100
100
}
101
101
102
- template <typename T, ListNodeMember(T) M >
102
+ template <typename T, ListNode<T> (T::*M) >
103
103
typename ListHead<T, M>::Iterator ListHead<T, M>::begin() const {
104
104
return Iterator (head_.next_ );
105
105
}
106
106
107
- template <typename T, ListNodeMember(T) M >
107
+ template <typename T, ListNode<T> (T::*M) >
108
108
typename ListHead<T, M>::Iterator ListHead<T, M>::end() const {
109
109
return Iterator (const_cast <ListNode<T>*>(&head_));
110
110
}
0 commit comments