CPP09/ex02/inc/PmergeMe.hpp

40 lines
931 B
C++

#pragma once
#include "Jacobstahl.hpp"
#include <vector>
#include <deque>
#include <ostream>
#include <stdexcept>
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 getPrintableVector() const;
std::string getPrintableDeque() const;
private:
std::vector<int> _data_vector;
std::deque<int> _data_deque;
std::vector<int> _jacobstahl_numbers;
bool less(int a, int b);
int _comparisons;
bool areAllUnique() const;
template <typename Container>
void insert(Container &main, Container &pend, int start_index, int right, int group_size);
template <typename Container>
Container sort(Container &data, int level);
};
std::ostream &operator<<(std::ostream &os, const PmergeMe &obj);
#include "PmergeMe.tpp"