include/tools/date.hxx | 6 - tools/source/datetime/datetime.cxx | 10 +- tools/source/datetime/tdate.cxx | 158 +++++++++++-------------------------- 3 files changed, 57 insertions(+), 117 deletions(-)
New commits: commit b75bc4b5de529f27fe56beb2d86f907411fa1e17 Author: Matteo Casalin <matteo.casa...@yahoo.com> Date: Wed Oct 28 12:33:53 2015 +0100 Date: avoid temporary conversions to sal_uIntPtr Change-Id: Ib52c5d1a55d17c572fd5be9a3ce36c6de7965220 diff --git a/tools/source/datetime/tdate.cxx b/tools/source/datetime/tdate.cxx index c27f1d0..808ac48 100644 --- a/tools/source/datetime/tdate.cxx +++ b/tools/source/datetime/tdate.cxx @@ -133,7 +133,7 @@ static Date lcl_DaysToDate( long nDays ) while ( bCalc ); sal_uInt16 nMonth = 1; - while ( (sal_uIntPtr)nTempDays > ImplDaysInMonth( nMonth, nYear ) ) + while ( nTempDays > static_cast<long>(ImplDaysInMonth( nMonth, nYear )) ) { nTempDays -= ImplDaysInMonth( nMonth, nYear ); nMonth++; @@ -191,7 +191,7 @@ void Date::SetYear( sal_uInt16 nNewYear ) DayOfWeek Date::GetDayOfWeek() const { - return (DayOfWeek)((sal_uIntPtr)(GetAsNormalizedDays()-1) % 7); + return static_cast<DayOfWeek>((GetAsNormalizedDays()-1) % 7); } sal_uInt16 Date::GetDayOfYear() const @@ -467,10 +467,7 @@ Date operator -( const Date& rDate, long nDays ) long operator -( const Date& rDate1, const Date& rDate2 ) { - sal_uIntPtr nTempDays1 = rDate1.GetAsNormalizedDays(); - sal_uIntPtr nTempDays2 = rDate2.GetAsNormalizedDays(); - - return nTempDays1 - nTempDays2; + return rDate1.GetAsNormalizedDays() - rDate2.GetAsNormalizedDays(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 1d927b23dfeef3cdc270c6c94e81e08180dabe76 Author: Matteo Casalin <matteo.casa...@yahoo.com> Date: Wed Oct 28 12:23:23 2015 +0100 Date: group common code Change-Id: I4d1bf6591d54621c33dc2ff0be0ecb59f1839581 diff --git a/tools/source/datetime/tdate.cxx b/tools/source/datetime/tdate.cxx index 811a0fd..c27f1d0 100644 --- a/tools/source/datetime/tdate.cxx +++ b/tools/source/datetime/tdate.cxx @@ -95,18 +95,23 @@ long Date::DateToDays( sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear ) return nDays; } -static void DaysToDate( long nDays, - sal_uInt16& rDay, sal_uInt16& rMonth, sal_uInt16& rYear ) +static Date lcl_DaysToDate( long nDays ) { + if ( nDays >= MAX_DAYS ) + return Date( 31, 12, 9999 ); + + if ( nDays <= 0 ) + return Date( 1, 0, 0 ); + long nTempDays; long i = 0; bool bCalc; + sal_uInt16 nYear; do { - nTempDays = (long)nDays; - rYear = (sal_uInt16)((nTempDays / 365) - i); - nTempDays -= ImpYearToDays(rYear); + nYear = (sal_uInt16)((nDays / 365) - i); + nTempDays = nDays - ImpYearToDays(nYear); bCalc = false; if ( nTempDays < 1 ) { @@ -117,7 +122,7 @@ static void DaysToDate( long nDays, { if ( nTempDays > 365 ) { - if ( (nTempDays != 366) || !ImpIsLeapYear( rYear ) ) + if ( (nTempDays != 366) || !ImpIsLeapYear( nYear ) ) { i--; bCalc = true; @@ -127,13 +132,14 @@ static void DaysToDate( long nDays, } while ( bCalc ); - rMonth = 1; - while ( (sal_uIntPtr)nTempDays > ImplDaysInMonth( rMonth, rYear ) ) + sal_uInt16 nMonth = 1; + while ( (sal_uIntPtr)nTempDays > ImplDaysInMonth( nMonth, nYear ) ) { - nTempDays -= ImplDaysInMonth( rMonth, rYear ); - rMonth++; + nTempDays -= ImplDaysInMonth( nMonth, nYear ); + nMonth++; } - rDay = (sal_uInt16)nTempDays; + + return Date( static_cast<sal_uInt16>(nTempDays), nMonth, nYear ); } Date::Date( DateInitSystem ) @@ -278,11 +284,7 @@ sal_uInt16 Date::GetWeekOfYear( DayOfWeek eStartDay, long nTempDays = GetAsNormalizedDays(); nTempDays += 6 - (GetDayOfWeek()+(7-(short)eStartDay)) % 7; - sal_uInt16 nDay; - sal_uInt16 nMonth; - sal_uInt16 nYear; - DaysToDate( nTempDays, nDay, nMonth, nYear ); - nWeek = Date( nDay, nMonth, nYear ).GetWeekOfYear( eStartDay, nMinimumNumberOfDaysInWeek ); + nWeek = lcl_DaysToDate( nTempDays ).GetWeekOfYear( eStartDay, nMinimumNumberOfDaysInWeek ); } } } @@ -409,84 +411,29 @@ bool Date::Normalize( sal_uInt16 & rDay, sal_uInt16 & rMonth, sal_uInt16 & rYear Date& Date::operator +=( long nDays ) { - sal_uInt16 nDay; - sal_uInt16 nMonth; - sal_uInt16 nYear; - - if (nDays == 0) - return *this; - - long nTempDays = GetAsNormalizedDays(); - - nTempDays += nDays; - if ( nTempDays > MAX_DAYS ) - setDateFromDMY( 31, 12, 9999 ); - else if ( nTempDays <= 0 ) - setDateFromDMY( 1, 100, 0 ); - else - { - DaysToDate( nTempDays, nDay, nMonth, nYear ); - setDateFromDMY( nDay, nMonth, nYear ); - } + if (nDays != 0) + *this = lcl_DaysToDate( GetAsNormalizedDays() + nDays ); return *this; } Date& Date::operator -=( long nDays ) { - sal_uInt16 nDay; - sal_uInt16 nMonth; - sal_uInt16 nYear; - - if (nDays == 0) - return *this; - - long nTempDays = GetAsNormalizedDays(); - - nTempDays -= nDays; - if ( nTempDays > MAX_DAYS ) - setDateFromDMY( 31, 12, 9999 ); - else if ( nTempDays <= 0 ) - setDateFromDMY( 1, 100, 0 ); - else - { - DaysToDate( nTempDays, nDay, nMonth, nYear ); - setDateFromDMY( nDay, nMonth, nYear ); - } + if (nDays != 0) + *this = lcl_DaysToDate( GetAsNormalizedDays() - nDays ); return *this; } Date& Date::operator ++() { - sal_uInt16 nDay; - sal_uInt16 nMonth; - sal_uInt16 nYear; - long nTempDays = GetAsNormalizedDays(); - - if ( nTempDays < MAX_DAYS ) - { - nTempDays++; - DaysToDate( nTempDays, nDay, nMonth, nYear ); - setDateFromDMY( nDay, nMonth, nYear ); - } - + *this = lcl_DaysToDate( GetAsNormalizedDays() + 1 ); return *this; } Date& Date::operator --() { - sal_uInt16 nDay; - sal_uInt16 nMonth; - sal_uInt16 nYear; - long nTempDays = GetAsNormalizedDays(); - - if ( nTempDays > 1 ) - { - nTempDays--; - DaysToDate( nTempDays, nDay, nMonth, nYear ); - setDateFromDMY( nDay, nMonth, nYear ); - } + *this = lcl_DaysToDate( GetAsNormalizedDays() - 1 ); return *this; } commit a3de32acc06cfcf9bb343a29c4b9854c92645f70 Author: Matteo Casalin <matteo.casa...@yahoo.com> Date: Wed Oct 28 11:23:36 2015 +0100 Rename (private) Date::init and reuse it Change-Id: I3123876860cf6cce1e16c8f516f3d08fa7e15d83 diff --git a/include/tools/date.hxx b/include/tools/date.hxx index 22cec9a..ffb425c 100644 --- a/include/tools/date.hxx +++ b/include/tools/date.hxx @@ -32,7 +32,7 @@ class TOOLS_DLLPUBLIC SAL_WARN_UNUSED Date { private: sal_uInt32 nDate; - void init( sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear ) + void setDateFromDMY( sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear ) { nDate = ( sal_uInt32( nDay % 100 ) ) + ( ( sal_uInt32( nMonth % 100 ) ) * 100 ) + ( ( sal_uInt32( nYear % 10000 ) ) * 10000); } @@ -56,11 +56,11 @@ public: Date( const Date& rDate ) { nDate = rDate.nDate; } Date( sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear ) - { init(nDay, nMonth, nYear); } + { setDateFromDMY(nDay, nMonth, nYear); } Date( const css::util::Date& _rDate ) { SAL_WARN_IF(_rDate.Year < 0, "tools.datetime", "Negative year in css::util::Date to ::Date conversion"); - init(_rDate.Day, _rDate.Month, _rDate.Year); + setDateFromDMY(_rDate.Day, _rDate.Month, _rDate.Year); } Date( const css::util::DateTime& _rDateTime ); diff --git a/tools/source/datetime/tdate.cxx b/tools/source/datetime/tdate.cxx index b957441..811a0fd 100644 --- a/tools/source/datetime/tdate.cxx +++ b/tools/source/datetime/tdate.cxx @@ -143,9 +143,7 @@ Date::Date( DateInitSystem ) GetLocalTime( &aDateTime ); // Combine to date - nDate = ((sal_uIntPtr)aDateTime.wDay) + - (((sal_uIntPtr)aDateTime.wMonth)*100) + - (((sal_uIntPtr)aDateTime.wYear)*10000); + setDateFromDMY( aDateTime.wDay, aDateTime.wMonth, aDateTime.wYear ); #else time_t nTmpTime; struct tm aTime; @@ -156,42 +154,33 @@ Date::Date( DateInitSystem ) // compute date if ( localtime_r( &nTmpTime, &aTime ) ) { - nDate = ((sal_uIntPtr)aTime.tm_mday) + - (((sal_uIntPtr)(aTime.tm_mon+1))*100) + - (((sal_uIntPtr)(aTime.tm_year+1900))*10000); + setDateFromDMY( static_cast<sal_uInt16>(aTime.tm_mday), + static_cast<sal_uInt16>(aTime.tm_mon+1), + static_cast<sal_uInt16>(aTime.tm_year+1900) ); } else - nDate = 1 + 100 + (((sal_uIntPtr)1900)*10000); + setDateFromDMY( 1, 100, 1900 ); #endif } Date::Date( const ::com::sun::star::util::DateTime& rDateTime ) { - init( rDateTime.Day, rDateTime.Month, rDateTime.Year ); + setDateFromDMY( rDateTime.Day, rDateTime.Month, rDateTime.Year ); } void Date::SetDay( sal_uInt16 nNewDay ) { - sal_uIntPtr nMonth = GetMonth(); - sal_uIntPtr nYear = GetYear(); - - nDate = ((sal_uIntPtr)(nNewDay%100)) + (nMonth*100) + (nYear*10000); + setDateFromDMY( nNewDay, GetMonth(), GetYear() ); } void Date::SetMonth( sal_uInt16 nNewMonth ) { - sal_uIntPtr nDay = GetDay(); - sal_uIntPtr nYear = GetYear(); - - nDate = nDay + (((sal_uIntPtr)(nNewMonth%100))*100) + (nYear*10000); + setDateFromDMY( GetDay(), nNewMonth, GetYear() ); } void Date::SetYear( sal_uInt16 nNewYear ) { - sal_uIntPtr nDay = GetDay(); - sal_uIntPtr nMonth = GetMonth(); - - nDate = nDay + (nMonth*100) + (((sal_uIntPtr)(nNewYear%10000))*10000); + setDateFromDMY( GetDay(), GetMonth(), nNewYear ); } DayOfWeek Date::GetDayOfWeek() const @@ -364,9 +353,7 @@ bool Date::Normalize() if (!Normalize( nDay, nMonth, nYear)) return false; - SetDay( nDay); - SetMonth( nMonth); - SetYear( nYear); + setDateFromDMY( nDay, nMonth, nYear ); return true; } @@ -433,13 +420,13 @@ Date& Date::operator +=( long nDays ) nTempDays += nDays; if ( nTempDays > MAX_DAYS ) - nDate = 31 + (12*100) + (((sal_uIntPtr)9999)*10000); + setDateFromDMY( 31, 12, 9999 ); else if ( nTempDays <= 0 ) - nDate = 1 + 100; + setDateFromDMY( 1, 100, 0 ); else { DaysToDate( nTempDays, nDay, nMonth, nYear ); - nDate = ((sal_uIntPtr)nDay) + (((sal_uIntPtr)nMonth)*100) + (((sal_uIntPtr)nYear)*10000); + setDateFromDMY( nDay, nMonth, nYear ); } return *this; @@ -458,13 +445,13 @@ Date& Date::operator -=( long nDays ) nTempDays -= nDays; if ( nTempDays > MAX_DAYS ) - nDate = 31 + (12*100) + (((sal_uIntPtr)9999)*10000); + setDateFromDMY( 31, 12, 9999 ); else if ( nTempDays <= 0 ) - nDate = 1 + 100; + setDateFromDMY( 1, 100, 0 ); else { DaysToDate( nTempDays, nDay, nMonth, nYear ); - nDate = ((sal_uIntPtr)nDay) + (((sal_uIntPtr)nMonth)*100) + (((sal_uIntPtr)nYear)*10000); + setDateFromDMY( nDay, nMonth, nYear ); } return *this; @@ -481,7 +468,7 @@ Date& Date::operator ++() { nTempDays++; DaysToDate( nTempDays, nDay, nMonth, nYear ); - nDate = ((sal_uIntPtr)nDay) + (((sal_uIntPtr)nMonth)*100) + (((sal_uIntPtr)nYear)*10000); + setDateFromDMY( nDay, nMonth, nYear ); } return *this; @@ -498,7 +485,7 @@ Date& Date::operator --() { nTempDays--; DaysToDate( nTempDays, nDay, nMonth, nYear ); - nDate = ((sal_uIntPtr)nDay) + (((sal_uIntPtr)nMonth)*100) + (((sal_uIntPtr)nYear)*10000); + setDateFromDMY( nDay, nMonth, nYear ); } return *this; } commit 24c28ac7b08848f80001d6e69595804d3ab64b47 Author: Matteo Casalin <matteo.casa...@yahoo.com> Date: Tue Oct 27 23:14:31 2015 +0100 Date: use support function for mapping years to days and reduce scope for other local support functions. Change-Id: Id0d6b9a04ff67620f6dca39d62443a3f191d75ee diff --git a/tools/source/datetime/tdate.cxx b/tools/source/datetime/tdate.cxx index b970d51..b957441 100644 --- a/tools/source/datetime/tdate.cxx +++ b/tools/source/datetime/tdate.cxx @@ -31,6 +31,15 @@ static const sal_uInt16 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30, #define MAX_DAYS 3636532 +namespace +{ + +inline long ImpYearToDays( sal_uInt16 nYear ) +{ + const long nYr(static_cast<long>(nYear) - 1); + return nYr*365 + nYr/4 - nYr/100 + nYr/400; +} + inline bool ImpIsLeapYear( sal_uInt16 nYear ) { return ( ( ((nYear % 4) == 0) && ((nYear % 100) != 0) ) || @@ -51,6 +60,8 @@ inline sal_uInt16 ImplDaysInMonth( sal_uInt16 nMonth, sal_uInt16 nYear ) } } +} + // static sal_uInt16 Date::GetDaysInMonth( sal_uInt16 nMonth, sal_uInt16 nYear ) { @@ -75,12 +86,9 @@ long Date::GetAsNormalizedDays() const long Date::DateToDays( sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear ) { - long nDays; - Normalize( nDay, nMonth, nYear); - nDays = ((sal_uIntPtr)nYear-1) * 365; - nDays += ((nYear-1) / 4) - ((nYear-1) / 100) + ((nYear-1) / 400); + long nDays = ImpYearToDays(nYear); for( sal_uInt16 i = 1; i < nMonth; i++ ) nDays += ImplDaysInMonth(i,nYear); nDays += nDay; @@ -98,8 +106,7 @@ static void DaysToDate( long nDays, { nTempDays = (long)nDays; rYear = (sal_uInt16)((nTempDays / 365) - i); - nTempDays -= ((sal_uIntPtr)rYear-1) * 365; - nTempDays -= ((rYear-1) / 4) - ((rYear-1) / 100) + ((rYear-1) / 400); + nTempDays -= ImpYearToDays(rYear); bCalc = false; if ( nTempDays < 1 ) { commit 8e369625a442324d5a639fefc2481d421cd9b706 Author: Matteo Casalin <matteo.casa...@yahoo.com> Date: Tue Oct 27 22:32:55 2015 +0100 Avoid intermediate cast to sal_uIntPtr Change-Id: Ia7b5f519e381318f1d1cd6d0f982d22e8bbdffa7 diff --git a/tools/source/datetime/datetime.cxx b/tools/source/datetime/datetime.cxx index 8399415..b56d20c 100644 --- a/tools/source/datetime/datetime.cxx +++ b/tools/source/datetime/datetime.cxx @@ -265,10 +265,12 @@ DateTime DateTime::CreateFromWin32FileDateTime( const sal_uInt32 & rLower, const Date _aDate( (sal_uInt16)( nDays + 1 ), nMonths, sal::static_int_cast< sal_uInt16 >(nYears + 1601) ); - tools::Time _aTime( sal_uIntPtr( ( aTime / ( a100nPerSecond * 60 * 60 ) ) % sal_Int64( 24 ) ), - sal_uIntPtr( ( aTime / ( a100nPerSecond * 60 ) ) % sal_Int64( 60 ) ), - sal_uIntPtr( ( aTime / ( a100nPerSecond ) ) % sal_Int64( 60 ) ), - (aTime % a100nPerSecond) * 100 ); + tools::Time _aTime( + static_cast<sal_uInt32>( ( aTime / ( a100nPerSecond * 60 * 60 ) ) % sal_Int64( 24 ) ), + static_cast<sal_uInt32>( ( aTime / ( a100nPerSecond * 60 ) ) % sal_Int64( 60 ) ), + static_cast<sal_uInt32>( ( aTime / ( a100nPerSecond ) ) % sal_Int64( 60 ) ), + static_cast<sal_uInt64>(aTime % a100nPerSecond) * 100 + ); return DateTime( _aDate, _aTime ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits