securityanddataprivacytools/securitytools/certapp/store--/us_func.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
--- a/securityanddataprivacytools/securitytools/certapp/store--/us_func.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/securityanddataprivacytools/securitytools/certapp/store--/us_func.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,775 +1,775 @@
-/*
-* 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 the License "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 <e32base.h>
-#include <e32panic.h>
-#include <s32file.h>
-#include <s32ucmp.h>
-
-
-void Mem::FillZ(TAny *aTrg, TInt aLength)
-	{
-	memset(aTrg, 0, aLength);
-	}
-
-TUint8* Mem::Move(TAny *aTrg, const TAny *aSrc, TInt aLength)
-{
-	TUint8 *s1 = (TUint8 *)aTrg;
-	TUint8 *s2 = (TUint8 *)aSrc;
-	memmove(s1, s2, aLength);
-	return s2 + aLength;
-}
-
-
-const TUint crcTab[256] =
-    {
-	0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,
-	0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,
-	0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,0x2462,
-	0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,0xa56a,0xb54b,0x8528,0x9509,
-	0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,
-	0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,
-	0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,
-	0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
-	0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,
-	0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,
-	0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,0xff9f,
-	0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,
-	0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,
-	0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x02b1,0x1290,
-	0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,
-	0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
-	0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x0691,
-	0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,
-	0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,0xcb7d,
-	0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,
-	0x0af1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,
-	0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,0xef1f,0xff3e,
-	0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,
-	0x3eb2,0x0ed1,0x1ef0
-    };
-static const TUint32 CrcTab32[256] =
-	{
-	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-	};
-
-EXPORT_C void Mem::Crc(TUint16& aCrc,const TAny* aPtr,TInt aLength)
-/**
-Performs a CCITT CRC checksum on the specified data.
-
-On return from this function, the referenced 16 bit integer contains the checksummed 
-value.
-
-@param aCrc    A reference to a 16 bit integer to contain the checksummed value. 
-@param aPtr    A pointer to the start of the data to be checksummed. 
-@param aLength The length of the data to be checksummed.
-*/
-	{
-
-	const TUint8* pB=(const TUint8*)aPtr;
-	const TUint8* pE=pB+aLength;
-	TUint crc=aCrc;
-    while (pB<pE)
-		crc=(crc<<8)^crcTab[((crc>>8)^*pB++)&0xff];
-	aCrc=(TUint16)crc;
-	}
-
-/**
-Performs a CCITT CRC-32 checksum on the specified data.
-
-On return from this function, the referenced 32 bit integer contains the CRC
-value.
-
-@param aCrc		A reference to a 32 bit integer to contain the CRC value. 
-@param aPtr		A pointer to the start of the data to be checksummed. 
-@param aLength	The length of the data to be checksummed.
-*/
-EXPORT_C void Mem::Crc32(TUint32& aCrc, const TAny* aPtr, TInt aLength)
-	{
-	const TUint8* p = (const TUint8*)aPtr;
-	const TUint8* q = p + aLength;
-	TUint32 crc = aCrc;
-	while (p < q)
-		crc = (crc >> 8) ^ CrcTab32[(crc ^ *p++) & 0xff];
-	aCrc = crc;
-	}
-
-
-LOCAL_C TUint checkSum(const TAny *aPtr)
-//
-// Checksum every other byte
-//
-	{
-
-	const TUint8* pB=(const TUint8*)aPtr;
-	const TUint8* pE=pB+(KMaxCheckedUid*sizeof(TUid));
-	TUint8 buf[(KMaxCheckedUid*sizeof(TUid))>>1];
-	TUint8* pT=(&buf[0]);
-	while (pB<pE)
-		{
-		*pT++=(*pB);
-		pB+=2;
-		}
-	TUint16 crc=0;
-	Mem::Crc(crc,&buf[0],(KMaxCheckedUid*sizeof(TUid))>>1);
-	return(crc);
-	}
-
-
-
-
-EXPORT_C TCheckedUid::TCheckedUid()
-/**
-Default constructor.
-
-Initialises the object to binary zeroes.
-*/
-	{
-	//	Mem::FillZ(this,sizeof(TCheckedUid));
-	iCheck = 0;
-	}
-
-
-
-
-EXPORT_C TCheckedUid::TCheckedUid(const TUidType& aUidType)
-/**
-Constructor taking an existing Uid type.
-
-The constructor calculates a checksum.
-
-@param aUidType The Uid type to be packaged.
-*/
-	{
-
-    Set(aUidType);
-    }
-
-
-
-
-EXPORT_C TCheckedUid::TCheckedUid(const TDesC8& aPtr)
-/**
-Constructor taking an existing TCheckedUid object encapsulated within
-a descriptor.
-
-The checksum is recalculated and must match the checksum value passed in the 
-encapsulated TCheckedUid object, otherwise the content of this object is reset 
-to binary zeroes.
-
-@param aPtr A pointer to a descriptor containing an existing TCheckedUid object. 
-                        
-@panic USER 38 If the length of the descriptor is not the same as the size 
-       of a TCheckedUid object.
-*/
-	{
-
-	Set(aPtr);
-	}
-
-
-
-
-EXPORT_C void TCheckedUid::Set(const TUidType& aUidType)
-/**
-Sets the specified Uid type to be packaged, and recalculates the checksum.
-
-@param aUidType The Uid type to be packaged.
-*/
-	{
-
-    iType=aUidType;
-    iCheck=Check();
-    }
-
-
-
-EXPORT_C void TCheckedUid::Set(const TDesC8& aPtr)
-/**
-Sets an existing TCheckedUid object encapsulated within a descriptor.
-
-The checksum is recalculated and must match the checksum value passed in the 
-encapsulated TCheckedUid object, otherwise the content of this object is reset 
-to binary zeroes.
-
-@param aPtr A pointer to a descriptor containing an existing
-            TCheckedUid object.
-
-@panic USER 38 If the length of the descriptor is not the same as the size 
-       of a TCheckedUid object.
-*/
-	{
-
-	__ASSERT_ALWAYS(aPtr.Length()==sizeof(TCheckedUid),Panic(ETFuncCheckedUidBadSet));
-	Mem::Move(this,aPtr.Ptr(),sizeof(TCheckedUid));
-	if (iCheck!=Check())
-		Mem::FillZ(this,sizeof(TCheckedUid));
-	}
-
-
-
-
-EXPORT_C TPtrC8 TCheckedUid::Des() const
-/**
-Gets a pointer descriptor to represent this object's data.
-
-@return The pointer descriptor for this object's data. The descriptor's length
-        is the same as the length of a TCheckedUid object.
-*/
-	{
-
-	return(TPtrC8((const TUint8*)this,sizeof(TCheckedUid)));
-	}
-
-
-
-EXPORT_C TUint TCheckedUid::Check() const
-/**
-Calculates the checksum of the UIDs.
-
-@return The checksum.
-*/
-	{
-
-	return((checkSum(((TUint8*)this)+1)<<16)|checkSum(this));
-	}
-
-EXPORT_C TUidType::TUidType()
-/**
-Default constructor.
-
-Creates a UID type, and sets all three component UIDs to KNullUid.
-*/
-    {
-	Mem::FillZ(this,sizeof(TUidType));
-    }
-
-
-
-
-EXPORT_C TUidType::TUidType(TUid aUid1)
-/**
-Constructor that creates a UID type and sets the UID1 component
-to the specified value.
-
-The UID2 and UID3 components are set to KNullUid.
-
-@param aUid1 Value for UID1.
-*/
-    {
-
-
-	Mem::FillZ(this,sizeof(TUidType));
-    iUid[0]=aUid1;
-    }
-
-
-
-
-EXPORT_C TUidType::TUidType(TUid aUid1,TUid aUid2)
-/**
-Constructor that creates a UID type and sets the UID1 and UID2 components
-to the specified values. 
-
-The UID3 component is set to KNullUid.
-
-@param aUid1 Value for UID1. 
-@param aUid2 Value for UID2.
-*/
-    {
-
-    iUid[0]=aUid1;
-    iUid[1]=aUid2;
-    iUid[2]=KNullUid;
-    }
-
-
-
-
-EXPORT_C TUidType::TUidType(TUid aUid1,TUid aUid2,TUid aUid3)
-/**
-Constructor that creates a UID type and sets all three UID components
-to the specified values.
-
-@param aUid1 Value for UID1.
-@param aUid2 Value for UID2.
-@param aUid3 Value for UID3.
-*/
-    {
-
-
-    iUid[0]=aUid1;
-    iUid[1]=aUid2;
-    iUid[2]=aUid3;
-    }
-
-
-
-
-EXPORT_C TBool TUidType::operator==(const TUidType& aUidType) const
-/**
-Compares this UID type for equality with the specified UID type.
-
-@param aUidType The UID type to be compared. 
-
-@return True, if each component UID is equal to the corresponding component 
-        UID in the specified UID type; false, otherwise.
-*/
-    {
-
-    return(iUid[0]==aUidType.iUid[0] &&
-           iUid[1]==aUidType.iUid[1] &&
-           iUid[2]==aUidType.iUid[2]);
-    }
-
-
-
-
-EXPORT_C TBool TUidType::operator!=(const TUidType& aUidType) const
-/** 
-Compares this UID type for inequality with the specified UID type.
-
-@param aUidType The UID type to be compared.
-
-@return True, if any component UID is not equal to the corresponding component 
-UID in the specified UID type; false otherwise.
-*/
-    {
-
-
-    return(!(*this==aUidType));
-    }
-
-
-
-
-EXPORT_C const TUid& TUidType::operator[](TInt aIndex) const
-/**
-Gets the UID component as identified by the specified index.
-
-@param aIndex Index value indicating which UID component to return.
-               0 specifies UID1,
-               1 specifies UID2,
-               2 specifies UID3.
-
-@return A reference to the required UID component.
-
-@panic USER 37 if aIndex is not in the range 0 to 2, inclusive.
-*/
-    {
-
-	__ASSERT_ALWAYS(aIndex>=0 && aIndex<KMaxCheckedUid,Panic(ETFuncUidTypeBadIndex));
-	return(iUid[aIndex]);
-    }
-
-
-
-
-EXPORT_C TUid TUidType::MostDerived() const
-/**
-Gets the most derived UID.
-
-Taking the three UID components as a hierarchy with UID1 being the most general, 
-UID2 being more specific than UID1 and UID3 being more specific than UID2, 
-then the function returns:
-
-UID3, if UID3 is not KNullUid.
-
-UID2, if UID2 is not KNullUid.
-
-UID1, otherwise
-
-@return The most derived UID.
-
-@see KNullUid
-*/
-    {
-
-    if (iUid[2]!=KNullUid)
-        return(iUid[2]);
-    if (iUid[1]!=KNullUid)
-        return(iUid[1]);
-    return(iUid[0]);
-    }
-
-
-
-
-EXPORT_C TBool TUidType::IsPresent(TUid aUid) const
-/**
-Tests if any of the component UIDs are equal to the specified UID.
-
-@param aUid The UID to be tested.
-
-@return True, if any one of the component UIDs are the same as the specified 
-        UID; false, if none of the component UIDs are the same.
-*/
-    {
-
-	return(iUid[0]==aUid || iUid[1]==aUid || iUid[2]==aUid);
-    }
-
-
-
-
-EXPORT_C TBool TUidType::IsValid() const
-/**
-Tests the object for a valid (non-KNullUid) UID type.
-
-@return True, if at least one of the component UIDs is not KNullUid; false, 
-        if all component UIDs are KNullUid.
-
-@see KNullUid
-*/
-    {
-
-    return(MostDerived()!=KNullUid);
-    }
-
-EXPORT_C void ExternalizeL(TInt64 anInt64,RWriteStream& aStream)
-//
-// Write a 64-bit integer out to aStream.
-//
-	{
-	aStream.WriteUint32L(I64LOW(anInt64));
-	aStream.WriteUint32L(I64HIGH(anInt64));
-	}
-
-EXPORT_C void InternalizeL(TInt64& anInt64,RReadStream& aStream)
-//
-// Read a 64-bit integer in from aStream.
-//
-	{
-	TUint low=aStream.ReadUint32L();
-	TUint high=aStream.ReadUint32L();
-	anInt64 = MAKE_TINT64(high,low);
-	}
-
-EXPORT_C void ExternalizeL(const TCheckedUid& aUid,RWriteStream& aStream)
-//
-// Write a checked uid type out to aStream.
-//
-	{
-	aStream.WriteL(aUid.Des());
-	}
-
-EXPORT_C void InternalizeL(TCheckedUid& aUid,RReadStream& aStream)
-//
-// Read a checked uid type in from aStream.
-//
-{
-	TUint32 buf[4];
-		
-	TPtr8 des((TUint8 *)buf, sizeof(buf));
-	aStream.ReadL(des);
-	aUid.Set(des);
-}
-
-#if 0
-EXPORT_C void ExternalizeL(TPoint aPoint,RWriteStream& aStream)
-//
-// Write a point out to aStream.
-//
-	{
-	aStream.WriteInt32L(aPoint.iX);
-	aStream.WriteInt32L(aPoint.iY);
-	}
-
-EXPORT_C void ExternalizeL(TSize aSize,RWriteStream& aStream)
-//
-// Write a size out to aStream.
-//
-	{
-	aStream.WriteInt32L(aSize.iWidth);
-	aStream.WriteInt32L(aSize.iHeight);
-	}
-
-EXPORT_C void ExternalizeL(const TRect& aRect,RWriteStream& aStream)
-//
-// Write a rectangle out to aStream.
-//
-	{
-	aStream<<aRect.iTl;
-	aStream<<aRect.iBr;
-	}
-
-EXPORT_C void InternalizeL(TPoint& aPoint,RReadStream& aStream)
-//
-// Read a point in from aStream.
-//
-	{
-	aPoint.iX=aStream.ReadInt32L();
-	aPoint.iY=aStream.ReadInt32L();
-	}
-
-EXPORT_C void InternalizeL(TSize& aSize,RReadStream& aStream)
-//
-// Read a size in from aStream.
-//
-	{
-	aSize.iWidth=aStream.ReadInt32L();
-	aSize.iHeight=aStream.ReadInt32L();
-	}
-
-EXPORT_C void InternalizeL(TRect& aRect,RReadStream& aStream)
-//
-// Read a rectangle in from aStream.
-//
-	{
-	aStream>>aRect.iTl;
-	aStream>>aRect.iBr;
-	}
-#endif
-
-RWriteStream& operator<<(RWriteStream&aStream, const TDesHeader &aDesHeader)
-{
-	aDesHeader.ExternalizeL(aStream);
-	return aStream;
-}
-
-RReadStream& operator>>(RReadStream&aStream,  TDesHeader &aDesHeader)
-{
-	aDesHeader.InternalizeL(aStream);
-	return aStream;
-}
-
-EXPORT_C void ExternalizeL(const TDesC8& aDes8,RWriteStream& aStream)
-//
-// Write an 8-bit descriptor out to aStream.
-//
-	{
-	TDesHeader header(aDes8);
-	aStream<<header;
-	aStream.WriteL(aDes8.Ptr(),aDes8.Length());
-	}
-
-RWriteStream& operator<<(RWriteStream&aStream, const TCardinality &aCardinality)
-{
-	aCardinality.ExternalizeL(aStream);
-	return aStream;
-}
-
-RReadStream& operator>>(RReadStream&aStream,  TCardinality &aCardinality)
-{
-	aCardinality.InternalizeL(aStream);
-	return aStream;
-}
-
-EXPORT_C void ExternalizeL(const TDesC16& aDes16,RWriteStream& aStream)
-//
-// Write a 16-bit descriptor out to aStream.
-//
-	{
-	TDesHeader header(aDes16);
-	aStream << header;
-
-#ifdef _UNICODE
-	// In the Unicode build, compress the data using the Standard Unicode Compression Scheme.
-	TMemoryUnicodeSource source(aDes16.Ptr());
-	TUnicodeCompressor compressor;
-	compressor.CompressL(aStream,source,KMaxTInt,aDes16.Length());
-	
-#else
-	aStream.WriteL(aDes16.Ptr(),aDes16.Length());
-#endif
-	}
-
-EXPORT_C void InternalizeL(TDes8& aDes8,RReadStream& aStream)
-//
-// Read an 8-bit descriptor in from aStream.
-//
-	{
-	TDesInternalizer interL;
-	aStream>>interL.Header();
-	interL(aDes8,aStream);
-	}
-
-EXPORT_C void InternalizeL(TDes16& aDes16,RReadStream& aStream)
-//
-// Read a 16-bit descriptor in from aStream.
-//
-	{
-	TDesInternalizer interL;
-	aStream>>interL.Header();
-	interL(aDes16,aStream);
-	}
-inline TDesHeader::TDesHeader(const TDesC8& aDes8)
-	: iVal((aDes8.Length()<<1)+1)
-	{}
-inline TDesHeader::TDesHeader(const TDesC16& aDes16)
-	: iVal((aDes16.Length()<<1))
-	{}
-inline TDesHeader& TDesHeader::operator=(const TDesC8& aDes8)
-	{return *this=TDesHeader(aDes8);}
-inline TDesHeader& TDesHeader::operator=(const TDesC16& aDes16)
-	{return *this=TDesHeader(aDes16);}
-inline TBool TDesHeader::IsWidth8() const
-	{return TInt(iVal)&0x1;}
-inline TBool TDesHeader::IsWidth16() const
-	{return !IsWidth8();}
-inline TInt TDesHeader::Length() const
-	{return TInt(iVal)>>1;}
-inline void TDesHeader::ExternalizeL(RWriteStream& aStream) const
-	{aStream<<iVal;}
-inline void TDesHeader::InternalizeL(RReadStream& aStream)
-	{aStream>>iVal;}
-
-// An MUnicodeSink implementation to write Unicode values into 8-bit bytes; anything outside 0..255 becomes 1
-#ifdef _UNICODE
-class TNarrowUnicodeSink: public MUnicodeSink
-	{
-	public:
-	TNarrowUnicodeSink(TUint8* aPtr): iPtr(aPtr) { }
-	void WriteUnicodeValueL(TUint16 aValue) { *iPtr++ = (TUint8)(aValue > 255 ? 1 : aValue); }
-
-	private:
-	TUint8* iPtr;
-	};
-#endif
-
-void TDesInternalizer::operator()(TDes8& aDes8,RReadStream& aStream) const
-//
-// Read an 8-bit descriptor in from aStream.
-//
-	{
-	TInt len=iHeader.Length();
-	if (len>aDes8.MaxLength())
-		__LEAVE(KErrOverflow);
-//
-	TUint8* ptr=(TUint8*)aDes8.Ptr();
-	if (iHeader.IsWidth8())
-		aStream.ReadL(ptr,len);
-	else
-		{
-		__ASSERT_DEBUG(iHeader.IsWidth16(),User::Invariant());
-#ifdef _UNICODE
-		// In the Unicode build 16-bit descriptors need to be expanded from the Standard Unicode Compression Scheme.
-		TNarrowUnicodeSink sink(ptr);
-		TUnicodeExpander expander;
-		expander.ExpandL(sink,aStream,len);
-
-#else
-		TUint8* end=ptr+len;
-		while (ptr!=end)
-			{
-			TUint c=aStream.ReadUint16L();
-			if (c>=0x100)
-				c=1;
-			*ptr++=TUint8(c);
-			}
-#endif
-		}
-	aDes8.SetLength(len);
-	}
-
-void TDesInternalizer::operator()(TDes16& aDes16,RReadStream& aStream) const
-//
-// Read a 16-bit descriptor in from aStream.
-//
-	{
-	TInt len=iHeader.Length();
-	if (len>aDes16.MaxLength())
-		__LEAVE(KErrOverflow);
-//
-	TUint16* ptr=(TUint16*)aDes16.Ptr();
-	if (iHeader.IsWidth16())
-		{
-#ifdef _UNICODE
-		// In the Unicode build 16-bit descriptors need to be expanded from the Standard Unicode Compression Scheme.
-		TMemoryUnicodeSink sink(ptr);
-		TUnicodeExpander expander;
-		expander.ExpandL(sink,aStream,len);
-
-#else
-		aStream.ReadL(ptr,len);
-#endif
-		}
-	else
-		{
-		__ASSERT_DEBUG(iHeader.IsWidth8(),User::Invariant());
-		TUint16* end=ptr+len;
-		while (ptr!=end)
-			*ptr++=aStream.ReadUint8L();
-		}
-	aDes16.SetLength(len);
-	}
-
-// End of file
+/*
+* 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 the License "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 <e32base.h>
+#include <e32panic.h>
+#include <s32file.h>
+#include <s32ucmp.h>
+
+
+void Mem::FillZ(TAny *aTrg, TInt aLength)
+	{
+	memset(aTrg, 0, aLength);
+	}
+
+TUint8* Mem::Move(TAny *aTrg, const TAny *aSrc, TInt aLength)
+{
+	TUint8 *s1 = (TUint8 *)aTrg;
+	TUint8 *s2 = (TUint8 *)aSrc;
+	memmove(s1, s2, aLength);
+	return s2 + aLength;
+}
+
+
+const TUint crcTab[256] =
+    {
+	0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,0x8108,0x9129,0xa14a,
+	0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,
+	0x72f7,0x62d6,0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,0x2462,
+	0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,0xa56a,0xb54b,0x8528,0x9509,
+	0xe5ee,0xf5cf,0xc5ac,0xd58d,0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,
+	0x46b4,0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,0x48c4,0x58e5,
+	0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,
+	0x9969,0xa90a,0xb92b,0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
+	0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,0x6ca6,0x7c87,0x4ce4,
+	0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,
+	0x8d68,0x9d49,0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,0xff9f,
+	0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,0x9188,0x81a9,0xb1ca,0xa1eb,
+	0xd10c,0xc12d,0xf14e,0xe16f,0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,
+	0x6067,0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,0x02b1,0x1290,
+	0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,
+	0xe54f,0xd52c,0xc50d,0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
+	0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,0x26d3,0x36f2,0x0691,
+	0x16b0,0x6657,0x7676,0x4615,0x5634,0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,
+	0xb98a,0xa9ab,0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,0xcb7d,
+	0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,0x4a75,0x5a54,0x6a37,0x7a16,
+	0x0af1,0x1ad0,0x2ab3,0x3a92,0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,
+	0x8dc9,0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,0xef1f,0xff3e,
+	0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,
+	0x3eb2,0x0ed1,0x1ef0
+    };
+static const TUint32 CrcTab32[256] =
+	{
+	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
+	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
+	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
+	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
+	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
+	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
+	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
+	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
+	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+	};
+
+EXPORT_C void Mem::Crc(TUint16& aCrc,const TAny* aPtr,TInt aLength)
+/**
+Performs a CCITT CRC checksum on the specified data.
+
+On return from this function, the referenced 16 bit integer contains the checksummed 
+value.
+
+@param aCrc    A reference to a 16 bit integer to contain the checksummed value. 
+@param aPtr    A pointer to the start of the data to be checksummed. 
+@param aLength The length of the data to be checksummed.
+*/
+	{
+
+	const TUint8* pB=(const TUint8*)aPtr;
+	const TUint8* pE=pB+aLength;
+	TUint crc=aCrc;
+    while (pB<pE)
+		crc=(crc<<8)^crcTab[((crc>>8)^*pB++)&0xff];
+	aCrc=(TUint16)crc;
+	}
+
+/**
+Performs a CCITT CRC-32 checksum on the specified data.
+
+On return from this function, the referenced 32 bit integer contains the CRC
+value.
+
+@param aCrc		A reference to a 32 bit integer to contain the CRC value. 
+@param aPtr		A pointer to the start of the data to be checksummed. 
+@param aLength	The length of the data to be checksummed.
+*/
+EXPORT_C void Mem::Crc32(TUint32& aCrc, const TAny* aPtr, TInt aLength)
+	{
+	const TUint8* p = (const TUint8*)aPtr;
+	const TUint8* q = p + aLength;
+	TUint32 crc = aCrc;
+	while (p < q)
+		crc = (crc >> 8) ^ CrcTab32[(crc ^ *p++) & 0xff];
+	aCrc = crc;
+	}
+
+
+LOCAL_C TUint checkSum(const TAny *aPtr)
+//
+// Checksum every other byte
+//
+	{
+
+	const TUint8* pB=(const TUint8*)aPtr;
+	const TUint8* pE=pB+(KMaxCheckedUid*sizeof(TUid));
+	TUint8 buf[(KMaxCheckedUid*sizeof(TUid))>>1];
+	TUint8* pT=(&buf[0]);
+	while (pB<pE)
+		{
+		*pT++=(*pB);
+		pB+=2;
+		}
+	TUint16 crc=0;
+	Mem::Crc(crc,&buf[0],(KMaxCheckedUid*sizeof(TUid))>>1);
+	return(crc);
+	}
+
+
+
+
+EXPORT_C TCheckedUid::TCheckedUid()
+/**
+Default constructor.
+
+Initialises the object to binary zeroes.
+*/
+	{
+	//	Mem::FillZ(this,sizeof(TCheckedUid));
+	iCheck = 0;
+	}
+
+
+
+
+EXPORT_C TCheckedUid::TCheckedUid(const TUidType& aUidType)
+/**
+Constructor taking an existing Uid type.
+
+The constructor calculates a checksum.
+
+@param aUidType The Uid type to be packaged.
+*/
+	{
+
+    Set(aUidType);
+    }
+
+
+
+
+EXPORT_C TCheckedUid::TCheckedUid(const TDesC8& aPtr)
+/**
+Constructor taking an existing TCheckedUid object encapsulated within
+a descriptor.
+
+The checksum is recalculated and must match the checksum value passed in the 
+encapsulated TCheckedUid object, otherwise the content of this object is reset 
+to binary zeroes.
+
+@param aPtr A pointer to a descriptor containing an existing TCheckedUid object. 
+                        
+@panic USER 38 If the length of the descriptor is not the same as the size 
+       of a TCheckedUid object.
+*/
+	{
+
+	Set(aPtr);
+	}
+
+
+
+
+EXPORT_C void TCheckedUid::Set(const TUidType& aUidType)
+/**
+Sets the specified Uid type to be packaged, and recalculates the checksum.
+
+@param aUidType The Uid type to be packaged.
+*/
+	{
+
+    iType=aUidType;
+    iCheck=Check();
+    }
+
+
+
+EXPORT_C void TCheckedUid::Set(const TDesC8& aPtr)
+/**
+Sets an existing TCheckedUid object encapsulated within a descriptor.
+
+The checksum is recalculated and must match the checksum value passed in the 
+encapsulated TCheckedUid object, otherwise the content of this object is reset 
+to binary zeroes.
+
+@param aPtr A pointer to a descriptor containing an existing
+            TCheckedUid object.
+
+@panic USER 38 If the length of the descriptor is not the same as the size 
+       of a TCheckedUid object.
+*/
+	{
+
+	__ASSERT_ALWAYS(aPtr.Length()==sizeof(TCheckedUid),Panic(ETFuncCheckedUidBadSet));
+	Mem::Move(this,aPtr.Ptr(),sizeof(TCheckedUid));
+	if (iCheck!=Check())
+		Mem::FillZ(this,sizeof(TCheckedUid));
+	}
+
+
+
+
+EXPORT_C TPtrC8 TCheckedUid::Des() const
+/**
+Gets a pointer descriptor to represent this object's data.
+
+@return The pointer descriptor for this object's data. The descriptor's length
+        is the same as the length of a TCheckedUid object.
+*/
+	{
+
+	return(TPtrC8((const TUint8*)this,sizeof(TCheckedUid)));
+	}
+
+
+
+EXPORT_C TUint TCheckedUid::Check() const
+/**
+Calculates the checksum of the UIDs.
+
+@return The checksum.
+*/
+	{
+
+	return((checkSum(((TUint8*)this)+1)<<16)|checkSum(this));
+	}
+
+EXPORT_C TUidType::TUidType()
+/**
+Default constructor.
+
+Creates a UID type, and sets all three component UIDs to KNullUid.
+*/
+    {
+	Mem::FillZ(this,sizeof(TUidType));
+    }
+
+
+
+
+EXPORT_C TUidType::TUidType(TUid aUid1)
+/**
+Constructor that creates a UID type and sets the UID1 component
+to the specified value.
+
+The UID2 and UID3 components are set to KNullUid.
+
+@param aUid1 Value for UID1.
+*/
+    {
+
+
+	Mem::FillZ(this,sizeof(TUidType));
+    iUid[0]=aUid1;
+    }
+
+
+
+
+EXPORT_C TUidType::TUidType(TUid aUid1,TUid aUid2)
+/**
+Constructor that creates a UID type and sets the UID1 and UID2 components
+to the specified values. 
+
+The UID3 component is set to KNullUid.
+
+@param aUid1 Value for UID1. 
+@param aUid2 Value for UID2.
+*/
+    {
+
+    iUid[0]=aUid1;
+    iUid[1]=aUid2;
+    iUid[2]=KNullUid;
+    }
+
+
+
+
+EXPORT_C TUidType::TUidType(TUid aUid1,TUid aUid2,TUid aUid3)
+/**
+Constructor that creates a UID type and sets all three UID components
+to the specified values.
+
+@param aUid1 Value for UID1.
+@param aUid2 Value for UID2.
+@param aUid3 Value for UID3.
+*/
+    {
+
+
+    iUid[0]=aUid1;
+    iUid[1]=aUid2;
+    iUid[2]=aUid3;
+    }
+
+
+
+
+EXPORT_C TBool TUidType::operator==(const TUidType& aUidType) const
+/**
+Compares this UID type for equality with the specified UID type.
+
+@param aUidType The UID type to be compared. 
+
+@return True, if each component UID is equal to the corresponding component 
+        UID in the specified UID type; false, otherwise.
+*/
+    {
+
+    return(iUid[0]==aUidType.iUid[0] &&
+           iUid[1]==aUidType.iUid[1] &&
+           iUid[2]==aUidType.iUid[2]);
+    }
+
+
+
+
+EXPORT_C TBool TUidType::operator!=(const TUidType& aUidType) const
+/** 
+Compares this UID type for inequality with the specified UID type.
+
+@param aUidType The UID type to be compared.
+
+@return True, if any component UID is not equal to the corresponding component 
+UID in the specified UID type; false otherwise.
+*/
+    {
+
+
+    return(!(*this==aUidType));
+    }
+
+
+
+
+EXPORT_C const TUid& TUidType::operator[](TInt aIndex) const
+/**
+Gets the UID component as identified by the specified index.
+
+@param aIndex Index value indicating which UID component to return.
+               0 specifies UID1,
+               1 specifies UID2,
+               2 specifies UID3.
+
+@return A reference to the required UID component.
+
+@panic USER 37 if aIndex is not in the range 0 to 2, inclusive.
+*/
+    {
+
+	__ASSERT_ALWAYS(aIndex>=0 && aIndex<KMaxCheckedUid,Panic(ETFuncUidTypeBadIndex));
+	return(iUid[aIndex]);
+    }
+
+
+
+
+EXPORT_C TUid TUidType::MostDerived() const
+/**
+Gets the most derived UID.
+
+Taking the three UID components as a hierarchy with UID1 being the most general, 
+UID2 being more specific than UID1 and UID3 being more specific than UID2, 
+then the function returns:
+
+UID3, if UID3 is not KNullUid.
+
+UID2, if UID2 is not KNullUid.
+
+UID1, otherwise
+
+@return The most derived UID.
+
+@see KNullUid
+*/
+    {
+
+    if (iUid[2]!=KNullUid)
+        return(iUid[2]);
+    if (iUid[1]!=KNullUid)
+        return(iUid[1]);
+    return(iUid[0]);
+    }
+
+
+
+
+EXPORT_C TBool TUidType::IsPresent(TUid aUid) const
+/**
+Tests if any of the component UIDs are equal to the specified UID.
+
+@param aUid The UID to be tested.
+
+@return True, if any one of the component UIDs are the same as the specified 
+        UID; false, if none of the component UIDs are the same.
+*/
+    {
+
+	return(iUid[0]==aUid || iUid[1]==aUid || iUid[2]==aUid);
+    }
+
+
+
+
+EXPORT_C TBool TUidType::IsValid() const
+/**
+Tests the object for a valid (non-KNullUid) UID type.
+
+@return True, if at least one of the component UIDs is not KNullUid; false, 
+        if all component UIDs are KNullUid.
+
+@see KNullUid
+*/
+    {
+
+    return(MostDerived()!=KNullUid);
+    }
+
+EXPORT_C void ExternalizeL(TInt64 anInt64,RWriteStream& aStream)
+//
+// Write a 64-bit integer out to aStream.
+//
+	{
+	aStream.WriteUint32L(I64LOW(anInt64));
+	aStream.WriteUint32L(I64HIGH(anInt64));
+	}
+
+EXPORT_C void InternalizeL(TInt64& anInt64,RReadStream& aStream)
+//
+// Read a 64-bit integer in from aStream.
+//
+	{
+	TUint low=aStream.ReadUint32L();
+	TUint high=aStream.ReadUint32L();
+	anInt64 = MAKE_TINT64(high,low);
+	}
+
+EXPORT_C void ExternalizeL(const TCheckedUid& aUid,RWriteStream& aStream)
+//
+// Write a checked uid type out to aStream.
+//
+	{
+	aStream.WriteL(aUid.Des());
+	}
+
+EXPORT_C void InternalizeL(TCheckedUid& aUid,RReadStream& aStream)
+//
+// Read a checked uid type in from aStream.
+//
+{
+	TUint32 buf[4];
+		
+	TPtr8 des((TUint8 *)buf, sizeof(buf));
+	aStream.ReadL(des);
+	aUid.Set(des);
+}
+
+#if 0
+EXPORT_C void ExternalizeL(TPoint aPoint,RWriteStream& aStream)
+//
+// Write a point out to aStream.
+//
+	{
+	aStream.WriteInt32L(aPoint.iX);
+	aStream.WriteInt32L(aPoint.iY);
+	}
+
+EXPORT_C void ExternalizeL(TSize aSize,RWriteStream& aStream)
+//
+// Write a size out to aStream.
+//
+	{
+	aStream.WriteInt32L(aSize.iWidth);
+	aStream.WriteInt32L(aSize.iHeight);
+	}
+
+EXPORT_C void ExternalizeL(const TRect& aRect,RWriteStream& aStream)
+//
+// Write a rectangle out to aStream.
+//
+	{
+	aStream<<aRect.iTl;
+	aStream<<aRect.iBr;
+	}
+
+EXPORT_C void InternalizeL(TPoint& aPoint,RReadStream& aStream)
+//
+// Read a point in from aStream.
+//
+	{
+	aPoint.iX=aStream.ReadInt32L();
+	aPoint.iY=aStream.ReadInt32L();
+	}
+
+EXPORT_C void InternalizeL(TSize& aSize,RReadStream& aStream)
+//
+// Read a size in from aStream.
+//
+	{
+	aSize.iWidth=aStream.ReadInt32L();
+	aSize.iHeight=aStream.ReadInt32L();
+	}
+
+EXPORT_C void InternalizeL(TRect& aRect,RReadStream& aStream)
+//
+// Read a rectangle in from aStream.
+//
+	{
+	aStream>>aRect.iTl;
+	aStream>>aRect.iBr;
+	}
+#endif
+
+RWriteStream& operator<<(RWriteStream&aStream, const TDesHeader &aDesHeader)
+{
+	aDesHeader.ExternalizeL(aStream);
+	return aStream;
+}
+
+RReadStream& operator>>(RReadStream&aStream,  TDesHeader &aDesHeader)
+{
+	aDesHeader.InternalizeL(aStream);
+	return aStream;
+}
+
+EXPORT_C void ExternalizeL(const TDesC8& aDes8,RWriteStream& aStream)
+//
+// Write an 8-bit descriptor out to aStream.
+//
+	{
+	TDesHeader header(aDes8);
+	aStream<<header;
+	aStream.WriteL(aDes8.Ptr(),aDes8.Length());
+	}
+
+RWriteStream& operator<<(RWriteStream&aStream, const TCardinality &aCardinality)
+{
+	aCardinality.ExternalizeL(aStream);
+	return aStream;
+}
+
+RReadStream& operator>>(RReadStream&aStream,  TCardinality &aCardinality)
+{
+	aCardinality.InternalizeL(aStream);
+	return aStream;
+}
+
+EXPORT_C void ExternalizeL(const TDesC16& aDes16,RWriteStream& aStream)
+//
+// Write a 16-bit descriptor out to aStream.
+//
+	{
+	TDesHeader header(aDes16);
+	aStream << header;
+
+#ifdef _UNICODE
+	// In the Unicode build, compress the data using the Standard Unicode Compression Scheme.
+	TMemoryUnicodeSource source(aDes16.Ptr());
+	TUnicodeCompressor compressor;
+	compressor.CompressL(aStream,source,KMaxTInt,aDes16.Length());
+	
+#else
+	aStream.WriteL(aDes16.Ptr(),aDes16.Length());
+#endif
+	}
+
+EXPORT_C void InternalizeL(TDes8& aDes8,RReadStream& aStream)
+//
+// Read an 8-bit descriptor in from aStream.
+//
+	{
+	TDesInternalizer interL;
+	aStream>>interL.Header();
+	interL(aDes8,aStream);
+	}
+
+EXPORT_C void InternalizeL(TDes16& aDes16,RReadStream& aStream)
+//
+// Read a 16-bit descriptor in from aStream.
+//
+	{
+	TDesInternalizer interL;
+	aStream>>interL.Header();
+	interL(aDes16,aStream);
+	}
+inline TDesHeader::TDesHeader(const TDesC8& aDes8)
+	: iVal((aDes8.Length()<<1)+1)
+	{}
+inline TDesHeader::TDesHeader(const TDesC16& aDes16)
+	: iVal((aDes16.Length()<<1))
+	{}
+inline TDesHeader& TDesHeader::operator=(const TDesC8& aDes8)
+	{return *this=TDesHeader(aDes8);}
+inline TDesHeader& TDesHeader::operator=(const TDesC16& aDes16)
+	{return *this=TDesHeader(aDes16);}
+inline TBool TDesHeader::IsWidth8() const
+	{return TInt(iVal)&0x1;}
+inline TBool TDesHeader::IsWidth16() const
+	{return !IsWidth8();}
+inline TInt TDesHeader::Length() const
+	{return TInt(iVal)>>1;}
+inline void TDesHeader::ExternalizeL(RWriteStream& aStream) const
+	{aStream<<iVal;}
+inline void TDesHeader::InternalizeL(RReadStream& aStream)
+	{aStream>>iVal;}
+
+// An MUnicodeSink implementation to write Unicode values into 8-bit bytes; anything outside 0..255 becomes 1
+#ifdef _UNICODE
+class TNarrowUnicodeSink: public MUnicodeSink
+	{
+	public:
+	TNarrowUnicodeSink(TUint8* aPtr): iPtr(aPtr) { }
+	void WriteUnicodeValueL(TUint16 aValue) { *iPtr++ = (TUint8)(aValue > 255 ? 1 : aValue); }
+
+	private:
+	TUint8* iPtr;
+	};
+#endif
+
+void TDesInternalizer::operator()(TDes8& aDes8,RReadStream& aStream) const
+//
+// Read an 8-bit descriptor in from aStream.
+//
+	{
+	TInt len=iHeader.Length();
+	if (len>aDes8.MaxLength())
+		__LEAVE(KErrOverflow);
+//
+	TUint8* ptr=(TUint8*)aDes8.Ptr();
+	if (iHeader.IsWidth8())
+		aStream.ReadL(ptr,len);
+	else
+		{
+		__ASSERT_DEBUG(iHeader.IsWidth16(),User::Invariant());
+#ifdef _UNICODE
+		// In the Unicode build 16-bit descriptors need to be expanded from the Standard Unicode Compression Scheme.
+		TNarrowUnicodeSink sink(ptr);
+		TUnicodeExpander expander;
+		expander.ExpandL(sink,aStream,len);
+
+#else
+		TUint8* end=ptr+len;
+		while (ptr!=end)
+			{
+			TUint c=aStream.ReadUint16L();
+			if (c>=0x100)
+				c=1;
+			*ptr++=TUint8(c);
+			}
+#endif
+		}
+	aDes8.SetLength(len);
+	}
+
+void TDesInternalizer::operator()(TDes16& aDes16,RReadStream& aStream) const
+//
+// Read a 16-bit descriptor in from aStream.
+//
+	{
+	TInt len=iHeader.Length();
+	if (len>aDes16.MaxLength())
+		__LEAVE(KErrOverflow);
+//
+	TUint16* ptr=(TUint16*)aDes16.Ptr();
+	if (iHeader.IsWidth16())
+		{
+#ifdef _UNICODE
+		// In the Unicode build 16-bit descriptors need to be expanded from the Standard Unicode Compression Scheme.
+		TMemoryUnicodeSink sink(ptr);
+		TUnicodeExpander expander;
+		expander.ExpandL(sink,aStream,len);
+
+#else
+		aStream.ReadL(ptr,len);
+#endif
+		}
+	else
+		{
+		__ASSERT_DEBUG(iHeader.IsWidth8(),User::Invariant());
+		TUint16* end=ptr+len;
+		while (ptr!=end)
+			*ptr++=aStream.ReadUint8L();
+		}
+	aDes16.SetLength(len);
+	}
+
+// End of file