Skip to content

Commit 0f6e9e2

Browse files
authored
Merge pull request #102 from nassipkali/main
Removed self-calling methods. In lists code replaced impl_t to TSelf and object() to this->object()
2 parents 8c2b216 + 00fe044 commit 0f6e9e2

11 files changed

+168
-248
lines changed

cpp/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ cmake_minimum_required(VERSION 3.13)
22

33
project(Platform.Collections.Methods CXX)
44

5+
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
6+
conan_basic_setup(TARGETS)
57

68
add_library(${PROJECT_NAME}.Library INTERFACE)
7-
target_include_directories(${PROJECT_NAME}.Library INTERFACE
8-
${PROJECT_NAME}
9-
"${CMAKE_CURRENT_SOURCE_DIR}/../../Interfaces/cpp/Platform.Interfaces/" )
9+
target_include_directories(${PROJECT_NAME}.Library INTERFACE ${PROJECT_NAME})
10+
target_link_libraries(${PROJECT_NAME}.Library INTERFACE CONAN_PKG::platform.interfaces)
1011

1112
add_executable(${PROJECT_NAME}.Tests.Console ${PROJECT_NAME}.Tests.Console/App.cpp)
1213
set_target_properties(${PROJECT_NAME}.Tests.Console PROPERTIES CXX_STANDARD 20)
Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,91 @@
11
namespace Platform::Collections::Methods::Lists
22
{
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>
55
{
6-
public: using Polymorph<impl_t>::object;
7-
86
public: void AttachBefore(TElement baseElement, TElement newElement)
97
{
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())
1412
{
15-
object().SetFirst(newElement);
13+
this->object().SetFirst(newElement);
1614
}
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();
2018
}
2119

2220
public: void AttachAfter(TElement baseElement, TElement newElement)
2321
{
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())
2826
{
29-
object().SetLast(newElement);
27+
this->object().SetLast(newElement);
3028
}
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();
3432
}
3533

3634
public: void AttachAsFirst(TElement element)
3735
{
38-
auto first = object().GetFirst();
36+
auto first = this->object().GetFirst();
3937
if (first == 0)
4038
{
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();
4644
}
4745
else
4846
{
49-
object().AttachBefore(first, element);
47+
this->object().AttachBefore(first, element);
5048
}
5149
}
5250

5351
public: void AttachAsLast(TElement element)
5452
{
55-
auto last = object().GetLast();
53+
auto last = this->object().GetLast();
5654
if (last == 0)
5755
{
58-
object().AttachAsFirst(element);
56+
this->object().AttachAsFirst(element);
5957
}
6058
else
6159
{
62-
object().AttachAfter(last, element);
60+
this->object().AttachAfter(last, element);
6361
}
6462
}
6563

