1
0
Files
libcmo21/Unvirt/Utils.cpp

34 lines
1.0 KiB
C++
Raw Normal View History

#include "Utils.hpp"
#include <yycc/num/op.hpp>
#include <stdexcept>
namespace Unvirt::Utils {
PageBreaker::PageBreaker(size_t count, size_t count_per_page) : count(count), count_per_page(count_per_page) {
if (count_per_page == 0) throw std::logic_error("item count per page should not be zero");
}
PageBreaker::~PageBreaker() {}
bool PageBreaker::IsValidPage(size_t page) const {
if (page == 0) return true;
2026-01-29 21:03:09 +08:00
else return page <= this->GetMaxPage();
}
size_t PageBreaker::GetMaxPage() const {
if (this->count == 0) return 0;
else return yycc::num::op::div_ceil(this->count, this->count_per_page) - 1;
}
size_t PageBreaker::GetPageBeginIndex(size_t page) const {
if (this->IsValidPage(page)) return page * this->count_per_page;
else throw std::runtime_error("invalid page index");
}
size_t PageBreaker::GetPageEndIndex(size_t page) const {
if (this->IsValidPage(page)) return std::min(this->count, (page + 1) * this->count_per_page);
else throw std::runtime_error("invalid page index");
}
} // namespace Unvirt::Utils