calendarui/regionalplugins/calenregionalutil/src/calensolarterms.cpp
changeset 55 2c54b51f39c4
parent 45 b6db4fd4947b
child 89 b57382753122
equal deleted inserted replaced
51:0b38fc5b94c6 55:2c54b51f39c4
    25 
    25 
    26 #include "CalenLunarPaths.h"
    26 #include "CalenLunarPaths.h"
    27 
    27 
    28 #include <f32file.h>
    28 #include <f32file.h>
    29 #include <s32file.h>
    29 #include <s32file.h>
       
    30 #include "OstTraceDefinitions.h"
       
    31 #ifdef OST_TRACE_COMPILER_IN_USE
       
    32 #include "calensolartermsTraces.h"
       
    33 #endif
       
    34 
    30 
    35 
    31 
    36 
    32 // CONSTANTS
    37 // CONSTANTS
    33 _LIT(KSolarTermsFile, "SolarItems");
    38 _LIT(KSolarTermsFile, "SolarItems");
    34 // search path for solar item file
    39 // search path for solar item file
    47 // 
    52 // 
    48 // ---------------------------------------------------------------------------
    53 // ---------------------------------------------------------------------------
    49 //
    54 //
    50 EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs)
    55 EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs)
    51     {
    56     {
    52     TRACE_ENTRY_POINT;
    57     OstTraceFunctionEntry0( CCALENSOLARTERMS_NEWL_ENTRY );
    53     
       
    54     CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs);
    58     CCalenSolarTerms* self = new (ELeave) CCalenSolarTerms(aFs);
    55     CleanupStack::PushL( self );
    59     CleanupStack::PushL( self );
    56     self->ConstructL();
    60     self->ConstructL();
    57     CleanupStack::Pop( self );
    61     CleanupStack::Pop( self );
    58     
    62     
    59     TRACE_EXIT_POINT;
    63     OstTraceFunctionExit0( CCALENSOLARTERMS_NEWL_EXIT );
    60     return self;
    64     return self;
    61     }
    65     }
    62 
    66 
    63 
    67 
    64 // ---------------------------------------------------------------------------
    68 // ---------------------------------------------------------------------------
    65 //
    69 //
    66 // ---------------------------------------------------------------------------
    70 // ---------------------------------------------------------------------------
    67 //
    71 //
    68 EXPORT_C CCalenSolarTerms::~CCalenSolarTerms()
    72 EXPORT_C CCalenSolarTerms::~CCalenSolarTerms()
    69     {
    73     {
    70     TRACE_ENTRY_POINT;
    74     OstTraceFunctionEntry0( CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY );
    71     TRACE_EXIT_POINT;
    75     OstTraceFunctionExit0( CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT );
    72     }
    76     }
    73 
    77 
    74 
    78 
    75 // ---------------------------------------------------------------------------
    79 // ---------------------------------------------------------------------------
    76 // 
    80 // 
    77 // ---------------------------------------------------------------------------
    81 // ---------------------------------------------------------------------------
    78 //
    82 //
    79 EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate )
    83 EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate )
    80     {
    84     {
    81     TRACE_ENTRY_POINT;
    85     OstTraceFunctionEntry0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_ENTRY );
    82     
       
    83     ReadSolarTermsL( aDate );
    86     ReadSolarTermsL( aDate );
    84     if ( HasSolarTermDataAvailable( aDate ) )
    87     if ( HasSolarTermDataAvailable( aDate ) )
    85         {
    88         {
    86         // Solar festival data is available for this date 
    89         // Solar festival data is available for this date 
    87         for (TInt i(0); i < KSolarTermCount; i++)
    90         for (TInt i(0); i < KSolarTermCount; i++)
   101                 // to 
   104                 // to 
   102                 // Li Chun (~4.2.), ..., ..., Da Han (~22.1)
   105                 // Li Chun (~4.2.), ..., ..., Da Han (~22.1)
   103                 i += KSolarTermCount - 2;
   106                 i += KSolarTermCount - 2;
   104                 TInt foundIndex = i % KSolarTermCount;
   107                 TInt foundIndex = i % KSolarTermCount;
   105                 
   108                 
   106                 TRACE_EXIT_POINT;
   109                 OstTraceFunctionExit0( CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT );
   107                 return foundIndex;
   110                 return foundIndex;
   108                 }
   111                 }
   109             }
   112             }
   110         TRACE_EXIT_POINT;
   113         OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT );
   111         return KErrNotFound;
   114         return KErrNotFound;
   112         }
   115         }
   113     else
   116     else
   114         {
   117         {
   115         // Solar festival data is NOT available for this date 
   118         // Solar festival data is NOT available for this date 
   116         TRACE_EXIT_POINT;
   119         OstTraceFunctionExit0( DUP2_CCALENSOLARTERMS_CHECKSOLARTERMDATEL_EXIT );
   117         return KErrNotSupported;
   120         return KErrNotSupported;
   118         }
   121         }
   119     }
   122     }
   120 
   123 
   121 
   124 
   124 // ?description_if_needed
   127 // ?description_if_needed
   125 // ---------------------------------------------------------------------------
   128 // ---------------------------------------------------------------------------
   126 //
   129 //
   127 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs )
   130 CCalenSolarTerms::CCalenSolarTerms(RFs& aFs) : iFs( aFs )
   128     {
   131     {
   129     TRACE_ENTRY_POINT;
   132     OstTraceFunctionEntry0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_ENTRY );
   130     TRACE_EXIT_POINT;
   133     OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_CCALENSOLARTERMS_EXIT );
   131     }
   134     }
   132 
   135 
   133 
   136 
   134 // ---------------------------------------------------------------------------
   137 // ---------------------------------------------------------------------------
   135 // ?description_if_needed
   138 // ?description_if_needed
   136 // ---------------------------------------------------------------------------
   139 // ---------------------------------------------------------------------------
   137 //
   140 //
   138 void CCalenSolarTerms::ConstructL()
   141 void CCalenSolarTerms::ConstructL()
   139     {
   142     {
   140     TRACE_ENTRY_POINT;
   143     OstTraceFunctionEntry0( CCALENSOLARTERMS_CONSTRUCTL_ENTRY );
   141     TRACE_EXIT_POINT;
   144     OstTraceFunctionExit0( CCALENSOLARTERMS_CONSTRUCTL_EXIT );
   142     }
   145     }
   143 
   146 
   144 
   147 
   145 // ---------------------------------------------------------------------------
   148 // ---------------------------------------------------------------------------
   146 // ?description_if_needed
   149 // ?description_if_needed
   147 // ---------------------------------------------------------------------------
   150 // ---------------------------------------------------------------------------
   148 //
   151 //
   149 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const
   152 TBool CCalenSolarTerms::HasSolarTermDataAvailable(const TDateTime& aDate) const
   150     {
   153     {
   151     TRACE_ENTRY_POINT;
   154     OstTraceFunctionEntry0( CCALENSOLARTERMS_HASSOLARTERMDATAAVAILABLE_ENTRY );
   152     
       
   153     // Note: day parameter for TDateTime starts from 0, not from 1
   155     // Note: day parameter for TDateTime starts from 0, not from 1
   154     const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 );
   156     const TDateTime KMinAvailable( KFirstSolarTermYear, EJanuary, 0, 0, 0, 0, 0 );
   155     const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 );
   157     const TDateTime KMaxAvailable( KLastSolarTermYear, EDecember, 31 - 1, 23, 59, 59, 0 );
   156     
   158     
   157     TRACE_EXIT_POINT;
       
   158     return TTime(KMinAvailable) <= TTime(aDate) &&
   159     return TTime(KMinAvailable) <= TTime(aDate) &&
   159            TTime(aDate) <= TTime(KMaxAvailable);
   160            TTime(aDate) <= TTime(KMaxAvailable);
   160     }
   161     }
   161 
   162 
   162 
   163 
   165 // from "SolarItems" file
   166 // from "SolarItems" file
   166 // ---------------------------------------------------------
   167 // ---------------------------------------------------------
   167 //
   168 //
   168 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate)
   169 void CCalenSolarTerms::ReadSolarTermsL(TDateTime aDate)
   169     {
   170     {
   170     TRACE_ENTRY_POINT;
   171     OstTraceFunctionEntry0( CCALENSOLARTERMS_READSOLARTERMSL_ENTRY );
   171     
       
   172     // Caches one year of solar items
   172     // Caches one year of solar items
   173     if ( ! HasSolarTermDataAvailable( aDate ) )
   173     if ( ! HasSolarTermDataAvailable( aDate ) )
   174         {
   174         {
       
   175         OstTraceFunctionExit0( CCALENSOLARTERMS_READSOLARTERMSL_EXIT );
   175         return;
   176         return;
   176         }
   177         }
   177 
   178 
   178     TInt year = aDate.Year();
   179     TInt year = aDate.Year();
   179 
   180 
   203              }
   204              }
   204 
   205 
   205         CleanupStack::PopAndDestroy(2); // readStream, file
   206         CleanupStack::PopAndDestroy(2); // readStream, file
   206         iCachedYear = year;
   207         iCachedYear = year;
   207         }
   208         }
   208     
   209     OstTraceFunctionExit0( DUP1_CCALENSOLARTERMS_READSOLARTERMSL_EXIT );
   209     TRACE_EXIT_POINT;
   210     }
   210     }