kernel/eka/common/des16.cpp
branchRCL_3
changeset 257 3e88ff8f41d5
parent 256 c1f20ce4abcf
--- a/kernel/eka/common/des16.cpp	Tue Aug 31 16:34:26 2010 +0300
+++ b/kernel/eka/common/des16.cpp	Wed Sep 01 12:34:56 2010 +0100
@@ -765,13 +765,6 @@
 #endif
 	}
 
-// Surrogate-aware version of lookup() above.
-// aChar can be over 0xFFFF.
-inline TUint lookup2(const TUint aChar, const TText *aConv)
-	{
-	return TUnicode(aChar).Fold((TInt)aConv, GetLocaleCharSet()->iCharDataSet);
-	}
-
 TInt DoMatch16(const TDesC16 &aLeftD,const TDesC16 &aRightD,TMatchType aType)
 	{
 	const TText* table=convTable(aType);
@@ -1375,557 +1368,6 @@
 
 #endif  // !defined(__DES16_MACHINE_CODED__)
 
-
-/**
- * A helper function, which moves a pointer one Unicode character forward.
- * 
- * @aStart points to the head of the string to process.
- * @aEnd   points to the end of the string. Note that aEnd points to the first
- *         16-bit unit after the string. That is, the string length (i.e, count
- *         of 16-bit units) is (aEnd-aStart).
- * 
- * On return,
- *      if find valid character, then return KErrNone, with aNewStart pointing
- *          to the 16-bit unit after the found character;
- *      if meet corrupt surrogate before find a valid character, then return
- *          KErrCorruptSurrogateFound, with aNewStart pointing to the corrupt surrogate;
- *      if meet aEnd before find a valid character, then return KErrNotFound.
- * 
- * @return KErrNone if ok;
- *         KErrNotFound if get to aEnd;
- *         KErrCorruptSurrogateFound if meet corrupt surrogate.
- */
-TInt ProceedOneCharacter(const TText16* aStart, const TText16* aEnd, TText16*& aNewStart, TUint& aCurrentChar)
-	{
-	if (!aStart || !aEnd || aStart>=aEnd)
-		return KErrNotFound;
-	if (!TChar::IsSurrogate(aStart[0]))
-		{
-		aCurrentChar = aStart[0];
-		aNewStart = const_cast<TText16*> (aStart + 1);
-		return KErrNone;
-		}
-	else if (TChar::IsHighSurrogate(aStart[0]))
-		{
-		if (aEnd < aStart + 2)
-			return KErrCorruptSurrogateFound;
-		if (!TChar::IsLowSurrogate(aStart[1]))
-			{
-			aNewStart = const_cast<TText16*> (aStart + 2);
-			return KErrCorruptSurrogateFound;
-			}
-		aCurrentChar = TChar::JoinSurrogate(aStart[0], aStart[1]);
-		aNewStart = const_cast<TText16*> (aStart + 2);
-		return KErrNone;
-		}
-	else
-		{
-		aNewStart = const_cast<TText16*> (aStart);
-		return KErrCorruptSurrogateFound;
-		}
-	}
-
-/**
- * A helper function, which moves a pointer one or more Unicode characters forward.
- * 
- * This function starts from aStart, stops when one of below conditions matched:
- *   1) 16-bit position >= (aEnd - aStart);
- *   2) 16-bit position >= aMaxInt16Position;
- *   3) character position >= aMaxCharacterPosition;
- * 
- * Specify a huge integer (say KMaskDesLength16) for aMaxInt16Position or 
- * aMaxCharacterPosition to indicate unlimited 16-bit position or character 
- * position.
- * 
- * When return, aOutInt16Position, aOutCharacterPosition and aLastChar will 
- *              indicate the same one character, whose 
- *              16-bit position <= aMaxInt16Position, and 
- *              character position <= aMaxCharacterPosition.
- * 
- * @return KErrNone if no error found;
- *         KErrNotFound if get to aEnd before find wanted position; or,
- *                      if aMaxIntPosition<=0 or aMaxCharacterPosition<=0;
- *         KErrCorruptSurrogateFound if meet corrupt surrogate.
- */
-TInt ProceedMultiCharacters(const TText16* aStart, const TText16* aEnd,
-							const TInt aMaxInt16Position, const TInt aMaxCharacterPosition,
-							TInt& aOutInt16Position, TInt& aOutCharacterPosition, TUint& aLastChar)
-	{
-	TText16 *next;
-	TInt status = KErrNotFound;
-	aOutInt16Position = 0;
-	aOutCharacterPosition = 0;
-	while (aOutInt16Position <= aMaxInt16Position && aOutCharacterPosition <= aMaxCharacterPosition)
-		{
-		status = ::ProceedOneCharacter(aStart+aOutInt16Position, aEnd, next, aLastChar);
-		if (status == KErrNotFound || status == KErrCorruptSurrogateFound)
-			return status;
-		if (next - aStart > aMaxInt16Position || aOutInt16Position == aMaxInt16Position || aOutCharacterPosition == aMaxCharacterPosition)
-			{
-			return status;
-			}
-		aOutInt16Position = (next - aStart);
-		++aOutCharacterPosition;
-		}
-	return status;
-	}
-
-EXPORT_C TInt TDesC16::FindCorruptSurrogate() const
-/**
-Look for the first corrupt surrogate in the descriptor.
-
-@return The 16-bit position of the first corrupt surrogate. KErrNotFound, if 
-        not found.
-*/
-	{
-	// Do not use TUTF32Iterator, because it hides some characters, including corrupt surrogate.
-	TInt strLength = Length();
-
-	const TText16* start = Ptr();
-	const TText16* end = Ptr() + strLength;
-	TInt int16Pos;
-	TInt charPos;
-	TUint lastChar;
-	TInt status = ::ProceedMultiCharacters(start, end, KMaskDesLength16, KMaskDesLength16, int16Pos, charPos, lastChar);
-	if (status == KErrCorruptSurrogateFound)
-		return int16Pos;
-	return KErrNotFound;
-	}
-
-EXPORT_C TInt TDesC16::Locate2(TChar aChar) const
-/**
-The surrogate aware version of Locate().
-
-Searches for the first occurrence of a character within this descriptor's 
-data.
-
-The search starts at the beginning of the data, i.e. at the leftmost 
-position.
-
-@param aChar The Unicode character to be found. Can be inside or outside BMP.
-
-@return The offset of the character position from the beginning of the data.
-        KErrNotFound, if no matching character can be found.
-        KErrCorruptSurrogateFound, if meet corrupt surrogate in the searching.
-
-@see TDesC16::Locate()
-*/
-	{
-	TInt strLength = Length();
-	const TText16* start = Ptr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		if (status != KErrNone)
-			return status;
-		if (currentChar == aChar)
-			return int16Index;
-		int16Index = (next - start);
-		}
-	}
-
-LOCAL_C TInt DoLocateF16_2(const TDesC16& aDes, TUint aChar)
-// Surrogate-aware version of DoLocateF16().
-// Locate character aChar in the descriptor folded.
-	{
-	const TText* table = convTable(EMatchFolded);
-	TUint aChar32 = aChar;
-	aChar = lookup2(aChar32, table);
-	
-	// find aChar in aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	while (status == KErrNone)
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-        if (status != KErrNone)
-            break;
-		if (lookup2(currentChar, table) == aChar)
-			return int16Index;
-		int16Index = (next - start);
-		}
-	return status;
-	}
-
-EXPORT_C TInt TDesC16::LocateF2(TChar aChar) const
-/**
-The surrogate aware version of LocateF().
-
-Searches for the first occurrence of a folded character within this
-descriptor's folded data.
-
-The search starts at the beginning of the data, i.e. at the leftmost 
-position.
-
-Note that folding is locale-independent behaviour. It is also important to 
-note that there can be no guarantee that folding is in any way culturally 
-appropriate, and should not be used for searching strings in natural language.
-
-@param aChar The Unicode character to be found. Can be inside or outside BMP.
-
-@return The offset of the character position from the beginning of the data.
-        KErrNotFound, if no matching character can be found.
-        KErrCorruptSurrogateFound, if meet corrupt surrogate in the searching.
-
-@see TDesC16::LocateF()
-*/
-	{
-	return DoLocateF16_2(*this, aChar);
-	}
-
-/**
- * Proceed backward from aEnd toward aStart by one character.
- * 
- * @aStart points to the first 16-bit unit in a descriptor.
- * @aEnd   points to the 16-bit unit after the last one. So, count of 16-bit 
- *         units to process is (aEnd-aStart).
- * 
- * On return,
- *      if valid character found, then return KErrNone, with aNewEnd pointing 
- *          to the character found;
- *      if meet corrupt surrogate before find a valid character, then return 
- *          KErrCorruptSurrogateFound, with aNewStart point to the corrupt
- *          surrogate;
- *      if aStart met, then return KErrNotFound.
- * 
- * @return KErrNone if ok;
- *         KErrNotFound if get to aStart;
- *         KErrCorruptSurrogateFound if meet corrupt surrogate.
- */
-TInt RecedeOneCharacter(const TText16* aStart, const TText16* aEnd, TText16*& aNewEnd, TUint& aCurrentChar)
-	{
-	if (!aStart || !aEnd || aStart>=aEnd)
-		return KErrNotFound;
-	if (!TChar::IsSurrogate(aEnd[-1]))
-		{
-		aCurrentChar = aEnd[-1];
-		aNewEnd = const_cast<TText16*> (aEnd - 1);
-		return KErrNone;
-		}
-	else if (TChar::IsLowSurrogate(aEnd[-1]))
-		{
-		if (aEnd < aStart + 2)
-			return KErrNotFound;
-		if (!TChar::IsHighSurrogate(aEnd[-2]))
-			{
-			aNewEnd = const_cast<TText16*> (aEnd - 2);
-			return KErrCorruptSurrogateFound;
-			}
-		aCurrentChar = TChar::JoinSurrogate(aEnd[-2], aEnd[-1]);
-		aNewEnd = const_cast<TText16*> (aEnd - 2);
-		return KErrNone;
-		}
-	else
-		{
-		aNewEnd = const_cast<TText16*> (aEnd);
-		return KErrCorruptSurrogateFound;
-		}
-	}
-
-EXPORT_C TInt TDesC16::LocateReverse2(TChar aChar) const
-/**
-The surrogate aware version of LocateReverse().
-
-Searches for the first occurrence of a character within this descriptor's 
-data, searching from the end of the data.
-
-The search starts at the rightmost position.
-
-@param aChar The Unicode character to be found. Can be inside or outside BMP.
-
-@return The offset of the character position from the beginning of the data.
-        KErrNotFound, if no matching character can be found.
-        KErrCorruptSurrogateFound, if meet corrupt surrogate in the searching.
-
-@see TDesC16::LocateReverse()
-*/
-	{
-	TInt strLength = Length();
-	const TText16* start = Ptr();
-	TText16* newEnd;
-	TUint currentChar;
-	TInt int16Index = strLength;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::RecedeOneCharacter(start, start+int16Index, newEnd, currentChar);
-		if (status != KErrNone)
-		    return status;
-		int16Index = (newEnd - start);
-		if (currentChar == aChar)
-			return int16Index;
-		}
-	}
-
-EXPORT_C TInt TDesC16::LocateReverseF2(TChar aChar) const
-/**
-The surrogate aware version of LocateReverseF().
-
-Searches for the first occurrence of a folded character within this descriptor's 
-folded data, searching from the end of the data.
-
-The search starts at the rightmost position.
-
-Note that folding is locale-independent behaviour. It is also important to 
-note that there can be no guarantee that folding is in any way culturally 
-appropriate, and should not be used for searching strings in natural language.
-
-@param aChar The Unicode character to be found. Can be inside or outside BMP.
-
-@return The offset of the character position from the beginning of the data.
-        KErrNotFound, if no matching character can be found.
-        KErrCorruptSurrogateFound, if meet corrupt surrogate in the searching.
-
-@see TDesC16::LocateReverseF()
-*/
-	{
-	TInt strLength = Length();
-	const TText16* start = Ptr();
-	TText16* newEnd;
-	TUint currentChar;
-	TInt int16Index = strLength;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::RecedeOneCharacter(start, start+int16Index, newEnd, currentChar);
-		if (status != KErrNone)
-		    return status;
-		int16Index = (newEnd - start);
-		TCharF c(currentChar);
-		if (c == aChar)
-		    return int16Index;
-		}
-	}
-
-inline TUint conv2(TUint aChar, const TText *aConv, const TUnicodeDataSet* aCharDataSet)
-// Surrogate-aware version of conv().
-// If aConv is not NULL then convert the character.
-	{
-	if (aConv)
-		return TUnicode(aChar).Fold((TInt)aConv, aCharDataSet);
-	else
-		return aChar;
-	}
-
-// Surrogate-aware version of DoMatch16().
-// This helper function uses the same search algorithm as DoMatch16().
-TInt DoMatch16_2(const TDesC16 &aLeftD, const TDesC16 &aRightD, TMatchType aType)
-	{
-	const TText* table=convTable(aType);
-	const TUint16* const pRight=aRightD.Ptr();
-	const TUint16* pM=pRight-1;						// pre-increment addressing
-	const TUint16* const pP=pM+aRightD.Length();
-	const TUint16* const pLeft=aLeftD.Ptr()-1;		// pre-increment addressing
-	const TUint16* pB=pLeft;	
-	const TUint16* pB2=pLeft;						// always points to current char; pB2==pB or pB-1
-	const TUint16* const pE=pB+aLeftD.Length();
-
-	// Note: pM and pB always point to the int16 unit before the character to handle.
-	//       so, pM[0] and pB[0] may be a low surrogate.
-	//       but, pM[1] and pB[1] must be start of a character.
-	// Note: pB2 always points to current character being handled.
-	//       pB2 is used to generated return value.
-	//       if pB[0] is low surrogate, then pB2=pB-1;
-	//       if pB[0] is BMP, then pB2=pB.
-	//
-	// A 'diagram' shows the pointers:
-	//
-	// before search:
-	//     left:       ############################
-	//                ^                           ^
-	//             pLeft/pB/pB2                   pE
-	//
-	//     right:      ############################
-	//                ^^                          ^
-	//              pM  pRight                    pP
-	//
-	//
-	// after several iterations (C is the next character going to be checked):
-    //     left:       ###############C############
-    //                ^              ^            ^
-    //             pLeft             pB/pB2       pE
-    //
-    //     right:      ##########C#################
-    //                 ^        ^                 ^
-    //                 pRight   pM                pP
-	//
-
-	const TUnicodeDataSet* charDataSet = GetLocaleCharSet()->iCharDataSet;
-
-	// Match any pattern up to the first star
-	TUint c;
-	TInt status;
-	TText* newStart;
-	for (;;)
-		{
-		status = ::ProceedOneCharacter(pM+1, pP+1, newStart, c);
-		if (status == KErrCorruptSurrogateFound)
-		    return KErrCorruptSurrogateFound;
-		if (status == KErrNotFound)		// exhausted the pattern
-			return pB==pE ? 0 : KErrNotFound;
-		pM = newStart - 1;
-		c = conv2(c, table, charDataSet);
-		if (c==KMatchAny)
-			break;
-		if (pB==pE)			// no more input
-			return KErrNotFound;
-		TUint c2;
-		pB2 = pB + 1;
-		status = ::ProceedOneCharacter(pB+1, pE+1, newStart, c2);
-        if (status == KErrCorruptSurrogateFound)
-            return KErrCorruptSurrogateFound;
-		pB = newStart - 1;
-		if (c != conv2(c2, table, charDataSet) && c != KMatchOne)	// match failed
-			return KErrNotFound;
-		}
-	// reached a star
-	if (pM==pP)
-		return 0;
-	TInt r=pM==pRight ? -1 : 0;		// r = how many int16 has been matched in candidate (aLeftD)
-	for (;;)
-		{
-		status = ::ProceedOneCharacter(pM+1, pP+1, newStart, c);
-        if (status == KErrCorruptSurrogateFound)
-            return KErrCorruptSurrogateFound;
-		pM = newStart - 1;
-		c = conv2(c, table, charDataSet);
-		if (c==KMatchAny)
-			{
-star:		if (pM==pP)		// star at end of pattern, always matches
-				return Max(r,0);
-			if (r<-1)		// skipped some '?', matches at beginning
-				r=0;
-			continue;
-			}
-		if (pB==pE)			// no more input
-			return KErrNotFound;
-		if (c==KMatchOne)
-			{				// skip a character in the input
-			if (pM==pP)
-				return r+((r>=0) ? 0 : (pE-pLeft));
-			TUint dummyC;
-			pB2 = pB + 1;
-			status = ::ProceedOneCharacter(pB+1, pE+1, newStart, dummyC);
-	        if (status == KErrCorruptSurrogateFound)
-	            return KErrCorruptSurrogateFound;
-			pB = newStart - 1;
-			if (r < 0)
-				r -= (newStart - pB2);	// back r by 1 or 2, depending on dummyC is BMP or non-BMP.
-			continue;
-			}
-	// Matching a non-wild character
-		for (;;)
-			{
-			if (table)
-				{
-				TUint c2;
-				for (;;)
-					{
-					pB2 = pB + 1;
-					status = ::ProceedOneCharacter(pB+1, pE+1, newStart, c2);
-			        if (status == KErrCorruptSurrogateFound)
-			            return KErrCorruptSurrogateFound;
-					pB = newStart - 1;
-					if (lookup2(c2, table) == c)
-						break;
-					if (pB==pE)				// no more input
-						return KErrNotFound;
-					}
-				}
-			else
-				{
-				TUint c2;
-				for (;;)
-					{
-					pB2 = pB + 1;
-					status = ::ProceedOneCharacter(pB+1, pE+1, newStart, c2);
-			        if (status == KErrCorruptSurrogateFound)
-			            return KErrCorruptSurrogateFound;
-					pB = newStart - 1;
-					if (c2 == c)
-						break;
-					if (pB==pE)				// no more input
-						return KErrNotFound;
-					}
-				}
-			// Try to match up to the next star
-			const TUint16* pb=pB;
-			const TUint16* pm=pM;
-			for (;;)
-				{
-				if (pm<pP)
-					{
-					TUint cc;
-					status = ::ProceedOneCharacter(pm+1, pP+1, newStart, cc);
-			        if (status == KErrCorruptSurrogateFound)
-			            return KErrCorruptSurrogateFound;
-					pm = newStart - 1;
-					cc = conv2(cc, table, charDataSet);
-					if (cc==KMatchAny)
-						{	// sub-match successful, back to main loop
-						r+=(r>=0 ? 0 : pB2-pLeft);
-						pB=pb;
-						pM=pm;
-						goto star;
-						}
-					if (pb==pE)
-						return KErrNotFound;	// no more input
-					TUint cc2;
-					status = ::ProceedOneCharacter(pb+1, pE+1, newStart, cc2);
-			        if (status == KErrCorruptSurrogateFound)
-			            return KErrCorruptSurrogateFound;
-					pb = newStart - 1;
-					if (cc != conv2(cc2, table, charDataSet) && cc != KMatchOne)
-						break;	// sub-match failed, try next input character
-					}
-				else if (pb==pE)	// end of matching pattern
-					{
-					return r+(r>=0 ? 0 : pB2-pLeft);	// end of input, so have a match
-					}
-				else
-					break;		// try next input character
-				}
-			}
-		}
-	}
-
-EXPORT_C TInt TDesC16::Match2(const TDesC16 &aDes) const
-/**
-The surrogate aware version of Match().
-
-Searches this descriptor's data for a match with the match pattern supplied 
-in the specified descriptor.
-
-The match pattern can contain the wildcard characters "*" and "?", where "*" 
-matches zero or more consecutive occurrences of any character and "?" matches 
-a single occurrence of any character.
-
-Note that there is no 'escape character', which means that it is not possible
-to match either the "*" character itself or the "?" character itself using
-this function.
-
-@param aDes A 16-bit non-modifable descriptor containing the match pattern.
-
-@return If a match is found, the offset within this descriptor's data where 
-        the match first occurs. KErrNotFound, if there is no match.
-        KErrCorruptSurrogateFound, if meet corrupt surrogate in the searching.
-
-@see TDesC16::Match()
-*/
-	{
-	return DoMatch16_2(*this, aDes, EMatchNormal);
-	}
-
 #if !defined( __DES16_MACHINE_CODED__) | defined(__EABI_CTORS__)
 EXPORT_C TBufCBase16::TBufCBase16()
 //
