63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
|
|
#ifndef RESERVATION_MANAGER_H
|
||
|
|
#define RESERVATION_MANAGER_H
|
||
|
|
|
||
|
|
#include "day_manager.h"
|
||
|
|
|
||
|
|
class ReservationManager {
|
||
|
|
private:
|
||
|
|
DayManager dayReference_;
|
||
|
|
QMap<qsizetype /* index */, DayManager> 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<QDateTime, QTime> reserve(const QTime &duration);
|
||
|
|
|
||
|
|
private:
|
||
|
|
DayManager &dayManager(qsizetype dayIndex);
|
||
|
|
QPair<QDateTime, QTime> 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
|