pimappsupport/chinesecalendaralg/originalsrc/ArithmeticalCal.cpp
branchRCL_3
changeset 12 38571fd2a704
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappsupport/chinesecalendaralg/originalsrc/ArithmeticalCal.cpp	Fri Mar 12 15:42:35 2010 +0200
@@ -0,0 +1,125 @@
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Implementation of the TArithmeticalCalendar class.
+// 
+//
+
+// System includes
+#include <e32math.h>
+
+// User includes
+#include "calconvArithmeticalCal.h"
+
+
+//
+// Construction/Destruction
+//
+
+//------------------------------------------------------
+// Class:       TArithmeticalCalendar
+// Function:    TArithmeticalCalendar
+// Arguments:   None
+//
+// Comments:    Constructor
+//
+// Return:      None
+//------------------------------------------------------
+TArithmeticalCalendar::TArithmeticalCalendar()
+	{
+	}
+
+//------------------------------------------------------
+// Class:       TArithmeticalCalendar
+// Function:    DaysMonthsElapsed
+// Arguments:   const TInt ,const TInt ,const TInt , const TInt ,const TInt
+//
+// Comments:    The use of this function varies between calendars 
+//				however since the form of the equation is the same it 
+//				is represented in this class.  The equation is use to 
+//				calculate the number of days in whole months of a particular
+//				year up to a particular date in the Gregorian and 
+//				Islamic calendars.  The Hebrew calendar uses this
+//				equation to calculate the number of whole months 
+//				since the start of the calendar.
+//				
+//
+// Return:      See comments
+//------------------------------------------------------
+TInt TArithmeticalCalendar::DaysMonthsElapsed(const TInt aYear) const
+	{
+	TReal tempReal;
+	TInt result;
+
+	tempReal = iOffset * iLeaps;
+	Mod(tempReal,tempReal,iCycle);
+	tempReal = ((iLeaps * aYear) - iLeaps + tempReal) / iCycle;
+	Floor(result,tempReal);
+	result = result + (iStdYearMonth * (aYear - KCalConvYearOffsetByOne));
+
+	return result;
+	}
+
+//------------------------------------------------------
+// Class:       TArithmeticalCalendar
+// Function:    IsLeapYear
+// Arguments:   const TInt , const TInt ,const TInt , const TInt
+//
+// Comments:    Determines whether the given year is a leap year.
+//				Gregorian uses a different implimentation.
+//
+// Return:      ETrue if leap year, else EFalse
+//------------------------------------------------------
+TBool TArithmeticalCalendar::IsLeapYear(const TInt aYear) const
+	{
+	TReal result;
+	TBool rtn;
+
+	result = (aYear + iOffset) * iLeaps;
+	Mod(result,result,iCycle);
+
+	if(result < iLeaps)
+		{
+		rtn = ETrue;
+		}
+	else
+		{
+		rtn = EFalse;
+		}
+
+	return rtn;
+	}
+
+//------------------------------------------------------
+// Class:       TArithmeticalCalendar
+// Function:    DayMonthInYear
+// Arguments:   None
+//
+// Comments:    This function Determines the month based on
+//				the number of days into the year it is
+//
+// Return:      TInt - Month
+//------------------------------------------------------
+TInt TArithmeticalCalendar::DayMonthInYear(const TInt aDays) const
+	{
+	TReal tempReal;
+	TInt result;
+
+	tempReal = iLeaps * iOffset;
+	Mod(tempReal,tempReal,iCycle);
+	tempReal = (iCycle * aDays) + (iCycle * iStdYearMonth) + iLeaps - KCalConvYearOffsetByOne + iCycle - tempReal;
+	tempReal = tempReal / ((iCycle * iStdYearMonth) + iLeaps);
+	Floor(result,tempReal);
+
+	return result;
+	}