// // Created by Patrick Maschek on 01.02.2024. // #include #include class TestA : public cc::const_list_node { static int si; public: int i = 0; TestA() : i(si++) {} auto operator<=>(const TestA& other) const { return i <=> other.i; } }; int TestA::si = 0; void print_list(const cc::const_list& list) { std::cout << "[ "; for (const auto& value : list) { std::cout << value.i << " "; } std::cout << "] (size: " << list.size() << ")" << std::endl; } void print_list(cc::const_list::iterator start, cc::const_list::iterator end) { std::cout << "[ "; for (; start != end; ++start) { std::cout << start->i << " "; } std::cout << "]"; } int main() { std::cout << std::boolalpha; TestA arr[20]; cc::const_list list1 = { arr[0], arr[1], arr[2], arr[3] }; print_list(list1); std::cout << "clearing" << std::endl; list1.clear(); print_list(list1); std::cout << "list1 empty: " << list1.empty() << "\n\n"; list1 = { arr[0], arr[1], arr[2] }; std::cout << "size: " << list1.size() << "\n"; std::cout << "front: " << list1.front().i << "\n"; std::cout << "back: " << list1.back().i << "\n"; std::cout << "insert " << std::endl; list1.insert(++list1.begin(), { arr[5], arr[6] }); print_list(list1); std::cout << "erase [3,end]: " << std::endl; list1.erase(std::next(list1.begin(), 3), list1.end()); print_list(list1); std::cout << "erase [1]:" << std::endl; list1.erase(std::next(list1.begin(), 1)); print_list(list1); std::cout << "push_back([0]), push_front([1]):" << std::endl; list1.push_back(arr[9]); list1.push_front(arr[1]); print_list(list1); std::cout << "pop_back, pop_front: " << std::endl; list1.pop_back(); list1.pop_front(); print_list(list1); std::cout << "merge" << std::endl; cc::const_list ml = { arr[3], arr[4], arr[7], arr[8] }; print_list(list1); std::cout << " <- " << "\n"; print_list(ml); list1.merge(std::move(ml)); print_list(list1); std::cout << "splice [1]" << std::endl; cc::const_list sl = { arr[1], arr[2], arr[10], arr[11], arr[12], arr[13] }; print_list(list1); std::cout << " <- " << std::next(sl.begin())->i << " from: "; print_list(sl); list1.splice(++list1.begin(), sl, std::next(sl.begin())); print_list(list1); print_list(sl); std::cout << "\n"; print_list(list1); std::cout << " <- "; print_list(std::next(sl.begin(), 1), std::next(sl.begin(), 3)); std::cout << " from: "; print_list(sl); list1.splice(list1.begin(), sl, std::next(sl.begin(), 1), std::next(sl.begin(), 3)); print_list(list1); print_list(sl); std::cout << "splice all: " << "\n"; print_list(list1); std::cout << " <- "; print_list(sl); std::cout << " from: "; print_list(sl); list1.splice(list1.end(), sl); print_list(list1); print_list(sl); std::cout << "remove: "; print_list(list1); std::cout << "value " << arr[3].i << std::endl; list1.remove(arr[3]); print_list(list1); std::cout << "\nreverse: "; print_list(list1); list1.reverse(); print_list(list1); std::cout << "unique (no %2): "; print_list(list1); list1.unique([](const auto& v1, const auto& v2){ return v2.i > v1.i; }); print_list(list1); std::cout << "sort: "; print_list(list1); list1.sort(); print_list(list1); std::cout << "\n" << "Moving list" << std::endl; cc::const_list list2 = std::move(list1); print_list(list2); }