Ignore:
Timestamp:
2018-07-05T21:41:24Z (7 years ago)
Author:
Dzejrou <dzejrou@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
91ac0bb
Parents:
c300bb5
git-author:
Dzejrou <dzejrou@…> (2018-05-17 16:51:33)
git-committer:
Dzejrou <dzejrou@…> (2018-07-05 21:41:24)
Message:

cpp: added the rest of list tests and fixed bugs found by them

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/cpp/include/impl/list.hpp

    rc300bb5 r7452b155  
    7171
    7272                list_const_iterator(const list_iterator<T>& other)
    73                     : current_{other.node()}, head_{other.head()}
     73                    : current_{other.node()}, head_{other.head()}, end_{other.end()}
    7474                { /* DUMMY BODY */ }
    7575
     
    307307        template<class T>
    308308        bool operator!=(const list_iterator<T>& lhs, const list_iterator<T>& rhs)
     309        {
     310            return !(lhs == rhs);
     311        }
     312
     313        template<class T>
     314        bool operator==(const list_const_iterator<T>& lhs, const list_iterator<T>& rhs)
     315        {
     316            return (lhs.node() == rhs.node()) && (lhs.end() == rhs.end());
     317        }
     318
     319        template<class T>
     320        bool operator!=(const list_const_iterator<T>& lhs, const list_iterator<T>& rhs)
     321        {
     322            return !(lhs == rhs);
     323        }
     324
     325        template<class T>
     326        bool operator==(const list_iterator<T>& lhs, const list_const_iterator<T>& rhs)
     327        {
     328            return (lhs.node() == rhs.node()) && (lhs.end() == rhs.end());
     329        }
     330
     331        template<class T>
     332        bool operator!=(const list_iterator<T>& lhs, const list_const_iterator<T>& rhs)
    309333        {
    310334            return !(lhs == rhs);
     
    874898                    return;
    875899
    876                 if (first.node() == other.head_ && !last.node())
     900                if (first == other.begin() && last == other.end())
    877901                { // [first, last) is everything in other.
    878902                    splice(position, other);
     
    884908                aux::list_node<value_type>* last_node{};
    885909
    886                 if (first.node() == other.head_)
     910                if (first == other.begin())
    887911                { // The range is a prefix of other.
    888912                    other.head_ = last.node();
     
    893917                    last_node = last.node()->prev;
    894918                }
    895                 else if (!last.node())
     919                else if (last == other.end())
    896920                { // The range is a suffix of other.
    897921                    auto new_last = first.node()->prev;
     
    928952                }
    929953
    930                 auto count = distance(iterator{first_node}, iterator{last_node});
     954                auto count = distance(
     955                    iterator{first_node, nullptr, false},
     956                    iterator{last_node, nullptr, false}
     957                );
     958                ++count;
     959
    931960                size_ += count;
    932961                other.size_ -= count;
Note: See TracChangeset for help on using the changeset viewer.