clock: passes tests, iteration 1 (?)

This commit is contained in:
Dmitry Kokorin 2016-03-18 14:30:57 +03:00
parent eb066800db
commit e9c27cd864
2 changed files with 106 additions and 0 deletions

71
cpp/clock/clock.cpp Normal file
View file

@ -0,0 +1,71 @@
#include "clock.h"
#include <cstring>
namespace date_independent {
namespace {
const minutes_t minutes_per_hour = 60;
const hours_t hours_per_day = 24;
const total_t minutes_per_day = hours_per_day * minutes_per_hour;
inline void make_date_independent(total_t total_minutes)
{
while (total_minutes < 0)
total_minutes += minutes_per_day;
total_minutes = total_minutes % minutes_per_day;
}
}
clock::clock(hours_t hours, minutes_t minutes)
{
total_minutes_ = minutes_per_hour*hours + minutes;
make_date_independent(total_minutes_);
}
bool clock::operator==(const clock &other) const
{
return total_minutes_ == other.total_minutes_;
}
bool clock::operator!=(const clock &other) const
{
return !(*this == other);
}
clock clock::at(hours_t hours, minutes_t minutes)
{
return clock(hours, minutes);
}
clock clock::plus(minutes_t minutes) const
{
clock result(*this);
result.total_minutes_ += minutes;
make_date_independent(result.total_minutes_);
return result;
}
clock clock::minus(minutes_t minutes) const
{
return plus(-minutes);
}
clock::operator std::string() const
{
minutes_t minutes = total_minutes_ % minutes_per_hour
hours_t hours = total_minutes_ / minutes_per_hour;
char buff[6];
snprintf(buff, 6, "%.2i:%.2i", hours, minutes);
return buff;
}
}