Add pagination to b_manage

This commit is contained in:
2024-03-14 23:41:05 +01:00
parent cdf339856a
commit bf5dabb169
6 changed files with 89 additions and 15 deletions

29
src/manage/Paginator.hpp Normal file
View File

@@ -0,0 +1,29 @@
#pragma once
#include <utility>
class Paginator {
public:
Paginator() = default;
Paginator(int pageSize, int total) : pageSize(pageSize), total(total)
{
numPages = (total + pageSize - 1) / pageSize;
};
~Paginator() = default;
int getPageSize() const { return pageSize; }
int getTotal() const { return total; }
std::pair<int, int> getOffset(int page) const
{
if (page > numPages)
throw std::out_of_range("page out of range");
return { (page - 1) * pageSize, std::min(total - 1, page * pageSize - 1) };
}
int getPages() const { return numPages; }
bool valid(int page) const { return page > 0 && page <= numPages; }
bool hasPrev(int page) const { return page > 1; }
bool hasNext(int page) const { return page < getPages(); }
private:
int pageSize;
int total;
int numPages;
};