CPP09/ex02/inc/PmergeMe.hpp

37 lines
865 B
C++

#pragma once
#include "Jacobstahl.hpp"
#include <vector>
#include <deque>
#include <ostream>
#include <stdexcept>
template <typename Container>
class PmergeMe
{
public:
PmergeMe() = delete;
PmergeMe(const int argc, const char **argv);
PmergeMe(const PmergeMe &other);
~PmergeMe();
PmergeMe &operator=(const PmergeMe &other);
void sort();
std::string getString() const;
int getComparisons() const;
private:
Container _data;
std::vector<int> _jacobstahl_numbers;
int _comparisons;
bool less(int a, int b);
bool areAllUnique() const;
void insert(Container &main, Container &pend, int start_index, int right, int group_size);
Container sort(Container &data, int level);
};
template <typename Container>
std::ostream &operator<<(std::ostream &os, const PmergeMe<Container> &obj);
#include "PmergeMe.tpp"