* Added copy constructors.

* Let the AddHours(), Add*() return itself, so that they can be chained.
 * Made the previous *Name() methods static and added non-static versions that
   take the day/month of the object.
 * Make BDateTime::Date/Time() return references (const or non-const).
 * Fixed the BDateTime comparison operators.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35894 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2010-03-17 18:51:41 +00:00
parent 991ab2d375
commit bbba047c2d
2 changed files with 164 additions and 48 deletions

View File

@ -33,6 +33,7 @@ enum diff_type {
class BTime {
public:
BTime();
BTime(const BTime& other);
BTime(int32 hour, int32 minute, int32 second,
int32 microsecond = 0);
BTime(const BMessage* archive);
@ -52,11 +53,11 @@ public:
bool SetTime(int32 hour, int32 minute, int32 second,
int32 microsecond = 0);
void AddHours(int32 hours);
void AddMinutes(int32 minutes);
void AddSeconds(int32 seconds);
void AddMilliseconds(int32 milliseconds);
void AddMicroseconds(int32 microseconds);
BTime& AddHours(int32 hours);
BTime& AddMinutes(int32 minutes);
BTime& AddSeconds(int32 seconds);
BTime& AddMilliseconds(int32 milliseconds);
BTime& AddMicroseconds(int32 microseconds);
int32 Hour() const;
int32 Minute() const;
@ -77,7 +78,7 @@ public:
private:
bigtime_t _Microseconds() const;
void _AddMicroseconds(bigtime_t microseconds);
BTime& _AddMicroseconds(bigtime_t microseconds);
bool _SetTime(bigtime_t hour, bigtime_t minute,
bigtime_t second, bigtime_t microsecond);
@ -89,6 +90,7 @@ private:
class BDate {
public:
BDate();
BDate(const BDate& other);
BDate(int32 year, int32 month, int32 day);
BDate(const BMessage* archive);
~BDate();
@ -126,11 +128,17 @@ public:
int32 DaysInYear() const;
int32 DaysInMonth() const;
BString ShortDayName(int32 day) const;
BString ShortMonthName(int32 month) const;
BString ShortDayName() const;
static BString ShortDayName(int32 day);
BString LongDayName(int32 day) const;
BString LongMonthName(int32 month) const;
BString ShortMonthName() const;
static BString ShortMonthName(int32 month);
BString LongDayName() const;
static BString LongDayName(int32 day);
BString LongMonthName() const;
static BString LongMonthName(int32 month);
int32 DateToJulianDay() const;
static BDate JulianDayToDate(int32 julianDay);
@ -171,10 +179,12 @@ public:
static BDateTime CurrentDateTime(time_type type);
void SetDateTime(const BDate &date, const BTime &time);
BDate Date() const;
BDate& Date();
const BDate& Date() const;
void SetDate(const BDate &date);
BTime Time() const;
BTime& Time();
const BTime& Time() const;
void SetTime(const BTime &time);
int32 Time_t() const;

View File

@ -38,7 +38,18 @@ const bigtime_t kMicrosecondsPerDay = 86400000000LL;
but be aware IsValid() will return false.
*/
BTime::BTime()
: fMicroseconds(-1)
:
fMicroseconds(-1)
{
}
/*!
Constructs a new BTime object as a copy of \c other.
*/
BTime::BTime(const BTime& other)
:
fMicroseconds(other.fMicroseconds)
{
}
@ -51,7 +62,8 @@ BTime::BTime()
specified time is invalid, the time is not set and IsValid() returns false.
*/
BTime::BTime(int32 hour, int32 minute, int32 second, int32 microsecond)
: fMicroseconds(-1)
:
fMicroseconds(-1)
{
_SetTime(hour, minute, second, microsecond);
}
@ -61,7 +73,8 @@ BTime::BTime(int32 hour, int32 minute, int32 second, int32 microsecond)
Constructs a new BTime object from the provided BMessage archive.
*/
BTime::BTime(const BMessage* archive)
: fMicroseconds(-1)
:
fMicroseconds(-1)
{
if (archive == NULL)
return;
@ -192,10 +205,11 @@ BTime::SetTime(int32 hour, int32 minute, int32 second, int32 microsecond)
Adds \c hours to the current time. If the passed value is negativ it will
become earlier. Note: The time will wrap if it passes midnight.
*/
void
BTime&
BTime::AddHours(int32 hours)
{
_AddMicroseconds(bigtime_t(hours % kHoursPerDay) * kMicrosecondsPerHour);
return _AddMicroseconds(bigtime_t(hours % kHoursPerDay)
* kMicrosecondsPerHour);
}
@ -203,11 +217,11 @@ BTime::AddHours(int32 hours)
Adds \c minutes to the current time. If the passed value is negativ it will
become earlier. Note: The time will wrap if it passes midnight.
*/
void
BTime&
BTime::AddMinutes(int32 minutes)
{
_AddMicroseconds(bigtime_t(minutes % kMinutesPerDay) *
kMicrosecondsPerMinute);
return _AddMicroseconds(bigtime_t(minutes % kMinutesPerDay)
* kMicrosecondsPerMinute);
}
@ -215,11 +229,11 @@ BTime::AddMinutes(int32 minutes)
Adds \c seconds to the current time. If the passed value is negativ it will
become earlier. Note: The time will wrap if it passes midnight.
*/
void
BTime&
BTime::AddSeconds(int32 seconds)
{
_AddMicroseconds(bigtime_t(seconds % kSecondsPerDay) *
kMicrosecondsPerSecond);
return _AddMicroseconds(bigtime_t(seconds % kSecondsPerDay)
* kMicrosecondsPerSecond);
}
@ -227,10 +241,11 @@ BTime::AddSeconds(int32 seconds)
Adds \c milliseconds to the current time. If the passed value is negativ it
will become earlier. Note: The time will wrap if it passes midnight.
*/
void
BTime&
BTime::AddMilliseconds(int32 milliseconds)
{
_AddMicroseconds(bigtime_t(milliseconds % kMillisecondsPerDay) * 1000);
return _AddMicroseconds(bigtime_t(milliseconds % kMillisecondsPerDay)
* 1000);
}
@ -238,10 +253,10 @@ BTime::AddMilliseconds(int32 milliseconds)
Adds \c microseconds to the current time. If the passed value is negativ it
will become earlier. Note: The time will wrap if it passes midnight.
*/
void
BTime&
BTime::AddMicroseconds(int32 microseconds)
{
_AddMicroseconds(microseconds);
return _AddMicroseconds(microseconds);
}
@ -396,7 +411,7 @@ BTime::operator>=(const BTime& time) const
}
void
BTime&
BTime::_AddMicroseconds(bigtime_t microseconds)
{
bigtime_t count = 0;
@ -405,6 +420,7 @@ BTime::_AddMicroseconds(bigtime_t microseconds)
kMicrosecondsPerDay;
}
fMicroseconds = (_Microseconds() + microseconds + count) % kMicrosecondsPerDay;
return *this;
}
@ -432,9 +448,22 @@ BTime::_SetTime(bigtime_t hour, bigtime_t minute, bigtime_t second,
Constructs a new BDate object. IsValid() will return false.
*/
BDate::BDate()
: fDay(-1),
fYear(0),
fMonth(-1)
:
fDay(-1),
fYear(0),
fMonth(-1)
{
}
/*!
Constructs a new BDate object as a copy of \c other.
*/
BDate::BDate(const BDate& other)
:
fDay(other.fDay),
fYear(other.fYear),
fMonth(other.fMonth)
{
}
@ -458,9 +487,10 @@ BDate::BDate(int32 year, int32 month, int32 day)
Constructs a new BDate object from the provided archive.
*/
BDate::BDate(const BMessage* archive)
: fDay(-1),
fYear(0),
fMonth(-1)
:
fDay(-1),
fYear(0),
fMonth(-1)
{
if (archive == NULL)
return;
@ -863,13 +893,23 @@ BDate::DaysInMonth() const
}
/*!
Returns the short day name of this object.
*/
BString
BDate::ShortDayName() const
{
return ShortDayName(DayOfWeek());
}
/*!
Returns the short day name in case of an valid day, otherwise an empty
string. The passed \c day must be in the range of 1 to 7 while 1 stands for
monday.
*/
BString
BDate::ShortDayName(int32 day) const
/*static*/ BString
BDate::ShortDayName(int32 day)
{
if (day < 1 || day > 7)
return BString();
@ -885,12 +925,22 @@ BDate::ShortDayName(int32 day) const
}
/*!
Returns the short month name of this object.
*/
BString
BDate::ShortMonthName() const
{
return ShortMonthName(Month());
}
/*!
Returns the short month name in case of an valid month, otherwise an empty
string. The passed \c month must be in the range of 1 to 12.
*/
BString
BDate::ShortMonthName(int32 month) const
/*static*/ BString
BDate::ShortMonthName(int32 month)
{
if (month < 1 || month > 12)
return BString();
@ -906,13 +956,23 @@ BDate::ShortMonthName(int32 month) const
}
/*!
Returns the long day name of this object's week day.
*/
BString
BDate::LongDayName() const
{
return LongDayName(DayOfWeek());
}
/*!
Returns the long day name in case of an valid day, otherwise an empty
string. The passed \c day must be in the range of 1 to 7 while 1 stands for
monday.
*/
BString
BDate::LongDayName(int32 day) const
/*static*/ BString
BDate::LongDayName(int32 day)
{
if (day < 1 || day > 7)
return BString();
@ -928,12 +988,22 @@ BDate::LongDayName(int32 day) const
}
/*!
Returns the long month name of this object's month.
*/
BString
BDate::LongMonthName() const
{
return LongMonthName(Month());
}
/*!
Returns the long month name in case of an valid month, otherwise an empty
string. The passed \c month must be in the range of 1 to 12.
*/
BString
BDate::LongMonthName(int32 month) const
/*static*/ BString
BDate::LongMonthName(int32 month)
{
if (month < 1 || month > 12)
return BString();
@ -1218,7 +1288,17 @@ BDateTime::SetDateTime(const BDate& date, const BTime& time)
/*!
Returns the current date of this object.
*/
BDate
BDate&
BDateTime::Date()
{
return fDate;
}
/*!
Returns the current date of this object.
*/
const BDate&
BDateTime::Date() const
{
return fDate;
@ -1238,7 +1318,17 @@ BDateTime::SetDate(const BDate& date)
/*!
Returns the current time of this object.
*/
BTime
BTime&
BDateTime::Time()
{
return fTime;
}
/*!
Returns the current time of this object.
*/
const BTime&
BDateTime::Time() const
{
return fTime;
@ -1328,7 +1418,11 @@ BDateTime::operator==(const BDateTime& dateTime) const
bool
BDateTime::operator<(const BDateTime& dateTime) const
{
return fTime < dateTime.fTime && fDate < dateTime.fDate;
if (fDate < dateTime.fDate)
return true;
if (fDate == dateTime.fDate)
return fTime < dateTime.fTime;
return false;
}
@ -1339,7 +1433,11 @@ BDateTime::operator<(const BDateTime& dateTime) const
bool
BDateTime::operator<=(const BDateTime& dateTime) const
{
return fTime <= dateTime.fTime && fDate <= dateTime.fDate;
if (fDate < dateTime.fDate)
return true;
if (fDate == dateTime.fDate)
return fTime <= dateTime.fTime;
return false;
}
@ -1349,7 +1447,11 @@ BDateTime::operator<=(const BDateTime& dateTime) const
bool
BDateTime::operator>(const BDateTime& dateTime) const
{
return fTime > dateTime.fTime && fDate > dateTime.fDate;
if (fDate > dateTime.fDate)
return true;
if (fDate == dateTime.fDate)
return fTime > dateTime.fTime;
return false;
}
@ -1360,7 +1462,11 @@ BDateTime::operator>(const BDateTime& dateTime) const
bool
BDateTime::operator>=(const BDateTime& dateTime) const
{
return fTime >= dateTime.fTime && fDate >= dateTime.fDate;
if (fDate > dateTime.fDate)
return true;
if (fDate == dateTime.fDate)
return fTime >= dateTime.fTime;
return false;
}