Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "test_runner.h"
- #include <numeric>
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- template<typename Iterator>
- class IteratorRange {
- private:
- Iterator first, last;
- public:
- IteratorRange(Iterator f, Iterator l) :
- first(f), last(l) {
- }
- Iterator begin() const {
- return first;
- }
- Iterator end() const {
- return last;
- }
- size_t size() const{
- return last - first;
- }
- };
- template <typename Iterator>
- class Paginator {
- private:
- vector<IteratorRange<Iterator>> vector_it;
- Iterator first;
- Iterator last;
- size_t page_size;
- public:
- Paginator(Iterator f, Iterator l, size_t page_size_) :
- first(f), last(l), page_size(page_size_) {
- while(first != last) {
- auto pr = first;
- for (size_t i = 0; i < page_size; ++i) {
- first++;
- if (first == last) {
- break;
- }
- }
- vector_it.push_back({pr, first});
- }
- }
- Iterator begin() const {
- return vector_it.begin();
- }
- Iterator end() const {
- return vector_it.end();
- }
- size_t size() const{
- return vector_it.size();
- }
- };
- template <typename C>
- auto Paginate(C& c, size_t page_size) {
- return Paginator{c.begin(), c.end(), page_size};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement