#pragma once #include "CalendarData.hpp" class OptionParser { private: constexpr static const int start_bit = 16; constexpr static const int options_num = 7; public: OptionParser() = default; std::unique_ptr setWeekDayOptions(const uint32_t &dataDB, std::unique_ptr weekDayOptions) { const uint32_t startBit = start_bit; const uint32_t numberOfOptions = options_num; for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) { if (dataDB & (1 << i)) { weekDayOptions->setData(i - startBit); } } return weekDayOptions; } uint32_t getDatabaseFieldValue(std::unique_ptr weekDayOptions) { uint32_t dataDB = 0; const uint32_t startBit = start_bit; const uint32_t numberOfOptions = options_num; for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) { if (weekDayOptions->getData(i - startBit)) { dataDB += (1 << i); } } return dataDB; } uint32_t getNoCustomValue(uint32_t dataDB) { /// Set all bits in custom field to zero /// DataDB input is not modifyed const uint32_t startBit = start_bit; const uint32_t numberOfOptions = options_num; for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) { if (dataDB & (1 << i)) { dataDB -= (1 << i); } } return dataDB; } };