@@ -3941,936 +3383,6 @@
     AppendFormatList(aFmt,list);
     }
 
-EXPORT_C void TDes16::Append2(TChar aChar)
-/**
-The surrogate aware version of Append().
-
-Appends data onto the end of this descriptor's data.
-
-The length of this descriptor is incremented to reflect the new content. The
-length will be increased by 1 if aChar is inside BMP or 2 if aChar is outside
-BMP.
-
-@param aChar A single character to be appended. Can be inside or outside BMP.
-
-@panic USER 11  if the resulting new length of this descriptor is greater than
-                its maximum length.
-
-@panic USER 217 if corrupt surrogate found in aChar. This functions will not
-                validate already existing surrogate in the descriptor.
-
-@see TDes16::Append()
-*/
-	{
-	__ASSERT_ALWAYS(TChar::IsSupplementary(aChar) || !TChar::IsSurrogate((TText16)aChar), Panic(ECorruptSurrogateFound));
-
-	TInt len = Length();
-	TUint16 *pB = WPtr() + len;
-	if (TChar::IsSupplementary(aChar))
-		{
-		SetLength(len + 2);
-		*pB++ = TChar::GetHighSurrogate(aChar);
-		*pB = TChar::GetLowSurrogate(aChar);
-		}
-	else
-		{
-		SetLength(len + 1);
-		*pB = (TText16)aChar;
-		}
-	}
-
-EXPORT_C void TDes16::Fill2(TChar aChar)
-/**
-The surrogate aware version of Fill().
-
-Fills the descriptor's data area with the specified character, replacing any 
-existing data.
-
-The descriptor is filled from the beginning up to its current length. The 
-descriptor's length does not change. It is not filled to its maximum length.
-If aChar is supplementary character, and available space to fill is odd in
-16-bit unit, then the last 16-bit unit will be filled with high surrogate, 
-and the length will keep unchanged.
-
-@param aChar The fill character. Can be inside or outside BMP.
-
-@see TDes16::Fill()
-*/
-	{
-	TUint16 *pB = WPtr();
-	TUint16 *pE = pB + Length();
-	if (!TChar::IsSupplementary(aChar))
-		{
-		while (pB < pE)
-			*pB++ = (TUint16)aChar;
-		}
-	else
-		{
-		while (pB < pE - 1)
-			{
-			*pB++ = TChar::GetHighSurrogate(aChar);
-			*pB++ = TChar::GetLowSurrogate(aChar);
-			}
-		// fill the last 16-bit unit
-		if (pB < pE)
-		    *pB++ = TChar::GetHighSurrogate(aChar);
-		}
-	}
-
-EXPORT_C void TDes16::Fill2(TChar aChar, TInt aLength)
-/**
-The surrogate aware version of Fill().
-
-Fills the descriptor's data area with the specified character, replacing any 
-existing data.
-
-The descriptor is filled with the specified number of characters,
-and its length is changed to reflect this.
-
-If aChar is supplementary character, and available space to fill is odd in
-16-bit unit, then the last 16-bit unit will be left unchanged.
-
-@param aChar   The fill character. Can be inside or outside BMP.
-@param aLength The new length of the descriptor.
-
-@panic USER 11  if aLength is negative or is greater than the maximum length
-                of this descriptor.
-
-@panic USER 217 if corrupt surrogate found in aChar. These functions will not 
-                validate already existing surrogate in the descriptor.
-
-@see TDes16::Fill()
-*/
-	{
-	__ASSERT_ALWAYS(TChar::IsSupplementary(aChar) || !TChar::IsSurrogate((TText16)aChar), Panic(ECorruptSurrogateFound));
-
-	SetLength(aLength);
-	Fill2(aChar);
-	}
-
-EXPORT_C void TDes16::AppendFill2(TChar aChar, TInt aLength)
-/**
-The surrogate aware version of AppendFill().
-
-Appends and fills this descriptor with the specified character.
-
-The descriptor is appended with the specified number of characters, and its
-length is changed to reflect this.
-
-If aChar is supplementary character, and available space to fill is odd in 
-16-bit unit, then the last 16-bit unit will be filled with high surrogate.
-
-@param aChar   The fill character. Can be inside or outside BMP.
-@param aLength The length of additional space to append into.
-
-@panic USER 11  if aLength is negative, or the resulting length of this
-                descriptor is greater than its maximum length.
-
-@panic USER 217 if corrupt surrogate found in aChar. These functions will not 
-                validate already existing surrogate in the descriptor.
-
-@see TDes16::AppendFill()
-*/
-	{
-	__ASSERT_ALWAYS(TChar::IsSupplementary(aChar) || !TChar::IsSurrogate((TText16)aChar), Panic(ECorruptSurrogateFound));
-
-	TInt len=Length();
-	TUint16 *pB=WPtr()+len;
-	SetLength(len+aLength);
-	TUint16 *pE=pB+aLength;
-	if (!TChar::IsSupplementary(aChar))
-		{
-		while (pB < pE)
-			*pB++ = (TUint16)aChar;
-		}
-	else
-		{
-		while (pB < pE - 1)
-			{
-			*pB++ = TChar::GetHighSurrogate(aChar);
-			*pB++ = TChar::GetLowSurrogate(aChar);
-			}
-        // fill the last 16-bit unit
-        if (pB < pE)
-            *pB++ = TChar::GetHighSurrogate(aChar);
-		}
-	}
-
-EXPORT_C void TDes16::Justify2(const TDesC16 &aDes, TInt aWidth, TAlign anAlignment, TChar aFill)
-/**
-The surrogate aware version of Justify().
-
-Copies data into this descriptor and justifies it, replacing any existing data.
-
-The length of this descriptor is set to reflect the new data.
-
-The target area is considered to be an area of specified width positioned at
-the beginning of this descriptor's data area. Source data is copied into, and
-aligned within this target area according to the specified alignment
-instruction.
-
-If the length of the target area is larger than the length of the source, then
-spare space within the target area is padded with the fill character.
-
-@param aDes        A 16-bit non-modifiable descriptor containing the source data.
-                   The length of the data to be copied is the smaller of:
-                   the length of the source descriptor, and 
-                   the width of the target area (only if this is not the
-                   explicit negative value KDefaultJustifyWidth).
-
-@param aWidth      The width of the target area. If this has the specific
-                   negative value KDefaultJustifyWidth, then the width is
-                   re-set to the length of the data source.
-
-@param anAlignment The alignment of the data within the target area
-
-@param aFill       The fill character used to pad the target area. Can be
-                   inside or outside BMP.
-
-@panic USER 11  if the resulting length of this descriptor is greater than
-                its maximum length or aWidth has a negative value other 
-                than KDefaultJustifyWidth.
-
-@panic USER 217 if corrupt surrogate found in the parameters or in the 
-                descriptor.
-
-@see TDes16::Justify()
-*/
-	{
-    Zero();
-    AppendJustify2(aDes.Ptr(),aDes.Length(),aWidth,anAlignment,aFill);
-	}
-
-EXPORT_C void TDes16::AppendJustify2(const TDesC16 &aDes, TInt aWidth, TAlign anAlignment, TChar aFill)
-/**
-The surrogate aware version of AppendJustify.
-
-Appends data onto the end of this descriptor's data and justifies it.
-    
-The source of the appended data is an existing descriptor.
-    
-The target area is considered to be an area of specified width, immediately 
-following this descriptor's existing data. Source data is copied into, and 
-aligned within this target area according to the specified alignment instruction.
-    
-If the length of the target area is larger than the length of the source, 
-then spare space within the target area is padded with the fill character.
-        
-@param aDes        A 16-bit non-modifiable descriptor containing the source
-                   data. The length of the data to be copied is the smaller of:
-                   the length of the source descriptor, and
-                   the width of the target area (only if this is not the
-                   explicit negative value KDefaultJustifyWidth). 
-    
-@param aWidth      The width of the target area. If this has the specific
-                   negative value KDefaultJustifyWidth, then the width is
-                   re-set to the length of the data source.
-    
-@param anAlignment The alignment of the data within the target area. 
-    
-@param aFill       The fill character used to pad the target area. Can be
-                   inside or outside BMP.
-
-@panic USER 11  if the resulting length of this descriptor is greater than
-                its maximum length or aWidth has a negative value other 
-                than KDefaultJustifyWidth.
-
-@panic USER 217 if corrupt surrogate found in the parameters or in the 
-                descriptor.
-
-@see TDes16::AppendJustify()
-*/
-	{
-    AppendJustify2(aDes.Ptr(),aDes.Length(),aWidth,anAlignment,aFill);
-	}
-
-EXPORT_C void TDes16::AppendJustify2(const TDesC16 &aDes, TInt aLength, TInt aWidth, TAlign anAlignment, TChar aFill)
-/**
-The surrogate aware version of AppendJustify.
-
-Appends data onto the end of this descriptor's data and justifies it.
-    
-The source of the appended data is an existing descriptor.
-    
-The target area is considered to be an area of specified width, immediately 
-following this descriptor's existing data. Source data is copied into, and 
-aligned within this target area according to the specified alignment instruction.
-    
-If the length of the target area is larger than the length of the source, 
-then spare space within the target area is padded with the fill character.
-    
-@param aDes        An 8-bit non-modifiable descriptor containing the source data. 
-
-@param aLength     The length of data to be copied from the source descriptor. 
-                   If this is greater than the width of the target area, then
-                   the length of data copied is limited to the width.
-                   The length of data to be copied must not be  greater than
-                   the length of the source descriptor. Note that this
-                   condition is not automatically tested. 
-                   
-@param aWidth      The width of the target area. If this has the specific negative 
-                   value KDefaultJustifyWidth, then the width is
-                   re-set to the length of the data source.
-
-@param anAlignment The alignment of the data within the target area. 
-
-@param aFill       The fill character used to pad the target area. Can be
-                   inside or outside BMP.
-
-@panic USER 11  if the resulting length of this descriptor is greater than
-                its maximum length or aWidth has a negative value other 
-                than KDefaultJustifyWidth.
-
-@panic USER 217 if corrupt surrogate found in the parameters or in the 
-                descriptor.
-
-@see TDes16::AppendJustify()
-*/
-	{
-    AppendJustify2(aDes.Ptr(),aLength,aWidth,anAlignment,aFill);
-	}
-
-EXPORT_C void TDes16::AppendJustify2(const TUint16 *aString, TInt aWidth, TAlign anAlignment, TChar aFill)
-/**
-The surrogate aware version of AppendJustify.
-
-Appends a zero terminated string onto the end of this descriptor's data and 
-justifies it.
-
-The zero terminator is not copied.
-
-The target area is considered to be an area of specified width, immediately 
-following this descriptor's existing data. Source data is copied into, and 
-aligned within, this target area according to the specified alignment instruction.
-
-If the length of the target area is larger than the length of the source, 
-then spare space within the target area is padded with the fill character.
-
-@param aString     A pointer to a zero terminated string The length of the data 
-                   to be copied is the smaller of: the length of the string (excluding the zero 
-                   terminator), the width of the target area (only if this is not the explicit 
-                   negative value KDefaultJustifyWidth). 
-                    
-@param aWidth      The width of the target area. If this has the specific negative 
-                   value KDefaultJustifyWidth, then the width is re-set to the length of the 
-                   zero terminated string (excluding the zero terminator).
-                    
-@param anAlignment The alignment of the data within the target area. 
-
-@param aFill       The fill character used to pad the target area. Can be
-                   inside or outside BMP.
-
-@panic USER 11  if the resulting length of this descriptor is greater than
-                its maximum length or aWidth has a negative value other 
-                than KDefaultJustifyWidth.
-
-@panic USER 217 if corrupt surrogate found in the parameters or in the 
-                descriptor.
-
-@see TDes16::AppendJustify()
-*/
-	{
- 	__CHECK_ALIGNMENT(aString,ETDes16AppendJustify1);
-	AppendJustify2(aString,STRING_LENGTH_16(aString),aWidth,anAlignment,aFill);
-	}
-
-EXPORT_C void TDes16::AppendJustify2(const TUint16 *aString, TInt aLength, TInt aWidth, TAlign anAlignment, TChar aFill)
-/**
-The surrogate aware version of AppendJustify.
-
-Appends data onto the end of this descriptor's data and justifies it.
-
-The source of the appended data is a memory location.
-
-The target area is considered to be an area of specified width, immediately 
-following this descriptor's existing data. Source data is copied into, and 
-aligned within, this target area according to the specified alignment instruction.
-
-If the length of the target area is larger than the length of the source, 
-then spare space within the target area is padded with the fill character.
-
-@param aString     A pointer to a source memory location. 
-
-@param aLength     The length of data to be copied. If this is greater than the 
-                   width of the target area, then the length of data copied is
-                   limited to the width.
-               
-@param aWidth      The width of the target area. If this has the specific negative 
-                   value KDefaultJustifyWidth, then the width is
-                   re-set to the length of the data source. 
-               
-@param anAlignment The alignment of the data within the target area. 
-
-@param aFill       The fill character used to pad the target area. Can be
-                   inside or outside BMP.
-
-@panic USER 11  if the resulting length of this descriptor is greater than
-                its maximum length or aWidth has a negative value other 
-                than KDefaultJustifyWidth.
-
-@panic USER 17  if aLength is negative.
-  
-@panic USER 217 if corrupt surrogate found in the parameters or in the 
-                descriptor.
-
-@see TDes16::AppendJustify()
-*/
-	{
-	__ASSERT_ALWAYS(aLength>=0,Panic(ETDes16LengthNegative));
-	__CHECK_ALIGNMENT(aString,ETDes16AppendJustify2);
-	if (aWidth==KDefaultJustifyWidth)
-		aWidth=aLength;
-	if (aLength>aWidth)
-		aLength=aWidth;
-	TInt offset=Length();
-	AppendFill2(aFill,aWidth);
-	TInt r=aWidth-aLength;
-	if (anAlignment==ECenter)
-		r>>=1;
-	else if (anAlignment==ELeft)
-		r=0;
-	memCopy(WPtr()+offset+r,aString,aLength);
-	}
-
-EXPORT_C void TDes16::Fold2()
-/**
-The surrogate aware version of Fold().
-
-Performs folding on the content of this descriptor.
-
-Note that folding is locale-independent behaviour. It is also important to 
-note that there can be no guarantee that folding is in any way culturally 
-appropriate, and should not be used when dealing with strings in natural
-language.
-
-@panic USER 217 if corrupt surrogate found in the descriptor.
-
-@see TDes16::Fold()
-*/
-	{
-	TInt strLength = Length();
-	TText16* start = WPtr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		TCharF c(currentChar);
-		// at present, c and currentChar always in the same plane
-		if (TChar::IsSupplementary(c))
-			{
-			start[int16Index] = TChar::GetHighSurrogate(c);
-			start[int16Index+1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			start[int16Index] = (TText16)c;
-			}
-		int16Index = (next - start);
-		}
-	}
-
-EXPORT_C void TDes16::Collate2()
-/**
-The surrogate aware version of Collate().
-
-Performs collation on the content of this descriptor.
-
-@panic USER 217 if corrupt surrogate found in the descriptor.
-
-@see TDes16::Collate()
-*/
-	{
-	TInt strLength = Length();
-	TText16* start = WPtr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		TChar c = User::Collate(currentChar);
-		// at present, c and currentChar always in the same plane
-		if (TChar::IsSupplementary(c))
-			{
-			start[int16Index] = TChar::GetHighSurrogate(c);
-			start[int16Index+1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			start[int16Index] = (TText16)c;
-			}
-		int16Index = (next - start);
-		}
-	}
-
-EXPORT_C void TDes16::LowerCase2()
-/**
-The surrogate aware version of LowerCase().
-
-Converts the content of this descriptor to lower case.
-
-Conversion is implemented as appropriate to the current locale.
-
-@panic USER 217 if corrupt surrogate found in the descriptor.
-
-@see TDes16::LowerCase()
-*/
-	{
-	TInt strLength = Length();
-	TText16* start = WPtr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		TCharLC c(currentChar);
-		// at present, c and currentChar always in the same plane
-		if (TChar::IsSupplementary(c))
-			{
-			start[int16Index] = TChar::GetHighSurrogate(c);
-			start[int16Index+1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			start[int16Index] = (TText16)c;
-			}
-		int16Index = (next - start);
-		}
-	}
-
-EXPORT_C void TDes16::UpperCase2()
-/**
-The surrogate aware version of UpperCase().
-
-Converts the content of this descriptor to upper case.
-
-Conversion is implemented as appropriate to the current locale.
-
-@panic USER 217 if corrupt surrogate found in the descriptor.
-
-@see TDes16::UpperCase()
-*/
-	{
-	TInt strLength = Length();
-	TText16* start = WPtr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		TCharUC c(currentChar);
-		// at present, c and currentChar always in the same plane
-		if (TChar::IsSupplementary(c))
-			{
-			start[int16Index] = TChar::GetHighSurrogate(c);
-			start[int16Index+1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			start[int16Index] = (TText16)c;
-			}
-		int16Index = (next - start);
-		}
-	}
-
-EXPORT_C void TDes16::Capitalize2()
-/**
-The surrogate aware version of Capitalize().
-
-Capitalises the content of this descriptor.
-
-Capitalisation is implemented as appropriate to the current locale.
-
-@panic USER 217 if corrupt surrogate found in the descriptor.
-
-@see TDes16::Capitalize()
-*/
-	{
-	TInt strLength = Length();
-	TText16* start = WPtr();
-	const TText16* end = Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	
-	// the first character: title case
-	status = ::ProceedOneCharacter(start, end, next, currentChar);
-	__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-	TChar c = User::TitleCase(currentChar);
-	// at present, c and currentChar always in the same plane
-	if (TChar::IsSupplementary(c))
-		{
-		start[0] = TChar::GetHighSurrogate(c);
-		start[1] = TChar::GetLowSurrogate(c);
-		}
-	else
-		{
-		start[0] = (TText16)c;
-		}
-	int16Index = (next - start);
-	
-	// following characters: lower case
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		TChar c = User::LowerCase(currentChar);
-		// at present, c and currentChar always in the same plane
-		if (TChar::IsSupplementary(c))
-			{
-			start[int16Index] = TChar::GetHighSurrogate(c);
-			start[int16Index+1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			start[int16Index] = (TText16)c;
-			}
-		int16Index = (next - start);
-		}
-	}
-
-EXPORT_C void TDes16::CopyF2(const TDesC16 &aDes)
-/**
-The surrogate aware version of CopyF().
-
-Copies and folds data from the specified descriptor into this descriptor replacing 
-any existing data.
-
-The length of this descriptor is set to reflect the new 
-data.
-
-Note that folding is locale-independent behaviour. It is also important to 
-note that there can be no guarantee that folding is in any way culturally 
-appropriate, and should not be used when dealing with strings in natural
-language.
-
-@param aDes A 16-bit non-modifiable descriptor.
-
-@panic USER 11  if the length of aDes is greater than the maximum length of
-                this target descriptor.
-
-@panic USER 217 if corrupt surrogate found in aDes or in the descriptor.
-
-@see TDes16::CopyF()
-*/
-	{
-	TText16* pT = WPtr();
-	TInt len = 0;
-	const TInt maxLen = MaxLength();
-	
-	// iterate through aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		int16Index = (next - start);
-		TCharF c(currentChar);
-		if (TChar::IsSupplementary(c))
-			{
-			len += 2;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-2] = TChar::GetHighSurrogate(c);
-			pT[len-1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			++len;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-1] = (TText16)c;
-			}
-		}
-	SetLength(len);
-	}
-
-EXPORT_C void TDes16::CopyC2(const TDesC16 &aDes)
-/**
-The surrogate aware version of CopyC().
-
-Copies and collates data from the specified descriptor
-into this descriptor replacing any existing data.
-
-The length of this descriptor is set to reflect the new data.
-
-@param aDes A 16-bit non-modifiable descriptor.
-
-@panic USER 11  if the length of aDes is greater than the maximum length of
-                this target descriptor.
-
-@panic USER 217 if corrupt surrogate found in aDes or in the descriptor.
-
-@see TDes16::CopyC()
-*/
-	{
-	TText16* pT = WPtr();
-	TInt len = 0;
-	const TInt maxLen = MaxLength();
-	
-	// iterate through aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		int16Index = (next - start);
-		TChar c = User::Collate(currentChar);
-		if (TChar::IsSupplementary(c))
-			{
-			len += 2;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-2] = TChar::GetHighSurrogate(c);
-			pT[len-1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			++len;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-1] = (TText16)c;
-			}
-		}
-	SetLength(len);
-	}
-
-EXPORT_C void TDes16::CopyLC2(const TDesC16 &aDes)
-/**
-The surrogate aware version of CopyLC().
-
-Copies text from the specified descriptor and converts it to lower case before 
-putting it into this descriptor, replacing any existing data.
-
-The length of this descriptor is set to reflect the new data.
-
-Conversion to lower case is implemented as appropriate to the current locale.
-
-@param aDes A 16-bit non modifiable descriptor.
-
-@panic USER 11  if the length of aDes is greater than the maximum length of
-                this target descriptor.
-
-@panic USER 217 if corrupt surrogate found in aDes or in the descriptor.
-
-@see TDes16::CopyLC()
-*/
-	{
-	TText16* pT = WPtr();
-	TInt len = 0;
-	const TInt maxLen = MaxLength();
-	
-	// iterate through aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		int16Index = (next - start);
-		TCharLC c(currentChar);
-		if (TChar::IsSupplementary(c))
-			{
-			len += 2;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-2] = TChar::GetHighSurrogate(c);
-			pT[len-1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			++len;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-1] = (TText16)c;
-			}
-		}
-	SetLength(len);
-	}
-
-EXPORT_C void TDes16::CopyUC2(const TDesC16 &aDes)
-/**
-The surrogate aware version of CopyUC().
-
-Copies text from the specified descriptor and converts it to upper case before 
-putting it into this descriptor, replacing any existing data.
-
-The length of this descriptor is set to reflect the new data.
-
-Conversion to upper case is implemented as appropriate to the current locale.
-
-@param aDes A 16-bit non modifiable descriptor.
-
-@panic USER 11  if the length of aDes is greater than the maximum length of
-                this target descriptor.
-
-@panic USER 217 if corrupt surrogate found in aDes or in the descriptor.
-
-@see TDes16::CopyUC()
-*/
-	{
-	TText16* pT = WPtr();
-	TInt len = 0;
-	const TInt maxLen = MaxLength();
-	
-	// iterate through aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		int16Index = (next - start);
-		TCharUC c(currentChar);
-		if (TChar::IsSupplementary(c))
-			{
-			len += 2;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-2] = TChar::GetHighSurrogate(c);
-			pT[len-1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			++len;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-1] = (TText16)c;
-			}
-		}
-	SetLength(len);
-	}
-
-EXPORT_C void TDes16::CopyCP2(const TDesC16 &aDes)
-/**
-The surrogate aware version of CopyCP().
-
-Copies text from the specified descriptor and capitalises it before putting 
-it into this descriptor, replacing any existing data.
-
-The length of this descriptor is set to reflect the new data.
-
-Capitalisation is implemented as appropriate to the current locale.
-
-@param aDes A 16-bit non-modifiable descriptor.
-
-@panic USER 11  if the length of aDes is greater than the maximum length of
-                this target descriptor.
-
-@panic USER 217 if corrupt surrogate found in aDes or in the descriptor.
-
-@see TDes16::CopyCP()
-*/
-	{
-	TText16* pT = WPtr();
-	TInt len = 0;
-	const TInt maxLen = MaxLength();
-	
-	// iterate through aDes
-	TInt strLength = aDes.Length();
-	const TText16* start = aDes.Ptr();
-	const TText16* end = aDes.Ptr() + strLength;
-	TText16* next;
-	TUint currentChar;
-	TInt int16Index = 0;
-	TInt status = KErrNone;
-	
-	// first character: title case
-	status = ::ProceedOneCharacter(start, end, next, currentChar);
-	__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-	int16Index = (next - start);
-	TChar c(currentChar);
-	c.TitleCase();
-	if (TChar::IsSupplementary(c))
-		{
-		len += 2;
-		__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-		pT[len-2] = TChar::GetHighSurrogate(c);
-		pT[len-1] = TChar::GetLowSurrogate(c);
-		}
-	else
-		{
-		++len;
-		__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-		pT[len-1] = (TText16)c;
-		}
-	
-	// following characters: lower case
-	FOREVER
-		{
-		status = ::ProceedOneCharacter(start+int16Index, end, next, currentChar);
-		__ASSERT_ALWAYS(status != KErrCorruptSurrogateFound, Panic(ECorruptSurrogateFound));
-		if (status == KErrNotFound)
-			break;
-		int16Index = (next - start);
-		TCharLC c(currentChar);
-		if (TChar::IsSupplementary(c))
-			{
-			len += 2;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-2] = TChar::GetHighSurrogate(c);
-			pT[len-1] = TChar::GetLowSurrogate(c);
-			}
-		else
-			{
-			++len;
-			__ASSERT_ALWAYS(len<=maxLen, Panic(ETDes16Overflow));
-			pT[len-1] = (TText16)c;
-			}
-		}
-	SetLength(len);
-	}
-
-
 #if !defined(__DES16_MACHINE_CODED__) | defined(__EABI_CTORS__)
 EXPORT_C TPtrC16::TPtrC16()
 	: TDesC16(EPtrC,0),iPtr(0)