6664
public: void Detach(TElement element)
6765
{
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);
7068
if (elementNext == element)
7169
{
72-
object().SetFirst(0);
73-
object().SetLast(0);
70+
this->object().SetFirst(0);
71+
this->object().SetLast(0);
7472
}
7573
else
7674
{
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())
8078
{
81-
object().SetFirst(elementNext);
79+
this->object().SetFirst(elementNext);
8280
}
83-
if (element == object().GetLast())
81+
if (element == this->object().GetLast())
8482
{
85-
object().SetLast(elementPrevious);
83+
this->object().SetLast(elementPrevious);
8684
}
8785
}
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();
9189
}
9290
};
9391
}
Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,10 @@
11
namespace Platform::Collections::Methods::Lists
22
{
3-
template <class impl_t, typename ...> class AbsoluteDoublyLinkedListMethodsBase;
4-
template <class impl_t, typename TElement> class AbsoluteDoublyLinkedListMethodsBase<impl_t, TElement> : public DoublyLinkedListMethodsBase<impl_t, TElement>
3+
template <class TSelf, typename ...> class AbsoluteDoublyLinkedListMethodsBase;
4+
template <class TSelf, typename TElement> class AbsoluteDoublyLinkedListMethodsBase<TSelf, TElement> : public DoublyLinkedListMethodsBase<TSelf, TElement>
55
{
6-
public: using Polymorph<impl_t>::object;
6+
protected: void IncrementSize() { this->object().SetSize(this->object().GetSize() + 1); }
77

8-
protected: TElement GetFirst() { return object().GetFirst(); };
9-
10-
protected: TElement GetLast() { return object().GetLast(); };
11-
12-
protected: TElement GetSize() { return object().GetSize(); };
13-
14-
protected: void SetFirst(TElement element) { object().SetFirst(element); };
15-
16-
protected: void SetLast(TElement element) { object().SetLast(element); };
17-
18-
protected: void SetSize(TElement size) { object().SetSize(size); };
19-
20-
protected: void IncrementSize() { object().SetSize(object().GetSize() + 1); }
21-
22-
protected: void DecrementSize() { object().SetSize(object().GetSize() - 1); }
8+
protected: void DecrementSize() { this->object().SetSize(this->object().GetSize() - 1); }
239
};
2410
}
Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,95 @@
11
namespace Platform::Collections::Methods::Lists
22
{
3-
template <class impl_t, typename ...> class AbsoluteOpenDoublyLinkedListMethods;
4-
template <class impl_t, typename TElement> class AbsoluteOpenDoublyLinkedListMethods<impl_t, TElement> : public AbsoluteDoublyLinkedListMethodsBase<impl_t, TElement>
3+
template <class TSelf, typename ...> class AbsoluteOpenDoublyLinkedListMethods;
4+
template <class TSelf, typename TElement> class AbsoluteOpenDoublyLinkedListMethods<TSelf, TElement> : public AbsoluteDoublyLinkedListMethodsBase<TSelf, TElement>
55
{
6-
public: using Polymorph<impl_t>::object;
7-
86
public: void AttachBefore(TElement baseElement, TElement newElement)
97
{
10-
auto baseElementPrevious = object().GetPrevious(baseElement);
11-
object().SetPrevious(newElement, baseElementPrevious);
12-
object().SetNext(newElement, baseElement);
8+
auto baseElementPrevious = this->object().GetPrevious(baseElement);
9+
this->object().SetPrevious(newElement, baseElementPrevious);
10+
this->object().SetNext(newElement, baseElement);
1311
if (baseElementPrevious == 0)
1412
{
15-
object().SetFirst(newElement);
13+
this->object().SetFirst(newElement);
1614
}
1715
else
1816
{
19-
object().SetNext(baseElementPrevious, newElement);
17+
this->object().SetNext(baseElementPrevious, newElement);
2018
}
21-
object().SetPrevious(baseElement, newElement);
22-
object().IncrementSize();
19+
this->object().SetPrevious(baseElement, newElement);
20+
this->object().IncrementSize();
2321
}
2422

2523
public: void AttachAfter(TElement baseElement, TElement newElement)
2624
{
27-
auto baseElementNext = object().GetNext(baseElement);
28-
object().SetPrevious(newElement, baseElement);
29-
object().SetNext(newElement, baseElementNext);
25+
auto baseElementNext = this->object().GetNext(baseElement);
26+
this->object().SetPrevious(newElement, baseElement);
27+
this->object().SetNext(newElement, baseElementNext);
3028
if (baseElementNext == 0)
3129
{
32-
object().SetLast(newElement);
30+
this->object().SetLast(newElement);
3331
}
3432
else
3533
{
36-
object().SetPrevious(baseElementNext, newElement);
34+
this->object().SetPrevious(baseElementNext, newElement);
3735
}
38-
object().SetNext(baseElement, newElement);
39-
object().IncrementSize();
36+
this->object().SetNext(baseElement, newElement);
37+
this->object().IncrementSize();
4038
}
4139

4240
public: void AttachAsFirst(TElement element)
4341
{
44-
auto first = object().GetFirst();
42+
auto first = this->object().GetFirst();
4543
if (first == 0)
4644
{
47-
object().SetFirst(element);
48-
object().SetLast(element);
49-
object().SetPrevious(element, 0);
50-
object().SetNext(element, 0);
51-
object().IncrementSize();
45+
this->object().SetFirst(element);
46+
this->object().SetLast(element);
47+
this->object().SetPrevious(element, 0);
48+
this->object().SetNext(element, 0);
49+
this->object().IncrementSize();
5250
}
5351
else
5452
{
55-
object().AttachBefore(first, element);
53+
this->object().AttachBefore(first, element);
5654
}
5755
}
5856

5957
public: void AttachAsLast(TElement element)
6058
{
61-
auto last = object().GetLast();
59+
auto last = this->object().GetLast();
6260
if (last == 0)
6361
{
64-
object().AttachAsFirst(element);
62+
this->object().AttachAsFirst(element);
6563
}
6664
else
6765
{
68-
object().AttachAfter(last, element);
66+
this->object().AttachAfter(last, element);
6967
}
7068
}
7169

7270
public: void Detach(TElement element)
7371
{
74-
auto elementPrevious = object().GetPrevious(element);
75-
auto elementNext = object().GetNext(element);
72+
auto elementPrevious = this->object().GetPrevious(element);
73+
auto elementNext = this->object().GetNext(element);
7674
if (elementPrevious == 0)
7775
{
78-
object().SetFirst(elementNext);
76+
this->object().SetFirst(elementNext);
7977
}
8078
else
8179
{
82-
object().SetNext(elementPrevious, elementNext);
80+
this->object().SetNext(elementPrevious, elementNext);
8381
}
8482
if (elementNext == 0)
8583
{
86-
object().SetLast(elementPrevious);
84+
this->object().SetLast(elementPrevious);
8785
}
8886
else
8987
{
90-
object().SetPrevious(elementNext, elementPrevious);
88+
this->object().SetPrevious(elementNext, elementPrevious);
9189
}
92-
object().SetPrevious(element, 0);
93-
object().SetNext(element, 0);
94-
object().DecrementSize();
90+
this->object().SetPrevious(element, 0);
91+
this->object().SetNext(element, 0);
92+
this->object().DecrementSize();
9593
}
9694
};
9795
}
Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
11
namespace Platform::Collections::Methods::Lists
22
{
3-
template <class impl_t, typename ...> class DoublyLinkedListMethodsBase;
4-
template <class impl_t, typename TElement> class DoublyLinkedListMethodsBase<impl_t, TElement> : public GenericCollectionMethodsBase<impl_t, TElement>
3+
template <class TSelf, typename ...> class DoublyLinkedListMethodsBase;
4+
template <class TSelf, typename TElement> class DoublyLinkedListMethodsBase<TSelf, TElement> : public GenericCollectionMethodsBase<TSelf, TElement>
55
{
6-
public: using Polymorph<impl_t>::object;
7-
8-
protected: TElement GetPrevious(TElement element) { return object().GetPrevious(element); };
9-
10-
protected: TElement GetNext(TElement element) { return object().GetNext(element); };
11-
12-
protected: void SetPrevious(TElement element, TElement previous) { object().SetPrevious(element, previous); };
13-
14-
protected: void SetNext(TElement element, TElement next) { object().SetNext(element, next); };
156
};
167
}

0 commit comments

Comments
 (0)