|
1 | 1 | namespace Platform::Collections::Methods::Lists |
2 | 2 | { |
3 | | - template <class impl_t, typename ...> class AbsoluteCircularDoublyLinkedListMethods; |
4 | | - template <class impl_t, typename TElement> class AbsoluteCircularDoublyLinkedListMethods<impl_t, TElement> : public AbsoluteDoublyLinkedListMethodsBase<impl_t, TElement> |
| 3 | + template <class TSelf, typename ...> class AbsoluteCircularDoublyLinkedListMethods; |
| 4 | + template <class TSelf, typename TElement> class AbsoluteCircularDoublyLinkedListMethods<TSelf, TElement> : public AbsoluteDoublyLinkedListMethodsBase<TSelf, TElement> |
5 | 5 | { |
6 | | - public: using Polymorph<impl_t>::object; |
7 | | - |
8 | 6 | public: void AttachBefore(TElement baseElement, TElement newElement) |
9 | 7 | { |
10 | | - auto baseElementPrevious = object().GetPrevious(baseElement); |
11 | | - object().SetPrevious(newElement, baseElementPrevious); |
12 | | - object().SetNext(newElement, baseElement); |
13 | | - if (baseElement == object().GetFirst()) |
| 8 | + auto baseElementPrevious = this->object().GetPrevious(baseElement); |
| 9 | + this->object().SetPrevious(newElement, baseElementPrevious); |
| 10 | + this->object().SetNext(newElement, baseElement); |
| 11 | + if (baseElement == this->object().GetFirst()) |
14 | 12 | { |
15 | | - object().SetFirst(newElement); |
| 13 | + this->object().SetFirst(newElement); |
16 | 14 | } |
17 | | - object().SetNext(baseElementPrevious, newElement); |
18 | | - object().SetPrevious(baseElement, newElement); |
19 | | - object().IncrementSize(); |
| 15 | + this->object().SetNext(baseElementPrevious, newElement); |
| 16 | + this->object().SetPrevious(baseElement, newElement); |
| 17 | + this->object().IncrementSize(); |
20 | 18 | } |
21 | 19 |
|
22 | 20 | public: void AttachAfter(TElement baseElement, TElement newElement) |
23 | 21 | { |
24 | | - auto baseElementNext = object().GetNext(baseElement); |
25 | | - object().SetPrevious(newElement, baseElement); |
26 | | - object().SetNext(newElement, baseElementNext); |
27 | | - if (baseElement == object().GetLast()) |
| 22 | + auto baseElementNext = this->object().GetNext(baseElement); |
| 23 | + this->object().SetPrevious(newElement, baseElement); |
| 24 | + this->object().SetNext(newElement, baseElementNext); |
| 25 | + if (baseElement == this->object().GetLast()) |
28 | 26 | { |
29 | | - object().SetLast(newElement); |
| 27 | + this->object().SetLast(newElement); |
30 | 28 | } |
31 | | - object().SetPrevious(baseElementNext, newElement); |
32 | | - object().SetNext(baseElement, newElement); |
33 | | - object().IncrementSize(); |
| 29 | + this->object().SetPrevious(baseElementNext, newElement); |
| 30 | + this->object().SetNext(baseElement, newElement); |
| 31 | + this->object().IncrementSize(); |
34 | 32 | } |
35 | 33 |
|
36 | 34 | public: void AttachAsFirst(TElement element) |
37 | 35 | { |
38 | | - auto first = object().GetFirst(); |
| 36 | + auto first = this->object().GetFirst(); |
39 | 37 | if (first == 0) |
40 | 38 | { |
41 | | - object().SetFirst(element); |
42 | | - object().SetLast(element); |
43 | | - object().SetPrevious(element, element); |
44 | | - object().SetNext(element, element); |
45 | | - object().IncrementSize(); |
| 39 | + this->object().SetFirst(element); |
| 40 | + this->object().SetLast(element); |
| 41 | + this->object().SetPrevious(element, element); |
| 42 | + this->object().SetNext(element, element); |
| 43 | + this->object().IncrementSize(); |
46 | 44 | } |
47 | 45 | else |
48 | 46 | { |
49 | | - object().AttachBefore(first, element); |
| 47 | + this->object().AttachBefore(first, element); |
50 | 48 | } |
51 | 49 | } |
52 | 50 |
|
53 | 51 | public: void AttachAsLast(TElement element) |
54 | 52 | { |
55 | | - auto last = object().GetLast(); |
| 53 | + auto last = this->object().GetLast(); |
56 | 54 | if (last == 0) |
57 | 55 | { |
58 | | - object().AttachAsFirst(element); |
| 56 | + this->object().AttachAsFirst(element); |
59 | 57 | } |
60 | 58 | else |
61 | 59 | { |
62 | | - object().AttachAfter(last, element); |
| 60 | + this->object().AttachAfter(last, element); |
63 | 61 | } |
64 | 62 | } |
65 | 63 |
|
66 | 64 | public: void Detach(TElement element) |
67 | 65 | { |
68 | | - auto elementPrevious = object().GetPrevious(element); |
69 | | - auto elementNext = object().GetNext(element); |
| 66 | + auto elementPrevious = this->object().GetPrevious(element); |
| 67 | + auto elementNext = this->object().GetNext(element); |
70 | 68 | if (elementNext == element) |
71 | 69 | { |
72 | | - object().SetFirst(0); |
73 | | - object().SetLast(0); |
| 70 | + this->object().SetFirst(0); |
| 71 | + this->object().SetLast(0); |
74 | 72 | } |
75 | 73 | else |
76 | 74 | { |
77 | | - object().SetNext(elementPrevious, elementNext); |
78 | | - object().SetPrevious(elementNext, elementPrevious); |
79 | | - if (element == object().GetFirst()) |
| 75 | + this->object().SetNext(elementPrevious, elementNext); |
| 76 | + this->object().SetPrevious(elementNext, elementPrevious); |
| 77 | + if (element == this->object().GetFirst()) |
80 | 78 | { |
81 | | - object().SetFirst(elementNext); |
| 79 | + this->object().SetFirst(elementNext); |
82 | 80 | } |
83 | | - if (element == object().GetLast()) |
| 81 | + if (element == this->object().GetLast()) |
84 | 82 | { |
85 | | - object().SetLast(elementPrevious); |
| 83 | + this->object().SetLast(elementPrevious); |
86 | 84 | } |
87 | 85 | } |
88 | | - object().SetPrevious(element, 0); |
89 | | - object().SetNext(element, 0); |
90 | | - object().DecrementSize(); |
| 86 | + this->object().SetPrevious(element, 0); |
| 87 | + this->object().SetNext(element, 0); |
| 88 | + this->object().DecrementSize(); |
91 | 89 | } |
92 | 90 | }; |
93 | 91 | } |
0 commit comments