166 lines
3.4 KiB
C++
166 lines
3.4 KiB
C++
//
|
|
// Created by Patrick Maschek on 01.02.2024.
|
|
//
|
|
|
|
#include <iostream>
|
|
|
|
#include <const_list.h>
|
|
|
|
class TestA : public cc::const_list_node<TestA> {
|
|
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<TestA>& 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<TestA>::iterator start, cc::const_list<TestA>::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<TestA> 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<TestA> 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<TestA> 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<TestA> list2 = std::move(list1);
|
|
|
|
print_list(list2);
|
|
} |