diff -r 000000000000 -r 2e3d3ce01487 tzservices/tzserver/Server/Include/tzpersisted.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tzservices/tzserver/Server/Include/tzpersisted.h Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,264 @@ +// Copyright (c) 2004-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: +// + +#ifndef __TZPERSISTED_H__ +#define __TZPERSISTED_H__ + +#include // enumerated types used by client, server and compiler + +// This file is shared between the Symbian OS TZ component and the ISO C++ TZ Compiler. +// Hence the need to define the Symbian OS types on both platforms: +#if defined(__SYMBIAN32__) + + #include + +#else + + typedef void TAny; + typedef signed char TInt8; + typedef unsigned char TUint8; + typedef short int TInt16; + typedef unsigned short int TUint16; + typedef long int TInt32; + typedef unsigned long int TUint32; + typedef signed int TInt; + typedef unsigned int TUint; + typedef float TReal32; + typedef double TReal64; + typedef double TReal; + typedef unsigned char TText8; + typedef unsigned short int TText16; + typedef int TBool; + + + const TInt KMaxTInt8=0x7f; + const TInt KMinTInt8=(-128); + const TUint KMaxTUint8=0xffu; + const TInt KMaxTInt16=0x7fff; + const TInt KMinTInt16=(-32768); + const TUint KMaxTUint16=0xffffu; + const TInt KMaxTInt32=0x7fffffff; + const TInt KMinTInt32=(TInt)0x80000000; + const TUint KMaxTUint32=0xffffffffu; + const TInt KMaxTInt=0x7fffffff; + const TInt KMinTInt=(TInt)0x80000000; + const TUint KMaxTUint=0xffffffffu; + +#endif + +//============================================ +// Time Zone Database Version Number +const TInt KTzDbVersion = 1; + +const TInt KMaxYear = 9999; +const TInt KMinYear = 0; +const TInt KMaxDayOfMonth = 30; +const TInt KMinutesInOneDay = 1440; +const TInt KMaxDstOffset = 240; // 4 hours +//============================================ + +//============================================================================== +// +// Definitions of persisted entity classes. This is how the TZ entities are +// stored in the data file. The class definitions are based on the Persisted Data +// Format specification. +//================================================================================ + +//============================================================================== +// OFFSET ARRAYS: +// +// When a class must encapsulate a collection of references (offsets) to other +// objects, this is represented as 1-element arrays. +// +// From the class' point of view there is only a single element in the array. +// In reality, there will be more or less than one element, depending on the value of +// TTzWhatever::iNumberOfWhateverElements. The actual offsets will be persisted IMMEDIATELY +// AFTER the class, thus becoming an extension of the array. We can then get the i-th +// element by doing TTzWhatever::iOffsetsToWhateverElements[i]. +// +// ================================================================================ +// +// FILE HEADER +// +class TTzHeader + { +public: + TUint8 iReserved1; + TUint8 iReserved2; + TUint8 iReserved3; + TUint8 iVersion; + TUint16 iStartYear; + TUint16 iReserved4; + + TUint32 iOffsetToStringTable; + TUint32 iOffsetToRegionsTable; + TUint32 iOffsetToRegionalZonesTable; + TUint32 iOffsetToZones; + TUint32 iOffsetToZonesTable; + TUint32 iOffsetToLinksTable; + TUint32 iOffsetToStdTimeAlignmentsTable; + TUint32 iOffsetToRuleSetsTable; + TUint32 iOffsetToRuleUsesTable; + TUint32 iOffsetToRuleDefinitionsTable; + TUint32 iOffsetToDefaultZone; + }; + + +// SIMPLE ENTITIES + +class TTzRegion + { +public: + TUint16 iOffsetToRegionName; + TUint16 iOffsetToRegionalZoneIndex; + }; + +class TTzRegionalZoneIndex + { +public: + TUint8 iNumberOfZones; // no. of zones IN THIS REGION + TUint16 iOffsetsToZones[1]; + }; + +class TTzZone + { +public: + TUint16 iLocationId; + TUint16 iOffsetToZoneName; + TUint16 iOffsetToRegionName; + TUint16 iNumberOfStdTimeAlignments; + TUint16 iOffsetsToTimeAlignments[1]; + }; + +class TTzLink + { +public: + TUint16 iOffsetToLinkName; + TUint16 iOffsetToZone; + }; + +class TTzStdTimeAlignment + { +public: + TUint16 iUntilYear; + TUint8 iUntilMonth; + TUint8 iUntilDayOfMonth; + TUint16 iUntilTimeInMinutes; // minutes from 0:00 + TUint8 iUntilTimeReference; // TTzTimeReference + + TUint8 iNumberOfTimeZones; + TInt16 iUtcOffset; // in minutes (signed) + TUint16 iOffsetToRuleSet; + TUint16 iOffsetToTimeZoneFormatName; + TUint16 iOffsetsToTimeZones[1]; + }; + +class TTzRuleSet + { +public: + TUint16 iNumberOfRuleUses; + TUint16 iOffsetsToRuleUses[1]; + }; + +class TTzRuleUse + { +public: + TUint16 iFromYear; + TUint16 iUntilYear; + TUint16 iOffsetToRuleDefinition; + TUint16 iOffsetToRuleLetterString; + }; + +class TTzRuleDefinition + { +public: + TUint8 iStdTimeOffset; // in minutes + TUint8 iMonth; + TUint8 iDayRule; // TTzRuleDay + TUint8 iDayOfMonth; + TUint8 iDayOfWeek; + TUint8 iTimeReference; // TTzTimeReference + TUint16 iTimeOfChange; // number of minutes: "02:00" becomes 120 minutes + }; + +// +// TABLES +// Persisted tables consist of the number of elements in the table and a +// collection of offsets to those elements +// +class TTzStringsTable + { +public: + TUint16 iNumberOfStrings; + TUint16 iOffsetsToStrings[1]; + }; + +class TTzRegionsTable + { +public: + TUint16 iNumberOfRegions; + TTzRegion iRegions[1]; + }; + +class TTzRegionalZonesTable + { +public: + TUint8 iNumberOfRegionalZoneIndices; + TUint16 iOffsetsToRegionalZoneIndices[1]; + }; + +class TTzZonesTable + { +public: + TUint16 iNumberOfZones; + TUint16 iOffsetsToZones[1]; + }; + +class TTzLinksTable + { +public: + TUint16 iNumberOfLinks; + TTzLink iLinks[1]; + }; + +class TTzStdTimeAlignmentsTable + { +public: + TUint16 iNumberOfStdTimeAlignments; + TUint16 iOffsetsToStdTimeAlignments[1]; + }; + +class TTzRuleSetsTable + { +public: + TUint16 iNumberOfRuleSets; + TUint16 iOffsetsToRuleSets[1]; + }; + +class TTzRuleUsesTable + { +public: + TUint16 iNumberOfRuleUses; + TUint16 iOffsetsToRuleUses[1]; + }; + +class TTzRuleDefinitionsTable + { +public: + TUint16 iNumberOfRuleDefinitions; + TUint16 iOffsetsToRuleDefinitions[1]; + }; + +#endif // __TZPERSISTED_H__