tzservices/tzserver/Server/Include/tzpersisted.h
changeset 0 2e3d3ce01487
--- /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 <tzdefines.h> // 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 <e32std.h>
+
+#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__