tzservices/tzserver/Client/Source/tzlocalizedcityrecord.cpp
changeset 0 2e3d3ce01487
child 81 676b6116ca93
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tzservices/tzserver/Client/Source/tzlocalizedcityrecord.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,154 @@
+// Copyright (c) 2008-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:
+//
+
+#include "tzlocalizedcityrecord.h"
+#include "tzid.h"
+#include "tzidinternal.h"
+
+EXPORT_C CTzLocalizedCityRecord* CTzLocalizedCityRecord::NewL(const TDesC& aName, TUint8 aGroupId, TInt aIndex,
+		TInt aTzId, TUint aTzResourceId)
+	{
+	CTzLocalizedCityRecord* self = CTzLocalizedCityRecord::NewLC(aName, aGroupId, aIndex, aTzId, aTzResourceId);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CTzLocalizedCityRecord* CTzLocalizedCityRecord::NewLC(const TDesC& aName, TUint8 aGroupId, TInt aIndex,
+		TInt aTzId, TUint aTzResourceId)
+	{
+	CTzLocalizedCityRecord* self = new(ELeave) CTzLocalizedCityRecord(aGroupId, aIndex, aTzResourceId);
+	CleanupStack::PushL(self);
+	self->ConstructL(aName, aTzId);
+	return self;
+	}
+
+EXPORT_C CTzLocalizedCityRecord* CTzLocalizedCityRecord::NewL(RReadStream& aStream)
+	{
+	CTzLocalizedCityRecord* self = CTzLocalizedCityRecord::NewLC(aStream);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CTzLocalizedCityRecord* CTzLocalizedCityRecord::NewLC(RReadStream& aStream)
+	{
+	CTzLocalizedCityRecord* self = new(ELeave) CTzLocalizedCityRecord();
+	CleanupStack::PushL(self);
+	self->ConstructL(aStream);
+	return self;
+	}
+
+EXPORT_C CTzLocalizedCityRecord::~CTzLocalizedCityRecord()
+	{
+	delete iName;
+	}
+
+EXPORT_C void CTzLocalizedCityRecord::CleanupArray(TAny* aArray)
+	{
+	RPointerArray<CTzLocalizedCityRecord>* array = static_cast<RPointerArray<CTzLocalizedCityRecord>* >(aArray);
+	if (array)
+		{
+		array->ResetAndDestroy();
+		array->Close();
+		}
+	}
+
+CTzLocalizedCityRecord::CTzLocalizedCityRecord()
+	{
+	}
+
+CTzLocalizedCityRecord::CTzLocalizedCityRecord(TUint8 aGroupId, TInt aIndex, TUint aResourceId)
+	: iGroupId(aGroupId), iIndex(aIndex), iTzResourceId(aResourceId)
+	{
+	}
+
+void CTzLocalizedCityRecord::ConstructL(const TDesC& aName, TInt aTzId)
+	{
+	if (aTzId > KTzIdMax)
+		{
+		// This is a mess, although most of the API allows for 32 bit tz ids some of them
+		// only allow for 16 bit tz ids so we accept a TInt but do check that it can fit in 
+		// 16 bits
+		User::Leave(KErrArgument);
+		}
+	iTzId = aTzId;
+	iName = aName.AllocL();
+	}
+
+void CTzLocalizedCityRecord::ConstructL(RReadStream& aStream)
+	{
+	TInt nameLength = aStream.ReadInt32L();
+	iName = HBufC::NewL(nameLength);
+	TPtr16 namePtr = iName->Des();
+	aStream.ReadL(namePtr, nameLength);
+	iGroupId = aStream.ReadUint8L();
+	iIndex = aStream.ReadInt32L();
+	iTzId = aStream.ReadUint16L();
+	iTzResourceId = aStream.ReadUint32L();
+	}
+
+EXPORT_C TInt CTzLocalizedCityRecord::ExternalizeSize() const
+	{
+	return sizeof(TInt32) + iName->Size() + sizeof(TUint8) + sizeof(TInt32) + sizeof(TUint16) + sizeof(TUint32);
+	}
+
+EXPORT_C void CTzLocalizedCityRecord::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iName->Length());
+	aStream.WriteL(*iName);
+	aStream.WriteUint8L(iGroupId);
+	aStream.WriteInt32L(iIndex);
+	aStream.WriteUint16L(iTzId);
+	aStream.WriteUint32L(iTzResourceId);
+	}
+
+EXPORT_C TInt CTzLocalizedCityRecord::ExternalizeSize(const RPointerArray<CTzLocalizedCityRecord>& aCities)
+	{
+	TInt bufferSize = sizeof(TInt32);
+	TInt i = 0;
+	TInt end = aCities.Count();
+	while (i < end)
+		{
+		bufferSize += aCities[i]->ExternalizeSize();
+		++i;
+		}
+	return bufferSize;
+	}
+
+EXPORT_C void CTzLocalizedCityRecord::ExternalizeL(const RPointerArray<CTzLocalizedCityRecord>& aCities, 
+	RWriteStream& aStream)
+	{
+	TInt i = 0;
+	TInt end = aCities.Count();
+	aStream.WriteInt32L(end);
+	while (i < end)
+		{
+		aCities[i]->ExternalizeL(aStream);
+		++i;
+		}
+	}
+
+EXPORT_C void CTzLocalizedCityRecord::InternalizeL(RReadStream& aStream, 
+		RPointerArray<CTzLocalizedCityRecord>& aCities)
+	{
+	TInt count = aStream.ReadInt32L();
+	TInt i = 0;
+	aCities.ReserveL(aCities.Count() + count);
+	while (i < count)
+		{
+		CTzLocalizedCityRecord* newRecord = CTzLocalizedCityRecord::NewL(aStream);
+		aCities.Append(newRecord);
+		++i;
+		}
+	}