#ifndef RESERVATION_MANAGER_H #define RESERVATION_MANAGER_H #include "day_manager.h" class ReservationManager { private: DayManager dayReference_; QMap days_; qsizetype createdRecords_; qsizetype dayBound_; qsizetype dayRange_; qsizetype excludedDays_; qsizetype lastIndex_; public: inline ReservationManager() noexcept; explicit ReservationManager(qsizetype dayRange, qsizetype dayBound, const DayManager &reference); inline DayManager reference() const noexcept; inline qsizetype createdRecords() const noexcept; inline void setDayBound(qsizetype dayBound); inline void setDayRange(qsizetype dayRange); void setReference(const DayManager &manager); qsizetype calculateAvailableDaysCount() const; qsizetype calculatePossibleReservations(qint64 requiredMs) const; qsizetype calculateAvailableSlotsCount() const; QPair reserve(const QTime &duration); private: DayManager &dayManager(qsizetype dayIndex); QPair reserve(qsizetype dayIndex, const QTime &duration); void prepareDaysRange(); private: friend class ReservationManagerTest; }; ReservationManager::ReservationManager() noexcept : createdRecords_(0), dayBound_(-1), excludedDays_(0), lastIndex_(-1), dayReference_(DayManager()) {} DayManager ReservationManager::reference() const noexcept { return dayReference_; } inline qsizetype ReservationManager::createdRecords() const noexcept { return createdRecords_; } void ReservationManager::setDayBound(qsizetype dayBound) { dayBound_ = dayBound; } void ReservationManager::setDayRange(qsizetype dayRange) { dayRange_ = dayRange; } #endif // RESERVATION_MANAGER_H