From 799be5b5122752e3654869b37cfe6cb737dfd893 Mon Sep 17 00:00:00 2001 From: Tim Gilevich Date: Sat, 14 Sep 2024 12:53:39 +0300 Subject: [PATCH] WIP --- HW3/cc_lib/include/cc/forward_list.h | 47 ++++++++++++++++++++++------ HW3/src/main.cpp | 3 ++ HW3/tests/forward_list_test.cpp | 3 ++ 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/HW3/cc_lib/include/cc/forward_list.h b/HW3/cc_lib/include/cc/forward_list.h index f145054..70cb6f7 100644 --- a/HW3/cc_lib/include/cc/forward_list.h +++ b/HW3/cc_lib/include/cc/forward_list.h @@ -34,14 +34,31 @@ class ForwardListIterator using iterator_category = std::forward_iterator_tag; using difference_type = std::ptrdiff_t; using value_type = typename ForwardList::value_type; + using pointer = typename ForwardList::pointer; +using reference = typename ForwardList::reference; public: // methods ForwardListIterator() = default; ForwardListIterator(const ForwardList* list); ForwardListIterator(const ForwardList* list, details::Node* node); + //ForwardListIterator(ForwardList* list, details::Node* node); - bool operator==(const ForwardListIterator& rhs) const; - auto operator<=>(const ForwardListIterator&) const = default; + operator ForwardListIterator() const + { + return {list, node}; + } + + + const ForwardList* getList() const{ + return list; + } + bool operator==(const ForwardListIterator& rhs) const + { + return node == rhs.getNode() && list == rhs.getList(); + } + //bool operator==(const ForwardListIterator& rhs) { return node == rhs.node && list == rhs.list; } + + //auto operator<=>(const ForwardListIterator&) const = default; const value_type& operator*() const { return static_cast*>(node)->data; } value_type& operator*() { return static_cast*>(node)->data; } ForwardListIterator& operator++(); @@ -88,6 +105,19 @@ class ForwardList std::size_t listSize = 0; }; +//template +//bool operator==(const ForwardListIterator>& lhs, const ForwardListIterator>& rhs) +//{ +// return lhs.node == rhs.node && lhs.list == rhs.list; +//} + +//template +//bool operator==(const ForwardListIterator>& lhs, +// const ForwardListIterator>& rhs) +//{ +// return lhs.node == rhs.node && lhs.list == rhs.list; +//} + template ForwardListIterator& ForwardListIterator::operator++() { @@ -114,11 +144,7 @@ ForwardListIterator::ForwardListIterator(const ForwardList* aList, { } -template -bool ForwardListIterator::operator==(const ForwardListIterator& rhs) const -{ - return node == rhs.node && list == rhs.list; -} + template ForwardList::ForwardList() @@ -177,7 +203,10 @@ auto ForwardList::before_begin() noexcept -> iterator template auto ForwardList::cbefore_begin() const noexcept -> const_iterator { - return { this, &head }; + return {}; +// return { this, &head }; + //return ForwardListIterator{ this, &head }; + //return { this, &head }; } template @@ -189,7 +218,7 @@ auto ForwardList::begin() noexcept -> iterator template auto ForwardList::cbegin() const noexcept -> const_iterator { - return begin(); + return std::next(cbefore_begin()); } template diff --git a/HW3/src/main.cpp b/HW3/src/main.cpp index a28aa7d..5f6d33e 100644 --- a/HW3/src/main.cpp +++ b/HW3/src/main.cpp @@ -47,6 +47,9 @@ int main() } cc::ForwardList list; + if (list.cbegin() == list.begin() && list.begin() == list.cbegin()){ + std::cout << "Yes\n"; + } //auto iter = list.begin(); //list.insert_after(iter, 77); diff --git a/HW3/tests/forward_list_test.cpp b/HW3/tests/forward_list_test.cpp index 5c9ad77..017c4df 100644 --- a/HW3/tests/forward_list_test.cpp +++ b/HW3/tests/forward_list_test.cpp @@ -96,4 +96,7 @@ TEST(ForwardListTest, EraseInMiddle) EXPECT_EQ(*std::next(iter), i ); list.erase_after(iter); } + + auto t = list.cbegin(); + iter == t; } \ No newline at end of file