kernel/eka/include/e32std.inl
changeset 0 a41df078684a
child 6 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/e32std.inl	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,7531 @@
+// Copyright (c) 1994-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:
+// e32\include\e32std.inl
+// 
+//
+
+// Global leaving operator new
+inline TAny* operator new(TUint aSize, TLeave)
+	{return User::AllocL(aSize);}
+inline TAny* operator new(TUint aSize, TLeave, TUint aExtraSize)
+	{return User::AllocL(aSize + aExtraSize);}
+#if !defined(__VC32__) || defined (__MSVCDOTNET__)
+inline TAny* operator new[](TUint aSize, TLeave)
+	{return User::AllocL(aSize);}
+#endif
+
+
+
+
+// class Mem
+inline TUint8* Mem::Copy(TAny* aTrg, const TAny* aSrc, TInt aLength)
+/**
+Copies data from a source location to a target location and returns a pointer 
+to the end of the copied data.
+	
+The source and target areas can overlap.
+	
+The copy operation is optimised so that if both source and target locations 
+are aligned on a word boundary, the operation performs the copy on a word 
+by word basis.
+	
+@param aTrg    A pointer to the target location for the copy operation. 
+@param aSrc    A pointer to the source location for the copy operation. 
+@param aLength The number of bytes to be copied. This value must not
+               be negative. 
+
+@return A pointer to a location aLength bytes beyond aTrg (i.e. the location 
+        aTrg+aLength).
+
+@panic USER 90 In debug builds only, if aLength is negative. 
+*/
+	{ return (TUint8*)memmove(aTrg, aSrc, aLength) + aLength; }
+
+
+
+
+inline TUint8* Mem::Move(TAny* aTrg, const TAny* aSrc, TInt aLength)
+/**
+Moves a block of data from a source location to a target location and returns 
+a pointer to the end of the moved data.
+	
+The source and target areas can overlap.
+	
+Both source and target locations must be aligned on a word boundary. 
+The specified length must also be a multiple of 4.
+	
+@param aTrg    A pointer to the target location for the move operation. This 
+               pointer must be word aligned. 
+@param aSrc    A pointer to the source location for the move operation. This
+               pointer must be word aligned.
+@param aLength The number of bytes to be copied. This value must be a multiple 
+               of 4.
+			   
+@return A pointer to a location aLength bytes beyond aTrg (i.e. the location 
+        aTrg+aLength).
+
+@panic USER 93 In debug builds only, if aTrg is not word aligned.
+@panic USER 92 In debug builds only, if aSrc is not word aligned.
+@panic USER 91 In debug builds only, if aLength is not a multiple of 4.
+*/
+	{ return (TUint8*)wordmove(aTrg, aSrc, aLength) + aLength; }
+
+
+
+
+inline void Mem::Fill(TAny* aTrg, TInt aLength, TChar aChar)
+/**
+Fills a specified block of data with a specified character, replacing
+any existing content.
+	
+The function assumes that the fill character is a non-Unicode character.
+	
+@param aTrg    A pointer to the location where filling is to start. 
+@param aLength The number of bytes to be filled. This value must not
+               be negative. 
+@param aChar   The fill character.
+
+@panic USER 95 In debug builds only, if aLength is negative.  
+*/
+	{ memset(aTrg, (TInt)(aChar.operator TUint()), aLength); }
+
+
+
+
+inline void Mem::FillZ(TAny* aTrg,TInt aLength)
+/**
+Fills a specified block of data with binary zeroes (i.e. 0x00), replacing any 
+existing content.
+	
+@param aTrg    A pointer to the location where filling is to start. 
+@param aLength The number of bytes to be filled. This value must not
+               be negative. 
+	
+@panic USER 95 In debug builds only, if aLength is negative.  
+*/
+	{ memclr(aTrg, aLength); }
+
+
+
+
+#if !(defined(__GCC32__) && defined(__MARM__))
+inline TInt Mem::Compare(const TUint8* aLeft, TInt aLeftL, const TUint8* aRight, TInt aRightL)
+/**
+Compares a block of data at one specified location with a block of data at 
+another specified location.
+
+The comparison proceeds on a byte for byte basis, the result of the comparison 
+is based on the difference of the first bytes to disagree.
+
+The data at the two locations are equal if they have the same length and content. 
+Where the lengths are different and the shorter section of data is the same 
+as the first part of the longer section of data, the shorter is considered 
+to be less than the longer.
+
+@param aLeft   A pointer to the first (or left) block of 8 bit data
+               to be compared.
+@param aLeftL  The length of the first (or left) block of data to be compared,  
+               i.e. the number of bytes.
+@param aRight  A pointer to the second (or right) block of 8 bit data to be 
+               compared.
+@param aRightL The length of the second (or right) block of data to be compared 
+               i.e. the number of bytes.
+               
+@return Positive, if the first (or left) block of data is greater than the 
+        second (or right) block of data.
+        Negative, if the first (or left) block of data is less than the
+        second (or right) block of data.
+        Zero, if both the first (or left) and second (or right) blocks of data
+        have the same length and the same content.
+*/
+	{ return memcompare(aLeft, aLeftL, aRight, aRightL); }
+#endif
+
+
+
+
+// class RHeap
+inline TInt RHeap::SetBrk(TInt aBrk)
+	{ return ((RChunk*)&iChunkHandle)->Adjust(aBrk); }
+
+
+
+
+// class TChar
+#ifndef __KERNEL_MODE__
+inline void TChar::SetChar(TUint aChar)
+	{iChar=aChar;}
+
+
+
+
+inline void TChar::Fold()
+/**
+Converts the character to a form which can be used in tolerant comparisons 
+without control over the operations performed. 
+
+Tolerant comparisons are those which ignore character differences like case 
+and accents.
+
+This function can be used when searching for a string in a text file or a 
+file in a directory. Folding performs the following conversions: converts 
+to lowercase, strips accents, converts all digits representing the values 
+0..9 to the ordinary digit characters '0'..'9', converts all spaces (standard, 
+non-break, fixed-width, ideographic, etc.) to the ordinary space character 
+(0x0020), converts Japanese characters in the hiragana syllabary to katakana, 
+and converts East Asian halfwidth and fullwidth variants to their ordinary 
+forms. You can choose to perform any subset of these operations by using the 
+other function overload.
+
+@see User::Fold
+*/
+	{iChar=User::Fold(iChar);}
+
+
+
+
+inline void TChar::LowerCase()
+/**
+Converts the character to its lowercase form.
+
+Characters lacking a lowercase form are unchanged.
+
+@see User::LowerCase
+*/
+	{iChar=User::LowerCase(iChar);}
+
+
+
+
+inline void TChar::UpperCase()
+/**
+Converts the character to its uppercase form.
+
+Characters lacking an uppercase form are unchanged.
+
+@see User::UpperCase
+*/
+	{iChar=User::UpperCase(iChar);}
+
+
+
+
+#ifdef _UNICODE
+inline void TChar::Fold(TInt aFlags)
+/**
+Converts the character to a form which can be used in tolerant comparisons 
+allowing selection of the specific fold operations to be performed.
+
+@param aFlags Flags which define the operations to be performed. The values 
+              are defined in the enum beginning with EFoldCase.
+
+@see TChar::EFoldCase
+@see User::Fold
+*/
+	{iChar=User::Fold(iChar,aFlags);}
+
+
+
+
+inline void TChar::TitleCase()
+/**
+Converts the character to its titlecase form.
+
+The titlecase form of a character is identical to its uppercase form unless 
+a specific titlecase form exists. Characters lacking a titlecase form are 
+unchanged.
+*/
+	{iChar=User::TitleCase(iChar);}
+#endif
+
+
+
+
+inline TBool TChar::Eos() const
+/**
+Tests whether the character is the C/C++ end-of-string character - 0.
+
+@return True, if the character is 0; false, otherwise.
+*/
+	{return(iChar==0);}
+#endif // _UNICODE
+
+
+
+
+// Class TCallBack
+inline TCallBack::TCallBack()
+/**
+Default constructor.
+	
+Sets the function pointer to Null.
+*/
+	{iFunction=NULL;}
+
+
+
+
+inline TCallBack::TCallBack(TInt (*aFunction)(TAny *aPtr))
+	: iFunction(aFunction),iPtr(NULL)
+/**
+Constructs the callback object with the specified callback function.
+
+@param aFunction A pointer to the callback function. It takes an argument of
+                 type TAny* and returns a TInt.
+				 It must be either a static member of a class or a function
+				 which is not a member of any class. 
+*/
+	{}
+
+
+
+
+inline TCallBack::TCallBack(TInt (*aFunction)(TAny *aPtr),TAny *aPtr)
+	: iFunction(aFunction),iPtr(aPtr)
+/**
+Constructs the callback object with the specified callback function and
+a pointer to any object.
+
+@param aFunction A pointer to the callback function. It takes an argument of
+                 type TAny* and returns a TInt.
+				 It must be either a static member of a class or a function
+				 which is not a member of any class. 
+@param aPtr      A pointer which is always passed to the callback function.
+*/
+	{}
+
+
+
+
+/**
+Calls the callback function.
+	
+@return The value returned by the callback function. The meaning of this value
+        depends entirely on the context in which the callback function
+        is called.
+        For example, when used with the CIdle class, a false (zero) value
+        indicates that the callback function should not be 	called again.
+        As another example, when used with the CPeriodic class, the return
+        value is ignored and is irrelevant in that context.
+
+@see CIdle
+@see CPeriodic        
+*/
+inline TInt TCallBack::CallBack() const
+	{ return (iFunction ? (*iFunction)(iPtr) : 0); }
+
+
+
+
+// Class TSglQue
+template <class T>
+inline TSglQue<T>::TSglQue()
+/**
+Constructs an empty list header and sets the offset value of the link object 
+to zero.
+
+In practice, never assume that the offset of the link object from the start 
+of a list element is zero, even if the link object is declared as the first 
+data member in the list element class.
+
+If this default constructor is used, then call the SetOffset() function of 
+the base class to ensure that the offset value is set correctly.
+
+@see TSglQueBase::SetOffset
+*/
+	{}
+
+
+
+
+template <class T>
+inline TSglQue<T>::TSglQue(TInt aOffset)
+	: TSglQueBase(aOffset)
+/**
+Constructs an empty list header and sets the offset of the link object to the 
+specified value.
+
+@param aOffset The offset of the link object from the start of a list element. 
+                The macro _FOFF can be used to calculate this value.
+				
+@panic USER 75, if aOffset is not divisible by four.
+
+@see _FOFF
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TSglQue<T>::AddFirst(T &aRef)
+/**
+Inserts the specified list element at the front of the singly linked list.
+
+If the list is not empty, the specified element becomes the first in the list. 
+What was previously the first element becomes the second in the list.
+
+@param aRef The list element to be inserted at the front of the singly linked 
+            list.
+*/
+	{DoAddFirst(&aRef);}
+
+
+
+
+template <class T>
+inline void TSglQue<T>::AddLast(T &aRef)
+/**
+Inserts the specified list element at the back of the singly linked list.
+
+If the list is not empty, the specified element becomes the last in the list. 
+What was previously the last element becomes the next to last element in the 
+list.
+
+@param aRef The list element to be inserted at the back of the singly linked 
+            list.
+*/
+	{DoAddLast(&aRef);}
+
+
+
+
+template <class T>
+inline TBool TSglQue<T>::IsFirst(const T *aPtr) const
+/**
+Tests whether the specified element is the first in the singly linked list.
+
+@param aPtr A pointer to the element whose position in the list is to be
+            checked.
+
+@return True, if the element is the first in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iHead);}
+
+
+
+
+template <class T>
+inline TBool TSglQue<T>::IsLast(const T *aPtr) const
+/**
+Tests whether the specified element is the last in the singly linked list.
+
+@param aPtr A pointer to the element whose position in the list is 
+            to be checked.
+
+@return True, if the element is the last in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iLast);}
+
+
+
+
+template <class T>
+inline T *TSglQue<T>::First() const
+/**
+Gets a pointer to the first list element in the singly linked list.
+
+@return A pointer to the first list element in the singly linked list. If 
+        the list is empty, this pointer is not necessarily NULL and must not
+		be assumed to point to a valid object.
+*/
+	{return(PtrSub((T *)iHead,iOffset));}
+
+
+
+
+template <class T>
+inline T *TSglQue<T>::Last() const
+/**
+Gets a pointer to the last list element in the singly linked list.
+
+@return A pointer to the last list element in the singly linked list. If the 
+        list is empty, this pointer is not necessarily NULL and must not be
+		assumed to point to a valid object.
+*/
+	{return(PtrSub((T *)iLast,iOffset));}
+
+
+
+
+template <class T>
+inline void TSglQue<T>::Remove(T &aRef)
+/**
+Removes the specified element from the singly linked list.
+
+The singly linked list must not be empty.
+
+@param aRef A list element to be removed from the singly linked list.
+
+@panic USER 76, if the element to be removed is not in the list
+*/
+	{DoRemove(&aRef);}
+
+
+
+
+// Class TDblQue
+template <class T>
+inline TDblQue<T>::TDblQue()
+/**
+Constructs an empty list header and sets the offset value of the link object 
+to zero.
+
+In practice, never assume that the offset of the link object from the start 
+of a list element is zero, even if the link object is declared as the first 
+data member in the list element class.
+
+If this default constructor is used, then call the SetOffset() function of 
+the base class to ensure that the offset value is set correctly.
+
+@see TDblQueBase::SetOffset()
+*/
+	{}
+
+
+
+
+template <class T>
+inline TDblQue<T>::TDblQue(TInt aOffset)
+	: TDblQueBase(aOffset)
+/**
+Constructs an empty list header and sets the offset of the link object to the 
+specified value.
+
+@param aOffset The offset of the link object from the start of a list element. 
+                The macro _FOFF can be used to calculate this value.
+				
+@panic USER 78. if aOffset is not divisble by 4.
+				  
+@see _FOFF
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TDblQue<T>::AddFirst(T &aRef)
+/**
+Inserts the specified list element at the front of the doubly linked list.
+
+If the list is not empty, the specified element becomes the first in the list. 
+What was previously the first element becomes the second in the list.
+
+@param aRef The list element to be inserted at the front of the doubly linked 
+            list.
+*/
+	{DoAddFirst(&aRef);}
+
+
+
+
+template <class T>
+inline void TDblQue<T>::AddLast(T &aRef)
+/**
+Inserts the specified list element at the back of the doubly linked list.
+
+If the list is not empty, the specified element becomes the last in the list. 
+What was previously the last element becomes the next to last element in the 
+list.
+
+@param aRef The list element to be inserted at the back of the doubly linked 
+            list.
+*/
+	{DoAddLast(&aRef);}
+
+
+
+
+template <class T>
+inline TBool TDblQue<T>::IsHead(const T *aPtr) const
+/**
+Tests whether the end of a list has been reached.
+
+A doubly linked list is circular; in following the chain of elements in a 
+list (e.g. using the iterator operator++ or operator--), the chain eventually 
+reaches the end of the list and aPtr corresponds to the header (although it 
+will not point to a valid T object).
+
+@param aPtr The pointer value to be checked. 
+
+@return True, if the end of the list has been reached. False, if the end of 
+        the list has not been reached; aPtr points to an element in the list.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)&iHead);}
+
+
+
+
+template <class T>
+inline TBool TDblQue<T>::IsFirst(const T *aPtr) const
+/**
+Tests whether the specified element is the first in the doubly linked list.
+
+@param aPtr A pointer to the element whose position in the list is to be checked.
+
+@return True, if the element is the first in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iNext);}
+
+
+
+
+template <class T>
+inline TBool TDblQue<T>::IsLast(const T *aPtr) const
+/**
+Tests whether the specified element is the last in the doubly linked list.
+
+@param aPtr A pointer to the element whose position in the list is to be checked.
+
+@return True, if the element is the last in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iPrev);}
+
+
+
+
+template <class T>
+inline T *TDblQue<T>::First() const
+/**
+Gets a pointer to the first list element in the doubly linked list.
+
+@return A pointer to the first list element in the doubly linked list. If 
+        the list is empty, this pointer is not necessarily NULL and must not
+		be assumed to point to a valid object.
+*/
+	{
+#if defined (_DEBUG)
+	__DbgTestEmpty();
+#endif
+    return(PtrSub((T *)iHead.iNext,iOffset));
+    }
+
+
+
+
+template <class T>
+inline T *TDblQue<T>::Last() const
+/**
+Gets a pointer to the last list element in the doubly linked list.
+
+@return A pointer to the last list element in the doubly linked list. If the 
+        list is empty, this pointer is not necessarily NULL and must not be assumed 
+        to point to a valid object.
+*/
+	{
+#if defined (_DEBUG)
+	__DbgTestEmpty();
+#endif
+	return(PtrSub((T *)iHead.iPrev,iOffset));
+	}
+
+
+
+
+// Class TPriQue
+template <class T>
+inline TPriQue<T>::TPriQue()
+/**
+Default constructor.
+
+Constructs an empty list header and sets the offset value of the link
+object to zero.
+
+In practice, never assume that the offset of the link object from the start
+of a list element is zero, even if the link object is declared as the first
+data member in the list element class.
+
+If this default constructor is used, then call the SetOffset() function of
+the base class to ensure that the offset value is set correctly.
+
+@see TDblQueBase::SetOffset
+*/
+	{}
+
+
+
+
+template <class T>
+inline TPriQue<T>::TPriQue(TInt aOffset)
+	: TDblQueBase(aOffset)
+/**
+Constructs an empty list header and sets the offset of the link object
+to the specified value.
+
+@param aOffset The offset of the link object from the start of a list element.
+                The macro _FOFF can be used to calculate this value.
+				
+@panic USER 78 if aOffset is not divisible by four.		  
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TPriQue<T>::Add(T &aRef)
+/**
+Inserts the specified list element in descending priority order.
+
+If there is an existing list element with the same priority, then the new
+element is added after the existing element.
+
+@param aRef The list element to be inserted.
+*/
+	{DoAddPriority(&aRef);}
+
+
+
+
+template <class T>
+inline TBool TPriQue<T>::IsHead(const T *aPtr) const
+/**
+Tests whether the end of a list has been reached.
+
+A doubly linked list is circular; in following the chain of elements in a list
+(e.g. using the iterator operator++ or operator--), the chain eventually
+reaches the end of the list and aPtr corresponds to the header (although it
+will not point to a valid T object).
+
+@param aPtr The pointer value to be checked.
+
+@return True, if the end of the list has been reached. False, if the end of the
+        list has not been reached; aPtr points to an element in the list.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)&iHead);}
+
+
+
+
+template <class T>
+inline TBool TPriQue<T>::IsFirst(const T *aPtr) const
+/**
+Tests whether the specified element is the first in the linked list.
+
+@param aPtr A pointer to the element whose position in the list is to
+            be checked.
+
+@return True, if the element is the first in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iNext);}
+
+
+
+
+template <class T>
+inline TBool TPriQue<T>::IsLast(const T *aPtr) const
+/**
+Tests whether the specified element is the last in the linked list.
+
+@param aPtr A pointer to the element whose position in the list is to
+            be checked.
+
+@return True, if the element is the last in the list; false, otherwise.
+*/
+	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iPrev);}
+
+
+
+
+template <class T>
+inline T *TPriQue<T>::First() const
+/**
+Gets a pointer to the first list element in the linked list.
+
+@return A pointer to the first list element in the linked list.
+        If the list is empty, this pointer is not necessarily NULL and must
+		not be assumed to point to a valid object.
+*/
+	{return(PtrSub((T *)iHead.iNext,iOffset));}
+
+
+
+
+template <class T>
+inline T *TPriQue<T>::Last() const
+/**
+Gets a pointer to the last list element in the linked list.
+
+@return A pointer to the last list element in the linked list.
+        If the list is empty, this pointer is not necessarily NULL and must
+		not be assumed to point to a valid object.
+*/
+	{return(PtrSub((T *)iHead.iPrev,iOffset));}
+
+
+
+
+// Class TDeltaQue
+template <class T>
+inline TDeltaQue<T>::TDeltaQue()
+/**
+Constructs an empty list header and sets the offset value of the link object 
+to zero.
+
+In practice, never assume that the offset of the link object from the start 
+of a list element is zero, even if the link object is declared as the first 
+data member in the list element class.
+
+If this default constructor is used, then call the TDblQueBase::SetOffset() 
+function in the base class to ensure that the offset value is set correctly.
+
+TDeltaQueBase::iFirstDelta is set to NULL.
+
+@see TDblQueBase::SetOffset
+*/
+	{}
+
+
+
+
+template <class T>
+inline TDeltaQue<T>::TDeltaQue(TInt aOffset)
+	: TDeltaQueBase(aOffset)
+/**
+Constructs an empty list header and sets the offset of the link object to the 
+specified value.
+
+TDeltaQueBase::iFirstDelta is set to NULL.
+
+@param aOffset The offset of the link object from the start of a list element. 
+                The macro _FOFF can be used to calculate this value. 
+
+@panic USER 78, if aOffset is not divisible by four.
+				  
+@see _FOFF
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TDeltaQue<T>::Add(T &aRef,TInt aDelta)
+/**
+Adds the specified list element, having the specified 'distance' from the
+nominal zero point, into the list.
+
+The element is added into the list, the adjacent delta values adjusted, and 
+a suitable delta value assigned to the new element, so that the new element 
+is at the specified 'distance' from the nominal zero point.
+
+@param aRef   The list element to be inserted.
+@param aDelta The 'distance' from the nominal zero point.
+*/
+	{DoAddDelta(&aRef,aDelta);}
+
+
+
+
+template <class T>
+inline void TDeltaQue<T>::Remove(T &aRef)
+/**
+Removes the specified list element from the linked list.
+
+The delta value of the element following the removed element is adjusted
+so that its 'distance' from the nominal zero point remains the same.
+
+@param aRef The list element to be removed.
+*/
+	{DoRemove(&aRef);}
+
+
+
+
+template <class T>
+inline T *TDeltaQue<T>::RemoveFirst()
+/**
+Removes the first list element from the linked list if its delta value is zero 
+or negative.
+
+@return A pointer to the element removed from the linked list. This is NULL, 
+        if the first element has a positive delta value.
+*/
+	{return((T *) DoRemoveFirst());}
+
+
+
+
+// Class TSglQueIter
+template <class T>
+inline TSglQueIter<T>::TSglQueIter(TSglQueBase &aQue)
+	: TSglQueIterBase(aQue)
+/**
+Constructs the iterator for the specified singly linked list.
+
+The iterator can be constructed whether or not the list contains any elements.
+
+If the list does contain elements, the iterator pointer is set to the first one.
+
+If the list has no elements, the iterator pointer is not set and the conversion 
+operator T*() and the post increment operator ++ subsequently return NULL. 
+Once elements have been added to the list, use either the
+TSglQueIter::Set() function or the TSglQueIterBase::SetToFirst() function to set the 
+iterator pointer.
+
+@param aQue A reference to a singly linked list header.
+
+@see TSglQueIter::Set
+@see TSglQueIterBase::SetToFirst
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TSglQueIter<T>::Set(T &aLink)
+/**
+Sets the iterator to point to a specific element in the list.
+
+This function can be used to alter the pointer at any time during the iterator's 
+existence. The referenced element must be in the list, otherwise the result 
+is undefined.
+
+@param aLink A reference to the element from where iteration is to continue.
+*/
+	{DoSet(&aLink);}
+
+
+
+
+template <class T>
+inline TSglQueIter<T>::operator T *()
+/**
+Gets a pointer to the iterator’s current element.
+
+The operator is normally used implicitly; e.g. some member functions of the
+list header class TSglQue require a pointer to an element (of type class T)
+as a parameter, but in practice an iterator is often passed instead.
+This operator performs the necessary conversion.
+*/
+	{return((T *)DoCurrent());}
+
+
+
+
+template <class T>
+inline T *TSglQueIter<T>::operator++(TInt)
+/**
+Gets a pointer to the iterator's current element and then sets the iterator 
+to point to the next element.
+
+Repeated use of this operator allows successive elements to be accessed.
+
+@return A pointer to the current list element, if the iterator points to an 
+        element. NULL, if the iterator does not point to an element; i.e. the
+		iterator pointer has reached the end of the list.
+*/
+	{return((T *)DoPostInc());}
+
+
+
+
+// Class TDblQueIter
+template <class T>
+inline TDblQueIter<T>::TDblQueIter(TDblQueBase &aQue)
+	: TDblQueIterBase(aQue)
+/**
+Constructs the iterator for the specified doubly linked list
+
+The iterator can be constructed whether or not the list contains any elements.
+
+If the list does contain elements, the iterator pointer is set to the first one.
+
+If the list has no elements, the iterator pointer is not set and the conversion 
+operator T*(), the post increment operator++() and the post decrement operator 
+--() subsequently return NULL. Once elements have been added to the list, use 
+either the TDblQueIter::Set() function, the TDblQueIterBase::SetToFirst() 
+function or the TDblQueIterBase::SetToLast() function to set the iterator 
+pointer.
+
+@param aQue A reference to a doubly linked list header.
+
+@see TDblQueIter::Set
+@see TDblQueIterBase::SetToFirst
+@see TDblQueIterBase::SetToLast
+*/
+	{}
+
+
+
+
+template <class T>
+inline void TDblQueIter<T>::Set(T &aLink)
+/**
+Sets the iterator to point to a specific element in the list.
+
+This function can be used to alter the pointer at any time during
+the iterator's existence. The referenced element must be in the list,
+otherwise the result is undefined.
+
+@param aLink A reference to the element from where iteration is to continue.
+*/
+	{DoSet(&aLink);}
+
+
+
+
+template <class T>
+inline TDblQueIter<T>::operator T *()
+/**
+Gets a pointer to the iterator’s current element.
+
+The operator is normally used implicitly; e.g. some member functions of the
+list header class TDblQue require a pointer to an element (of type class T)
+as a parameter but in practice, an iterator is often passed instead.
+This operator performs the necessary conversion.
+
+@return A pointer to the current element, if the iterator points to an element
+        in the list. NULL, if the iterator does not point to an element;
+		i.e. the iterator pointer has previously reached the end of the list
+		(see operator++) or the start of the list (see operator--) or
+		the list is empty. 
+*/
+	{return((T *) DoCurrent());}
+
+
+
+
+template <class T>
+inline T *TDblQueIter<T>::operator++(TInt)
+/**
+Gets a pointer to the iterator's current element and then sets the iterator 
+to point to the next element.
+
+Repeated use of this operator allows successive 
+elements to be accessed in the forwards direction.
+
+@return A pointer to the current list element, if the iterator points to an 
+        element. NULL, if the iterator does not point to an element;
+		i.e. the iterator pointer has reached the end of the list.
+*/
+	{return((T *) DoPostInc());}
+
+
+
+
+template <class T>
+inline T *TDblQueIter<T>::operator--(TInt)
+/**
+Gets a pointer to the iterator's current element and then sets the iterator 
+to point to the previous element.
+
+Repeated use of this operator allows successive 
+elements to be accessed in the backwards direction.
+
+@return A pointer to the current element, if the iterator points to an element. 
+        NULL, if the iterator does not point to an element; i.e. the iterator
+		pointer has reached the beginning of the list.
+*/
+	{return((T *) DoPostDec());}
+
+
+
+
+// Class TKey
+inline void TKey::SetPtr(const TAny *aPtr)
+/**
+Sets the pointer to a sample element whose key is to be used for comparison.
+	
+The element can be in an existing array or it can be located anywhere in
+addressable memory.
+	
+The At() member function supplied by a derived class must return a pointer 
+to this sample element's key when passed an index value of KIndexPtr.
+	
+SetPtr() must be called before calling User::BinarySearch() because this algorithm 
+uses the key of this sample element as the basis for searching the array.
+	
+@param aPtr A pointer to a sample element.
+*/
+	{iPtr=aPtr;}
+
+
+
+
+// Class TCharF
+inline TCharF::TCharF(TUint aChar)
+	: TChar(User::Fold(aChar))
+/**
+Constructs this 'fold character' object and initialises it with the specified 
+value.
+
+@param aChar The initialisation value.
+*/
+	{}
+
+
+
+
+inline TCharF::TCharF(const TChar& aChar)
+	: TChar(User::Fold(aChar))
+/**
+Constructs this 'fold character' object and initialises it with the value of 
+the TChar object aChar.
+
+@param aChar The character object to use as the initialisation value.
+*/
+	{}
+
+
+
+
+inline TCharF& TCharF::operator=(TUint aChar)
+/**
+Assigns an unsigned integer value to the 'fold character' object.
+
+@param aChar The value to assign.
+
+@return A reference to this 'fold character' object.
+*/
+	{SetChar(User::Fold(aChar));return(*this);}
+
+
+
+
+inline TCharF& TCharF::operator=(const TChar& aChar)
+/**
+Assigns the specified character object to this 'fold character' object.
+
+@param aChar The character object to assign.
+
+@return A reference to this 'fold character' object.
+*/
+	{SetChar(User::Fold(aChar));return(*this);}
+
+
+
+
+// Class TCharLC
+inline TCharLC::TCharLC(TUint aChar)
+	: TChar(User::LowerCase(aChar))
+/**
+Constructs this 'character to lower case' object and initialises it with the 
+specified value.
+
+@param aChar The initialisation value.
+
+*/
+	{}
+
+
+
+
+inline TCharLC::TCharLC(const TChar& aChar)
+	: TChar(User::LowerCase(aChar))
+/**
+Constructs this 'character to lower case' object and initialises it with the 
+value of the TChar object aChar.
+
+@param aChar The character object to use as the initialisation value.
+*/
+	{}
+
+
+
+
+inline TCharLC& TCharLC::operator=(TUint aChar)
+/**
+Assigns an unsigned integer value to the 'character to lower case' object.
+
+@param aChar The value to assign.
+
+@return A reference to this 'character to lower case' object.
+*/
+	{SetChar(User::LowerCase(aChar));return(*this);}
+
+
+
+
+inline TCharLC& TCharLC::operator=(const TChar& aChar)
+/**
+Assigns the specified character object to this 'character to lower case'
+object.
+
+@param aChar The character object to assign.
+
+@return A reference to this 'character to lower case' object.
+*/
+	{SetChar(User::LowerCase(aChar));return(*this);}
+
+
+
+
+// Class TCharUC
+inline TCharUC::TCharUC(TUint aChar)
+	: TChar(User::UpperCase(aChar))
+/**
+Constructs this 'character to upper case' object and initialises it with the 
+specified value.
+
+@param aChar The initialisation value.
+*/
+	{}
+
+
+
+
+inline TCharUC::TCharUC(const TChar& aChar)
+	: TChar(User::UpperCase(aChar))
+/**
+Constructs this 'character to upper case' object and initialises it with the 
+value of the TChar object aChar.
+
+@param aChar The character object to use as the initialisation value.
+*/
+	{}
+
+
+
+
+inline TCharUC& TCharUC::operator=(TUint aChar)
+/**
+Assigns an unsigned integer value to the 'character to upper case'  object.
+
+@param aChar The value to assign.
+
+@return A reference to this 'character to upper case'  object.
+*/
+	{SetChar(User::UpperCase(aChar));return(*this);}
+
+
+
+
+inline TCharUC& TCharUC::operator=(const TChar& aChar)
+/**
+Assigns the specified character object to this 'character to upper case' 
+object.
+
+@param aChar The character object to assign.
+
+@return A reference to this 'character to upper case'  object.
+*/
+	{SetChar(User::UpperCase(aChar));return(*this);}
+
+
+
+
+// Class TDateTime
+inline TDateTime::TDateTime()
+	: iYear(1980),
+	  iMonth(EJanuary), 
+	  iDay(1),
+	  iHour(0),
+	  iMinute(0),
+	  iSecond(0),
+	  iMicroSecond(0)
+/**
+Constructs an uninitialised TDateTime object.
+*/
+	{}           
+
+
+
+
+inline TInt TDateTime::Year() const
+/**
+Gets the year component of the date/time.
+
+A negative value indicates a BC date.
+
+@return The year
+*/
+	{return(iYear);}
+
+
+
+
+inline TMonth TDateTime::Month() const
+/**
+Gets the month component of the date/time.
+
+@return The month. EJanuary to EDecember. Offset from zero, so add one before 
+        displaying the month number.
+*/
+	{return(iMonth);}
+
+
+
+
+inline TInt TDateTime::Day() const
+/**
+Gets the day component of the date/time.
+
+@return The day. Offset from zero, so add one before displaying the day number.
+*/
+	{return(iDay);}
+
+
+
+
+inline TInt TDateTime::Hour() const
+/**
+Gets the hour component of the date/time.
+
+@return The hour.
+*/
+	{return(iHour);}
+
+
+
+
+inline TInt TDateTime::Minute() const
+/**
+Gets the minute component of the date/time.
+
+@return The minute.
+*/
+	{return(iMinute);}
+
+
+
+
+inline TInt TDateTime::Second() const
+/**
+Gets the second component of the date/time.
+
+@return The second.
+*/
+	{return(iSecond);}
+
+
+
+
+inline TInt TDateTime::MicroSecond() const
+/**
+Gets the microsecond component of the date/time.
+
+@return The microsecond.
+*/
+	{return(iMicroSecond);}
+
+// Class TTimeIntervalMicroSeconds
+
+
+
+
+inline TTimeIntervalMicroSeconds::TTimeIntervalMicroSeconds()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMicroSeconds::TTimeIntervalMicroSeconds(const TInt64& aInterval)
+	: iInterval(aInterval)
+/**
+Constructs the object with the specified 64-bit interval value.
+
+@param aInterval The 64-bit interval value with which the object is to be
+                 initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMicroSeconds& TTimeIntervalMicroSeconds::operator=(const TInt64& aInterval)
+/**
+Assigns a 64-bit integer value to this object.
+
+@param aInterval The 64-bit integer interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator==(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is equal to the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if the two time intervals are equal. False otherwise.
+*/
+	{return(iInterval==aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator!=(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is not equal to the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if the two time intervals are not equal. False otherwise.
+*/
+	{return(iInterval!=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator>=(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is greater than or equal to the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is greater than or equal to the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval>=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator<=(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is less than or equal to the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is less than or equal to the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval<=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator>(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is greater than the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is greater than the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval>aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalMicroSeconds::operator<(const TTimeIntervalMicroSeconds& aInterval) const
+/**
+Tests whether this TTimeIntervalMicroSeconds object is less than the
+specified TTimeIntervalMicroSeconds object.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is less than the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval<aInterval.iInterval);}
+
+
+
+
+inline const TInt64& TTimeIntervalMicroSeconds::Int64() const
+/**
+Gets the time interval as a 64-bit integer value.
+
+@return This 64-bit integer time interval value.
+*/
+	{return(iInterval);}
+
+
+
+
+// Class TTimeIntervalBase
+inline TTimeIntervalBase::TTimeIntervalBase()
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalBase::TTimeIntervalBase(TInt aInterval)
+	: iInterval(aInterval)
+/**
+Constructor taking an interval value.
+
+@param aInterval The interval value.
+*/
+	{}
+
+
+
+
+inline TBool TTimeIntervalBase::operator==(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is the same as the specified time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if the two time intervals are equal. False otherwise.
+*/
+	{return(iInterval==aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalBase::operator!=(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is not the same as the specified
+time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if the two time intervals differ. False otherwise.
+*/
+	{return(iInterval!=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalBase::operator>=(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is greater than or equal to the
+specified time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is greater than or equal to the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval>=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalBase::operator<=(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is less than or equal to the
+specified time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is less than or equal to the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval<=aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalBase::operator>(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is greater than the specified time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is greater than the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval>aInterval.iInterval);}
+
+
+
+
+inline TBool TTimeIntervalBase::operator<(TTimeIntervalBase aInterval) const
+/**
+Tests whether this time interval is less than the specified time interval.
+
+@param aInterval The time interval to be compared with this time interval.
+
+@return True if this time interval is less than the specified
+        time interval. False otherwise.
+*/
+	{return(iInterval<aInterval.iInterval);}
+
+
+
+
+inline TInt TTimeIntervalBase::Int() const
+/** 
+Gets the time interval as a 32 bit integer.
+
+@return The time interval as a 32 bit integer.
+*/
+	{return(iInterval);}
+
+
+
+
+// Class TTimeIntervalMicroSeconds32
+inline TTimeIntervalMicroSeconds32::TTimeIntervalMicroSeconds32()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMicroSeconds32::TTimeIntervalMicroSeconds32(TInt aInterval)
+    : TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMicroSeconds32& TTimeIntervalMicroSeconds32::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalSeconds
+inline TTimeIntervalSeconds::TTimeIntervalSeconds()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalSeconds::TTimeIntervalSeconds(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalSeconds& TTimeIntervalSeconds::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalMinutes
+inline TTimeIntervalMinutes::TTimeIntervalMinutes()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMinutes::TTimeIntervalMinutes(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMinutes& TTimeIntervalMinutes::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalHours
+inline TTimeIntervalHours::TTimeIntervalHours()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+inline TTimeIntervalHours::TTimeIntervalHours(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalHours& TTimeIntervalHours::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalDays
+inline TTimeIntervalDays::TTimeIntervalDays()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalDays::TTimeIntervalDays(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalDays& TTimeIntervalDays::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalMonths
+inline TTimeIntervalMonths::TTimeIntervalMonths()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMonths::TTimeIntervalMonths(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalMonths& TTimeIntervalMonths::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTimeIntervalYears
+inline TTimeIntervalYears::TTimeIntervalYears()
+/**
+Default constructor.
+
+Constructs an uninitialised object.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalYears::TTimeIntervalYears(TInt aInterval)
+	: TTimeIntervalBase(aInterval)
+/**
+Constructs the object with the specified interval value.
+
+@param aInterval The interval value with which the object is to be initialised.
+*/
+	{}
+
+
+
+
+inline TTimeIntervalYears& TTimeIntervalYears::operator=(TInt aInterval)
+/**
+Assigns a value to this object.
+
+@param aInterval The interval value to be assigned.
+
+@return A reference to this object.
+*/
+	{iInterval=aInterval;return(*this);}
+
+
+
+
+// Class TTime
+inline TTime::TTime()
+/**
+Default constructor.
+
+The object is initialised to an arbitrary value.
+*/
+	{}
+
+
+
+
+inline TTime::TTime(const TInt64& aTime)
+	: iTime(aTime)
+/**
+Constructs the object from a 64-bit microsecond value.
+
+@param aTime Microsecond value to which to initialise the TTime object.
+*/
+	{}
+
+
+
+
+inline TTime &TTime::operator=(const TInt64& aTime)
+/**
+Assigns a value contained in a 64-bit integer to this TTime object.
+
+@param aTime Microsecond value which to assign to the TTime object.
+
+@return This TTime object.
+*/
+	{iTime=aTime;return(*this);}
+
+
+
+
+inline TBool TTime::operator==(TTime aTime) const
+/**
+Tests whether two date/times are equal.
+
+@param aTime The time to be compared with this TTime.
+
+@return True if the two TTimes are equal. False if not.
+*/
+	{return(iTime==aTime.iTime);}
+
+
+
+
+inline TBool TTime::operator!=(TTime aTime) const
+/**
+Tests whether two date/times are not equal.
+
+@param aTime The date/time to be compared with this TTime.
+
+@return True if the two TTimes are different. False if the same.
+*/
+	{return(iTime!=aTime.iTime);}
+
+
+
+
+inline TBool TTime::operator>=(TTime aTime) const
+/**
+Tests whether this date/time is later than or the same as the
+specified date/time.
+
+@param aTime The date/time to be compared with this date/time.
+
+@return True if this date/time is later than or the same as the
+        specified date/time. False otherwise.
+*/
+	{return(iTime>=aTime.iTime);}
+
+
+
+
+inline TBool TTime::operator<=(TTime aTime) const
+/**
+Tests whether this date/time is earlier than or the same as the
+specified date/time.
+
+@param aTime The date/time to be compared with this date/time.
+
+@return True if this date/time is earlier than or the same as the
+        specified date/time. False otherwise.
+*/
+	{return(iTime<=aTime.iTime);}
+
+
+
+
+inline TBool TTime::operator>(TTime aTime) const
+/**
+Tests whether this date/time is later than the specified date/time.
+
+@param aTime The date/time to be compared with this date/time.
+
+@return True if this date/time is later than the specified date/time.
+        False otherwise.
+*/
+	{return(iTime>aTime.iTime);}
+
+
+
+
+inline TBool TTime::operator<(TTime aTime) const
+/**
+Tests whether this date/time is earlier than the specified date/time.
+
+@param aTime The date/time to be compared with this date/time.
+
+@return True if this date/time is earlier than the specified date/time.
+        False otherwise.
+*/
+	{return(iTime<aTime.iTime);}
+
+
+
+
+inline const TInt64& TTime::Int64() const
+/**
+Gets the 64 bit integer representation of this TTime obect.
+
+@return The 64 bit integer representation.
+*/
+	{return(iTime);}
+
+
+
+
+// Class TLexMark8
+inline TLexMark8::TLexMark8()
+	: iPtr(NULL)
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TLexMark8::TLexMark8(const TUint8 *aString) 
+	: iPtr(aString)
+	{}
+
+
+
+
+// Class TLex8
+inline TLex8::TLex8(const TUint8 *aString)
+/**
+Constructs the object with a pointer to a string.
+
+The extraction mark and next character members are initialised to point
+to the start of the string.
+
+@param aString String to be assigned.
+*/
+	{Assign(TPtrC8(aString));}
+
+
+
+
+inline TLex8::TLex8(const TDesC8 &aDes)
+/**
+Constructs the object with a descriptor.
+
+The extraction mark and next character 
+members are initialised to point to the start of the string.
+
+@param aDes Descriptor to be assigned by reference.
+*/
+	{Assign(aDes);}
+
+
+
+
+inline TLex8& TLex8::operator=(const TUint8* aString)
+/**
+Allows strings to be assigned to a TLex8.
+
+@param aString String to be assigned to the TLex8. 
+
+@return TLex8 descriptor.
+*/
+	{Assign(TPtrC8(aString));return(*this);}
+
+
+
+
+inline TLex8& TLex8::operator=(const TDesC8& aBuf)
+/**
+Allows descriptors to be assigned to a TLex8.
+
+@param aBuf Descriptor to be assigned to the TLex8.
+
+@return TLex8 descriptor.
+*/
+	{Assign(aBuf);return(*this);}
+
+
+
+
+inline TBool TLex8::Eos() const
+/**
+Tests whether the next character position is at the end of the string.
+
+@return True if at end of string, false otherwise.
+*/
+	{return(iNext==iEnd);}
+
+
+
+
+inline void TLex8::Mark()
+/**
+Sets the TLex8's next character position to its extraction mark.
+*/
+	{Mark(iMark);}
+
+
+
+
+inline void TLex8::Mark(TLexMark8& aMark) const
+/**
+Sets the supplied extraction mark to the TLex8's next character position.
+
+@param aMark On return, this is set to the next character position.
+*/
+	{aMark.iPtr=iNext;}
+
+
+
+
+inline void TLex8::UnGetToMark()
+/**
+Sets the next character position to the current extraction mark position.
+
+@panic USER 63, if the extraction mark is before the start or beyond the end
+       of the string.
+*/
+    {UnGetToMark(iMark);}
+
+
+
+
+inline void TLex8::SkipAndMark(TInt aNumber)
+/**
+Moves the next character position a specified number of characters. 
+  
+@param aNumber Number of characters to skip.
+
+@panic USER 61, if the skip moves the next character position either to before
+       the start or beyond the end of the string.
+*/
+    {SkipAndMark(aNumber,iMark);}
+
+
+
+
+inline void TLex8::SkipSpaceAndMark()
+/**
+Moves the next character position past any white space and copies it to the 
+TLex8's extraction mark.
+
+Stops if at the end of the string.
+*/
+    {SkipSpaceAndMark(iMark);}
+
+
+
+
+inline TInt TLex8::TokenLength() const
+/**
+Gets the length of the token.
+
+This is the difference between the next character 
+position and the extraction mark.
+
+@return Length of the token.
+*/
+	{return(iNext-iMark.iPtr);}
+
+
+
+
+inline TInt TLex8::MarkedOffset() const
+/**
+Gets the offset of the extraction mark from the start of the string.
+
+@return The offset of the extraction mark.
+*/
+    {return(iMark.iPtr-iBuf);}
+
+
+
+
+inline TInt TLex8::Val(TInt &aVal)
+/**
+Parses the string to extract a signed integer.
+
+@param aVal On return, contains the extracted integer.
+
+@return KErrNone if successful.
+        KErrGeneral if the next character position is initially at the end of the string
+        or no valid characters found initially.
+        KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
+        If error codes KErrGeneral or KErrOverflow are returned, the object's
+        members are left unaltered.
+*/
+	{return(Val((TInt32&)aVal));}
+
+
+
+
+inline TInt TLex8::Val(TUint &aVal,TRadix aRadix)
+/**
+Parses the string to extract an unsigned integer, using the specified radix.
+
+@param aVal   On return, contains the extracted integer.
+@param aRadix The radix to use when converting the number. The default radix
+              for this function overload is decimal.
+
+@return KErrNone if successful.
+        KErrGeneral if the next character position is initially at the end of the string
+        or no valid characters found initially.
+        KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
+        If error codes KErrGeneral or KErrOverflow are returned, the object's
+        members are left unaltered.
+*/
+	{return(Val((TUint32&)aVal,aRadix));}
+
+
+
+
+inline void TLex8::Assign(const TLex8& aLex)
+/**
+Assigns a string to this object from another TLex8 object.
+
+@param aLex The object to be assigned.
+*/
+	{new(this) TLex8(aLex);}
+
+
+
+
+// Class TLexMark16
+inline TLexMark16::TLexMark16()
+	: iPtr(NULL)
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TLexMark16::TLexMark16(const TUint16 *aString) 
+	: iPtr(aString)
+	{}
+
+
+
+
+// Class TLex16
+inline TLex16::TLex16(const TUint16 *aString)
+/**
+Constructs the object with a pointer to a string.
+
+The extraction mark and next character members are initialised to point
+to the start of the string.
+
+@param aString String to be assigned.
+*/
+	{Assign(TPtrC16(aString));}
+
+
+
+
+inline TLex16::TLex16(const TDesC16 &aDes)
+/**
+Constructs the object with a descriptor.
+
+The extraction mark and next character 
+members are initialised to point to the start of the string.
+
+@param aDes Descriptor to be assigned by reference.
+*/
+	{Assign(aDes);}
+
+
+
+inline TLex16& TLex16::operator=(const TUint16* aString)
+/** 
+Allows strings to be assigned to a TLex16.
+
+@param aString String to be assigned to the TLex16. 
+
+@return TLex16 descriptor.
+*/
+	{Assign(TPtrC16(aString));return(*this);}
+
+
+
+
+inline TLex16& TLex16::operator=(const TDesC16& aBuf)
+/**
+Allows descriptors to be assigned to a TLex16.
+
+@param aBuf Descriptor to be assigned to the TLex16.
+
+@return TLex8 descriptor.
+*/
+	{Assign(aBuf);return(*this);}
+
+
+
+
+inline TBool TLex16::Eos() const
+/**
+Tests whether the next character position is at the end of the string.
+
+@return True if at end of string, false otherwise.
+*/
+	{return(iNext==iEnd);}
+
+
+
+
+inline void TLex16::Mark(TLexMark16& aMark) const
+/**
+Sets the supplied extraction mark to the TLex16's next character position.
+
+@param aMark On return, set to the next character position.
+*/
+	{aMark.iPtr=iNext;}
+
+
+
+
+inline void TLex16::Mark()
+/**
+Sets the TLex16's next character position to its extraction mark.
+*/
+	{iMark.iPtr=iNext;}
+
+
+
+
+inline void TLex16::UnGetToMark()
+/**
+Sets the next character position to the current extraction mark position.
+
+@panic USER 68, if the specified mark is before the start or beyond the end
+       of the string.
+*/
+    {UnGetToMark(iMark);}
+
+
+
+
+inline void TLex16::SkipAndMark(TInt aNumber)
+/**
+Moves the next character position a specified number of characters.
+
+@param aNumber Number of characters to skip. 
+
+@panic USER 68, if the skip moves the next character position either to before
+       the start or beyond the end of the string.
+*/
+    {SkipAndMark(aNumber,iMark);}
+
+
+
+
+inline void TLex16::SkipSpaceAndMark()
+/**
+Moves the next character position past any white space and copies it to the 
+TLex16's extraction mark.
+
+Stops if at the end of the string.
+*/
+    {SkipSpaceAndMark(iMark);}
+
+
+
+
+inline TInt TLex16::TokenLength() const
+/**
+Gets the length of the token.
+
+This is the difference between the next character 
+position and the extraction mark.
+
+@return Length of the token.
+*/
+	{return(iNext-iMark.iPtr);}
+
+
+
+
+inline TInt TLex16::MarkedOffset() const
+/**
+Gets the offset of the extraction mark from the start of the string.
+
+@return The offset of the extraction mark.
+*/
+    {return(iMark.iPtr-iBuf);}
+
+
+
+
+inline TInt TLex16::Val(TInt &aVal)
+/**
+Parses the string to extract a signed integer.
+
+@param aVal On return, contains the extracted integer.
+
+@return KErrNone if successful.
+        KErrGeneral if the next character position is initially at the end of the string
+        or no valid characters found initially.
+        KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
+        If error codes KErrGeneral or KErrOverflow are returned, the object's
+        members are left unaltered.
+*/
+	{return(Val((TInt32&)aVal));}
+
+
+
+
+inline TInt TLex16::Val(TUint &aVal,TRadix aRadix)
+/**
+Parses the string to extract an unsigned integer, using the specified radix.
+
+@param aVal   On return, contains the extracted integer.
+@param aRadix The radix to use when converting the number. The default radix
+              for this function overload is decimal.
+
+@return KErrNone if successful.
+        KErrGeneral if the next character position is initially at the end of the string
+        or no valid characters found initially.
+        KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
+        If error codes KErrGeneral or KErrOverflow are returned, the object's
+        members are left unaltered.
+*/
+	{return(Val((TUint32&)aVal,aRadix));}
+
+
+
+
+inline void TLex16::Assign(const TLex16& aLex)
+/**
+Assigns a string to this object from another TLex16 object.
+
+@param aLex The object to be assigned.
+*/
+	{new(this) TLex16(aLex);}
+
+
+
+
+// Class TLocale
+inline TLocale::TLocale(TInt)
+	{}
+
+inline TInt TLocale::RegionCode() const
+	{return(iRegionCode);}
+inline TInt TLocale::CountryCode() const
+/**
+Gets the code which is used to select country-specific locale data.
+
+The country code is the code used as the international dialling prefix.
+This code is also used to identify a country by the dialling software.
+	
+@return The country code.
+*/
+	{return(iCountryCode);}
+
+
+
+
+inline void TLocale::SetCountryCode(TInt aCode)
+/**
+Sets the value which is used to select country-specific locale data.
+
+This value can be retrieved by using TLocale::CountryCode(). The country code
+is the code used as the international dialling prefix. This code is also used
+to identify a country by the dialling software.
+	
+@param aCode The country code.
+
+@see TLocale::CountryCode
+*/
+	{iCountryCode=aCode;}
+
+
+
+
+inline TTimeIntervalSeconds TLocale::UniversalTimeOffset() const
+/**
+Gets the locale's universal time offset.
+	
+@return Offset in seconds from universal time. Time zones east of universal 
+	    time have positive offsets. Time zones west of universal time have negative 
+	    offsets.
+
+@deprecated Use User::UTCOffset to get the current offset inclusive of daylight
+			savings time. This function returns the same value, for compatibility.
+*/
+	{return(iUniversalTimeOffset);}
+
+
+
+
+inline TDateFormat TLocale::DateFormat() const
+/**
+Gets the date format.
+	
+@return The date format.
+*/
+	{return(iDateFormat);}
+
+
+
+
+inline void TLocale::SetDateFormat(TDateFormat aFormat)
+/**
+Sets the date format.
+	
+@param aFormat The date format to be used.
+*/
+	{iDateFormat=aFormat;}
+
+
+
+
+inline TTimeFormat TLocale::TimeFormat() const
+/**
+Gets the time format (12 or 24 hour).
+	
+@return The time format.
+*/
+	{return(iTimeFormat);}
+
+
+
+
+inline void TLocale::SetTimeFormat(TTimeFormat aFormat)
+/**
+Sets the time format (12 or 24 hour).
+	
+@param aFormat The time format.
+*/
+	{iTimeFormat=aFormat;}
+
+
+
+
+inline TLocalePos TLocale::CurrencySymbolPosition() const
+/**
+Gets the currency symbol position.
+	
+For negative currency values, this position may be
+reversed using SetNegativeCurrencySymbolOpposite().
+	
+@return The currency symbol position.
+
+@see TLocale::SetNegativeCurrencySymbolOpposite
+*/
+	{return(iCurrencySymbolPosition);}
+
+
+
+
+inline void TLocale::SetCurrencySymbolPosition(TLocalePos aPos)
+/**
+Sets the currency symbol position.
+	
+@param aPos The currency symbol position.
+*/
+	{iCurrencySymbolPosition=aPos;}
+
+
+
+
+inline TBool TLocale::CurrencySpaceBetween() const
+/**
+Gets whether or not a space is inserted between the currency symbol and the 
+currency value.
+	
+For negative currency values, the space can be removed using SetNegativeLoseSpace().
+	
+@return True if a space is inserted; false if not.
+
+@see TLocale::SetNegativeLoseSpace
+*/
+	{return(iCurrencySpaceBetween);}
+
+
+
+
+inline void TLocale::SetCurrencySpaceBetween(TBool aSpace)
+/**
+Sets whether a space is inserted between the currency symbol and the currency 
+amount.
+	
+@param aSpace ETrue if a space is inserted; EFalse if not.
+*/
+	{iCurrencySpaceBetween=aSpace;}
+
+
+
+
+inline TInt TLocale::CurrencyDecimalPlaces() const
+/**
+Gets the number of decimal places to which currency values are set.
+	
+@return The number of decimal places.
+*/
+	{return(iCurrencyDecimalPlaces);}
+
+
+
+
+inline void TLocale::SetCurrencyDecimalPlaces(TInt aPlaces)
+/**
+Sets the number of decimal places to which currency values should be set.
+	
+@param aPlaces The number of decimal places.
+*/
+	{iCurrencyDecimalPlaces=aPlaces;}
+
+
+
+
+inline TBool TLocale::CurrencyNegativeInBrackets() const
+/**
+@deprecated
+
+Gets whether negative currency values are enclosed in brackets rather than 
+being preceded by a minus sign. 
+	
+This is deprecated, use NegativeCurrencyFormat() instead.
+	
+@return True if negative currency is enclosed in brackets and has no minus 
+        sign; false if negative currency has a minus sign and is not enclosed
+		in brackets.
+
+@see TLocale::NegativeCurrencyFormat
+*/
+	{return((TBool)iNegativeCurrencyFormat);}			
+
+
+
+
+inline void TLocale::SetCurrencyNegativeInBrackets(TBool aBool)
+/** 
+@deprecated
+
+Sets whether negative currency values are enclosed in brackets rather than
+being preceded by a minus sign.
+	
+This is deprecated, use SetNegativeCurrencyFormat() instead.
+	
+@param aBool ETrue, if a negative currency value must be enclosed in brackets 
+	         without a minus sign; EFalse, if a negative currency value is
+			 preceded by a minus sign without any enclosing brackets.
+
+@see TLocale::SetNegativeCurrencyFormat
+*/
+	{iNegativeCurrencyFormat=(aBool)?EInBrackets:ELeadingMinusSign;}
+
+
+
+
+inline TBool TLocale::CurrencyTriadsAllowed() const
+/**
+Gets whether triads are allowed in currency values. Triads are groups of 
+three digits separated by the thousands separator.
+	
+@return True if triads are allowed; false if not.
+*/
+	{return(iCurrencyTriadsAllowed);}
+
+
+
+
+inline void TLocale::SetCurrencyTriadsAllowed(TBool aBool)
+/**
+Sets whether triads are allowed in currency values.
+	
+@param aBool ETrue if triads are allowed; EFalse if triads not allowed.
+*/
+	{iCurrencyTriadsAllowed=aBool;}
+
+
+
+
+inline TChar TLocale::ThousandsSeparator() const
+/**
+Gets the character used to separate groups of three digits to the left of 
+the decimal separator.
+	
+A thousands separator character is only displayed in currency values if currency 
+triads are allowed.
+	
+@return The character used as the thousands separator.
+*/
+	{return(iThousandsSeparator);}
+
+
+
+
+inline void TLocale::SetThousandsSeparator(const TChar& aChar)
+/**
+Sets the character to be used to separate groups of three digits to the left 
+of the decimal separator.
+	
+A thousands separator character is only displayed in currency values if currency 
+triads are allowed.
+	
+@param aChar The character to be used as the thousands separator.
+*/
+	{iThousandsSeparator=aChar;}
+
+
+
+
+inline TChar TLocale::DecimalSeparator() const
+/**
+Gets the character used to separate a whole number from its fractional part.
+	
+@return The character used as the decimal separator.
+*/
+	{return(iDecimalSeparator);}
+
+
+
+
+inline void TLocale::SetDecimalSeparator(const TChar& aChar)
+/**
+Sets the character to be used to separate a whole number from its fractional 
+part.
+	
+@param aChar The character to be used as the decimal separator.
+*/
+	{iDecimalSeparator=aChar;}
+
+
+
+
+inline TChar TLocale::DateSeparator(TInt aIndex) const
+/**
+Gets one of the four characters used to separate the day, month and year 
+components of the date.
+	
+If the four separators are represented by S0, S1, S2 and S3 and the three 
+date components are represented by XX, YY and ZZ, then the separators are 
+located: S0 XX S1 YY S2 ZZ S3.
+	
+@param aIndex An index indicating which of the four separators is being accessed. 
+              This must be a value between zero and three inclusive.
+
+@return A date separator character as determined by the value of aIndex.
+*/
+	{return(iDateSeparator[aIndex]);}
+
+
+
+
+inline void TLocale::SetDateSeparator(const TChar& aChar,TInt aIndex)
+/**
+Sets one of the four characters used to separate the day, month and year
+components of the date.
+	
+If the four separators are represented by S0, S1, S2 and S3 and the three 
+date components are represented by XX, YY and ZZ, then the separators are 
+located: S0 XX S1 YY S2 ZZ S3.
+	
+@param aChar  A date separator character to be used.
+@param aIndex An index indicating which of the four separators is being accessed. 
+	          This must be a value between zero and three inclusive.
+*/
+	{__ASSERT_DEBUG(aIndex>=0 && aIndex<KMaxDateSeparators,User::Invariant());
+	iDateSeparator[aIndex]=aChar;}
+
+
+
+
+inline TChar TLocale::TimeSeparator(TInt aIndex) const
+/**
+Gets one of the four characters used to separate the hour, second and minute 
+components of the time.
+	
+If the four separators are represented by S0, S1, S2 and S3 and the three 
+time components are represented by XX, YY and ZZ, then the separators are 
+located: S0 XX S1 YY S2 ZZ S3.
+	
+@param aIndex An index indicating which of the four separators is being
+              accessed. This must be a value between zero and three inclusive.
+
+@return A time separator character as determined by the value of aIndex.
+*/
+
+	{return(iTimeSeparator[aIndex]);}
+
+
+
+
+inline void TLocale::SetTimeSeparator(const TChar& aChar,TInt aIndex)
+/**
+Sets one of the four characters used to separate the hour, minute and second 
+components of the date.
+	
+If the four separators are represented by S0, S1, S2 and S3 and the three 
+time components are represented by XX, YY and ZZ, then the separators are 
+located: S0 XX S1 YY S2 ZZ S3.
+	
+@param aChar  A time separator character to be used.
+@param aIndex An index indicating which of the four separators is being accessed. 
+	          This must be a value between zero and three inclusive.
+*/
+	{__ASSERT_DEBUG(aIndex>=0 && aIndex<KMaxTimeSeparators,User::Invariant());
+	iTimeSeparator[aIndex]=aChar;}
+
+
+
+
+inline TLocalePos TLocale::AmPmSymbolPosition() const
+/**
+Gets the am/pm text position (before or after the time value).
+
+@return The am/pm text position (0 before, 1 after).
+*/
+	{return(iAmPmSymbolPosition);}
+
+
+
+
+inline void TLocale::SetAmPmSymbolPosition(TLocalePos aPos)
+/**
+Sets the am/pm text position (before or after the time value).
+	
+@param aSpace The am/pm text position (0 before, 1 after).
+*/
+	{iAmPmSymbolPosition=aPos;}
+
+
+
+
+inline TBool TLocale::AmPmSpaceBetween() const
+/**
+Tests whether or not a space is inserted between the time and the preceding 
+or trailing am/pm text.
+	
+@return True if a space is inserted between the time and am/pm text; false 
+        if not.
+*/
+	{return(iAmPmSpaceBetween);}
+
+
+
+
+inline void TLocale::SetAmPmSpaceBetween(TBool aSpace)
+/**
+Sets whether a space is inserted between the time and the preceding or trailing 
+am/pm text.
+	
+@param aPos ETrue if a space is inserted between the time and am/pm text; 
+            EFalse otherwise.
+*/
+	{iAmPmSpaceBetween=aSpace;}
+
+
+
+
+inline TUint TLocale::DaylightSaving() const
+/**
+Gets the zones in which daylight saving is in effect.
+	
+If daylight saving is in effect, one hour is added to the time.
+	
+Use TLocale::QueryHomeHasDaylightSavingOn() to find out whether daylight saving 
+is in effect for the home city. This is because the daylight saving setting 
+for the home city may differ from that of the zone in which home is located.
+	
+@return A bit mask in which the three least significant bits are defined, 
+        indicating which of the three daylight saving zones are adjusted for
+		daylight saving. These bits represent:
+		Northern (non-European countries in the northern hemisphere),
+		Southern (southern hemisphere),
+		and European.
+
+@see TLocale::QueryHomeHasDaylightSavingOn
+@see TDaylightSavingZone
+
+@deprecated Use the timezone server to retrieve information on timezones and DST.
+			This method will always indicate that DST is inactive, in order to
+			preserve compatibility.
+*/
+	{return(iDaylightSaving);} 
+
+
+
+
+inline TBool TLocale::QueryHomeHasDaylightSavingOn() const
+/**
+Tests whether or not daylight saving is set for the home city.
+	
+@return True if home daylight saving is set; false if not.
+
+@deprecated Use the timezone server to retrieve information on timezones and DST.
+			This method will always indicate that DST is inactive, in order to
+			preserve compatibility.
+*/
+	{return((iHomeDaylightSavingZone|EDstHome) & iDaylightSaving);}
+
+
+
+
+inline TDaylightSavingZone TLocale::HomeDaylightSavingZone() const
+/**
+Gets the daylight saving zone in which the home city is located.
+	
+@return The daylight saving zone in which the home city is located.
+
+@deprecated Use the timezone server to retrieve information on timezones and DST.
+*/
+	{return(iHomeDaylightSavingZone);}
+
+
+
+
+inline TUint TLocale::WorkDays() const
+/**
+Gets a bit mask representing the days of the week which are considered as 
+working days.
+	
+@return A bit mask of seven bits indicating (by being set) which days are 
+        workdays. The least significant bit corresponds to Monday, the next bit to 
+	    Tuesday and so on.
+*/
+	{return(iWorkDays);}
+
+
+
+
+inline void TLocale::SetWorkDays(TUint aMask)
+/**
+Sets the days of the week which are considered as working days.
+	
+@param aMask A bit mask of seven bits indicating (by being set) which days 
+             are workdays. The least significant bit corresponds to Monday, the
+			 next bit is Tuesday and so on.
+*/
+	{iWorkDays=aMask;}
+
+
+
+
+inline TDay TLocale::StartOfWeek() const
+/**
+Gets the day which is considered the first day of the week.
+	
+@return The first day of the week.
+*/
+	{return(iStartOfWeek);}
+
+
+
+
+inline void TLocale::SetStartOfWeek(TDay aDay)
+/**
+Sets the day which is considered to be the first day of the week.
+	
+@param aDay The first day of the week.
+*/
+	{iStartOfWeek=aDay;}
+
+
+
+
+inline TClockFormat TLocale::ClockFormat() const
+/**
+Gets the clock display format.
+	
+@return The clock display format.
+*/
+	{return(iClockFormat);}
+
+
+
+
+inline void TLocale::SetClockFormat(TClockFormat aFormat)
+/**
+Sets the clock display format.
+	
+@param aFormat The clock display format.
+*/
+	{iClockFormat=aFormat;}
+
+
+
+
+inline TUnitsFormat TLocale::UnitsGeneral() const
+/**
+Gets the general units of measurement.
+
+This function should be used when both short and long distances use the
+same units of measurement.
+	
+@return General units of measurement.
+*/
+	{return(iUnitsGeneral);}
+
+
+
+
+inline void TLocale::SetUnitsGeneral(TUnitsFormat aFormat)
+/**
+Sets the general units of measurement.
+This function should be used when both short and long distances use the
+same units of measurement.
+	
+@param aFormat General units of measurement.
+*/
+	{iUnitsGeneral=aFormat;}
+
+
+
+
+inline TUnitsFormat TLocale::UnitsDistanceShort() const
+/**
+Gets the units of measurement for short distances.
+
+Short distances are those which would normally be represented by either
+metres and centimetres or feet and inches.
+	
+@return Units of measurement for short distances.
+*/
+	{return(iUnitsDistanceShort);}
+
+
+
+
+inline void TLocale::SetUnitsDistanceShort(TUnitsFormat aFormat)
+/**
+Sets the units of measurement for short distances.
+
+Short distances are those which would normally be represented by either
+metres and centimetres or feet and inches.
+	
+@param aFormat Units of measurement for short distances.
+*/
+	{iUnitsDistanceShort=aFormat;}
+
+
+
+
+inline TUnitsFormat TLocale::UnitsDistanceLong() const
+/**
+Gets the units of measurement for long distances.
+
+Long distances are those which would normally be represented by either
+miles or kilometres.
+	
+@return Units of measurement for long distances.
+*/
+	{return(iUnitsDistanceLong);}
+
+
+
+
+inline void TLocale::SetUnitsDistanceLong(TUnitsFormat aFormat)
+/**
+Sets the units of measurement for long distances.
+
+Long distances are those which would normally be represented by either
+miles or kilometres.
+	
+@param aFormat Units of measurement for long distances.
+*/
+	{iUnitsDistanceLong=aFormat;}
+
+
+
+
+inline void TLocale::SetNegativeCurrencyFormat(TLocale::TNegativeCurrencyFormat aNegativeCurrencyFormat)
+/**
+Sets the negative currency format.
+	
+@param aNegativeCurrencyFormat How negative currency values are formatted.
+*/
+	{iNegativeCurrencyFormat = aNegativeCurrencyFormat;}
+
+
+
+
+inline TLocale::TNegativeCurrencyFormat TLocale::NegativeCurrencyFormat() const
+/**
+Gets the negative currency format.
+	
+@return How negative currency values are formatted.
+*/
+	{return(iNegativeCurrencyFormat);}
+
+
+
+
+inline TBool TLocale::NegativeLoseSpace() const
+/**
+Gets whether negative currency values lose the space between the currency 
+symbol and the value.
+	
+@return True, if negative currency values lose the space between the value 
+	    and the symbol; false, if not.
+*/
+	{ 
+	if((iExtraNegativeCurrencyFormatFlags|EFlagNegativeLoseSpace)==iExtraNegativeCurrencyFormatFlags)
+		return ETrue;
+	else
+		return EFalse;
+	}
+
+
+
+
+inline void TLocale::SetNegativeLoseSpace(TBool aBool)
+/**
+Sets whether negative currency values lose the space between the currency symbol 
+and the value.
+	
+@param aBool ETrue to set a flag which indicates that negative currency values 
+	         should lose the space between the value and the symbol. EFalse to unset it.
+*/
+	{
+	if(aBool)
+		iExtraNegativeCurrencyFormatFlags |= EFlagNegativeLoseSpace;
+	else
+		iExtraNegativeCurrencyFormatFlags &= ~EFlagNegativeLoseSpace;
+	}
+
+
+
+
+inline TBool TLocale::NegativeCurrencySymbolOpposite() const
+/**
+Gets whether in negative currency values, the position of the currency symbol 
+is set to be the opposite of the position used for non-negative values (before 
+or after the value, as set by SetCurrencySymbolPosition()).
+	
+@return True, if the currency symbol position for negative currency values 
+	    is the opposite of the position set by SetCurrencySymbolPosition();
+		false, otherwise.
+
+@see TLocale::SetCurrencySymbolPosition
+*/
+	{
+	if((iExtraNegativeCurrencyFormatFlags|EFlagNegativeCurrencySymbolOpposite)==iExtraNegativeCurrencyFormatFlags)
+		return ETrue;
+	else
+		return EFalse;
+	}
+
+
+
+
+inline void TLocale::SetNegativeCurrencySymbolOpposite(TBool aBool)
+/**
+Sets whether the position of the currency symbol for negative currency values 
+should be the opposite of the position used for non-negative values (before 
+or after the value, as set by SetCurrencySymbolPosition()).
+	
+@param aBool ETrue to set the position of the currency symbol in negative 
+             currency values to be the opposite of the position as set
+			 using SetCurrencySymbolPosition(). EFalse to leave the
+			 position unchanged.
+
+@see TLocale::SetCurrencySymbolPosition
+*/
+	{
+	if (aBool)
+		iExtraNegativeCurrencyFormatFlags |= EFlagNegativeCurrencySymbolOpposite;
+	else
+		iExtraNegativeCurrencyFormatFlags &= ~EFlagNegativeCurrencySymbolOpposite;
+	}
+
+
+
+
+inline TLanguage TLocale::LanguageDowngrade(TInt aIndex) const
+/**
+Gets the language that is stored at the specified index into the customisable 
+part of the language downgrade path.
+	
+The second, third and fourth languages in the language downgrade path can 
+be customised. These can be enquired using this function. The first language 
+in the path is always the language of the current locale, as returned by User::Language(). 
+	
+The languages in the downgrade path are used in turn by the BaflUtils::NearestLanguageFile() 
+function to find the best matching language-specific version of a language-neutral 
+filename.
+	
+The full language downgrade path can be retrieved using BaflUtils::GetDowngradePath().
+	
+@param aIndex An index into the customisable part of the language downgrade 
+              path. Between zero and two inclusive.
+
+@return The language at the specified index.
+
+@see BaflUtils::NearestLanguageFile
+@see BaflUtils::GetDowngradePath
+*/
+	{
+	__ASSERT_DEBUG(0 <= aIndex && aIndex < 3, User::Invariant());
+	return static_cast<TLanguage>(iLanguageDowngrade[aIndex]);
+	}
+
+
+
+
+inline void TLocale::SetLanguageDowngrade(TInt aIndex, TLanguage aLanguage)
+/**
+Sets a language in the customisable part of the language downgrade path.
+	
+@param aIndex    An index into the customisable part of the path at which to 
+	             add the language, a value between zero and two.
+@param aLanguage The language to add. ELangNone is considered to be the last 
+	             language in the path, no more will be searched, so can be used
+				 to specify that no language downgrade is required.
+
+@see BaflUtils::NearestLanguageFile
+@see BaflUtils::GetDowngradePath
+*/
+	{
+	__ASSERT_DEBUG(0 <= aIndex && aIndex < 3, User::Invariant());
+	iLanguageDowngrade[aIndex] = static_cast<TUint16>(aLanguage);
+	}
+
+
+
+
+/**
+Gets the number mode stored in the locale.
+
+@return The number mode for the locale.
+*/
+inline TDigitType TLocale::DigitType() const
+	{ return iDigitType; }
+
+
+
+
+/**
+Sets the number mode for the locale. 
+
+@param aDigitType The number mode to be set.
+*/
+inline void TLocale::SetDigitType(TDigitType aDigitType)
+	{ iDigitType=aDigitType; }
+
+
+
+
+/**
+Sets the device time state.
+
+@param aState The device time state. 
+
+@deprecated Use the timezone server to coordinate automatic time adjustment.
+*/
+inline void TLocale::SetDeviceTime(TDeviceTimeState aState)
+   	{
+   	iDeviceTimeState=aState;
+   	}
+   
+
+/**
+Get the pointer to the TLocale object contained in this extended locale.
+
+@return Pointer to the TLocale object. 
+*/
+inline TLocale*	TExtendedLocale::GetLocale()
+	{ return &iLocale; }
+
+
+/**
+Gets the device time state.
+
+@return The device time state.
+
+@deprecated Use the timezone server to coordinate automatic time adjustment.
+*/
+inline TLocale::TDeviceTimeState TLocale::DeviceTime() const
+   	{
+   	return iDeviceTimeState;
+   	}
+
+
+// Class TFindSemaphore
+inline TFindSemaphore::TFindSemaphore()
+    : TFindHandleBase()
+/**
+Constructs the object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is the single 
+character "*".
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+inline TFindSemaphore::TFindSemaphore(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs this object with the specified match pattern.
+
+A new match pattern can be set after construction by
+calling TFindHandleBase::Find().
+
+Note that after construction, the object contains a copy of the supplied
+match pattern; the source descriptor can, therefore, be safely discarded.
+
+@param aMatch A reference to the descriptor containing the match pattern. 
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+// Class TFindMutex
+inline TFindMutex::TFindMutex()
+    : TFindHandleBase()
+/**
+Constructs this object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is the single 
+character "*".
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+inline TFindMutex::TFindMutex(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs this object with the specified match pattern.
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+After construction, the object contains a copy of the supplied match pattern; 
+the source descriptor can, therefore, be safely discarded.
+
+@param aMatch The match pattern.
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+// Class TFindChunk
+inline TFindChunk::TFindChunk()
+    : TFindHandleBase()
+/**
+Constructs this object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is
+the single character "*".
+
+A new match pattern can be set after construction by
+calling TFindHandleBase::Find().
+
+@see TFindHandleBase
+*/
+    {}
+
+
+
+
+inline TFindChunk::TFindChunk(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs the object with the specified match pattern.
+
+A new match pattern can be set after construction by
+calling TFindHandleBase::Find().
+
+@param aMatch The match pattern.
+
+@see TFindHandleBase
+*/
+    {}
+
+
+
+
+// Class TFindThread
+inline TFindThread::TFindThread()
+    : TFindHandleBase()
+/**
+Constructs this object with a default match pattern.
+
+The default match pattern, as implemented by the base class,
+is the single character *.
+
+A new match pattern can be set after construction
+by calling TFindHandleBase::Find().
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+inline TFindThread::TFindThread(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs this object with the specified match pattern.
+
+A new match pattern can be set after construction
+by calling the TFindHandleBase::Find().
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+// Class TFindProcess
+inline TFindProcess::TFindProcess()
+    : TFindHandleBase()
+/**
+Constructs this object with a default match pattern.
+
+The default match pattern, as implemented by the base class,
+is the single character *.
+
+A new match pattern can be set after construction
+by calling TFindHandleBase::Find().
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+inline TFindProcess::TFindProcess(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs this object with the specified match pattern.
+
+A new match pattern can be set after construction
+by calling the TFindHandleBase::Find().
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+// Class TFindLogicalDevice
+/**
+Constructs the LDD factory object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is the single 
+character "*".
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+@see TFindHandleBase::Find
+*/
+inline TFindLogicalDevice::TFindLogicalDevice()
+    : TFindHandleBase()
+    {}
+
+/**
+Constructs the LDD factory object with a specified match pattern.
+
+A new match pattern can be set after construction by calling
+TFindHandleBase::Find().
+
+@param aMatch The match pattern.
+
+@see TFindHandleBase::Find
+*/
+inline TFindLogicalDevice::TFindLogicalDevice(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+    {}
+
+// Class TFindPhysicalDevice
+/**
+Constructs the PDD factory object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is the single 
+character "*".
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+@see TFindHandleBase::Find
+*/
+inline TFindPhysicalDevice::TFindPhysicalDevice()
+    : TFindHandleBase()
+    {}
+
+/**
+Constructs the PDD factory object with a specified match pattern.
+
+A new match pattern can be set after construction by calling
+TFindHandleBase::Find().
+
+@param aMatch The match pattern.
+
+@see TFindHandleBase::Find
+*/
+inline TFindPhysicalDevice::TFindPhysicalDevice(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+    {}
+
+
+
+
+
+// Class TFindServer
+inline TFindServer::TFindServer()
+    : TFindHandleBase()
+/**
+Constructs the object with a default match pattern.
+
+The default match pattern, as implemented by the base class, is the single 
+character "*".
+
+A new match pattern can be set after construction by calling the Find() member 
+function of the TFindHandleBase base class.
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+inline TFindServer::TFindServer(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs the object with a specified match pattern.
+
+A new match pattern can be set after construction by calling
+TFindHandleBase::Find().
+
+@param aMatch The match pattern.
+
+@see TFindHandleBase::Find
+*/
+    {}
+
+
+
+
+// Class TFindLibrary
+inline TFindLibrary::TFindLibrary()
+    : TFindHandleBase()
+/**
+Constructs this object with a default match pattern.
+
+The default match pattern is the single character ‘*’ and is implemented by
+the base class TFindHandleBase.
+*/
+    {}
+
+
+
+
+inline TFindLibrary::TFindLibrary(const TDesC &aMatch)
+    : TFindHandleBase(aMatch)
+/**
+Constructs this object with the specified match pattern.
+
+@param aMatch The descriptor containing the match pattern. 
+*/
+    {}
+
+
+
+
+// Class RDevice
+/**
+Opens a handle to an LDD factory object found using a TFindLogicalDevice object.
+
+A TFindLogicalDevice object is used to find all LDD factory objects whose full names match 
+a specified pattern.
+
+@param aFind A reference to the object which is used to find the LDD factory object.
+@param aType An enumeration whose enumerators define the ownership of this 
+             LDD factory object handle. If not explicitly specified, EOwnerProcess is
+			 taken as default.
+
+@return KErrNone if successful, otherwise one of the other system wide error 
+        codes.
+*/
+inline TInt RDevice::Open(const TFindLogicalDevice& aFind,TOwnerType aType)
+	{return(RHandleBase::Open(aFind,aType));}
+
+
+
+
+// Class RCriticalSection
+inline TBool RCriticalSection::IsBlocked() const
+/**
+Tests whether the critical section is occupied by another thread.
+
+@return True, if the critical section is occupied by another thread. False, 
+        otherwise.
+*/
+	{return(iBlocked!=1);}
+
+
+
+
+// Class RMutex
+inline TInt RMutex::Open(const TFindMutex& aFind,TOwnerType aType)
+/**
+Opens a handle to the global mutex found using a TFindMutex object.
+
+A TFindMutex object is used to find all global mutexes whose full names match 
+a specified pattern.
+
+By default, any thread in the process can use this instance of RMutex to access 
+the mutex. However, specifying EOwnerThread as the second parameter to this 
+function, means that only the opening thread can use this instance of RMutex 
+to access the mutex; any other thread in this process that wants to access 
+the mutex must either duplicate the handle or use OpenGlobal() again.
+
+@param aFind A reference to the object which is used to find the mutex.
+@param aType An enumeration whose enumerators define the ownership of this 
+             mutex handle. If not explicitly specified, EOwnerProcess is
+			 taken as default. 
+
+@return KErrNone if successful, otherwise one of the other system wide error 
+        codes.
+*/
+	{return(RHandleBase::Open(aFind,aType));}
+
+
+
+
+// Class RChunk
+inline TInt RChunk::Open(const TFindChunk& aFind,TOwnerType aType)
+/**
+Opens a handle to the global chunk found using a TFindChunk object.
+
+A TFindChunk object is used to find all chunks whose full names match
+a specified pattern. 
+
+By default, ownership of this chunk handle is vested in the current process, 
+but can be vested in the current thread by passing EOwnerThread as the second 
+parameter to this function.
+
+@param aFind A reference to the TFindChunk object used to find the chunk.
+@param aType An enumeration whose enumerators define the ownership of this 
+             chunk handle. If not explicitly specified, EOwnerProcess is
+			 taken as default.
+
+@return KErrNone if successful, otherwise another of the system error codes.
+*/
+	{return(RHandleBase::Open(aFind,aType));}
+
+
+
+
+inline TBool RChunk::IsReadable() const
+/**
+Tests whether the chunk is mapped into its process address space.
+
+@return True, if the chunk is readable; false, otherwise.
+*/
+	{return (Attributes()&RHandleBase::EDirectReadAccess); }
+
+
+
+
+inline TBool RChunk::IsWritable() const
+/**
+Tests whether the chunk mapped into its process address space and is writable.
+
+@return True, if the chunk is writable; false, otherwise.
+*/
+	{return (Attributes()&RHandleBase::EDirectWriteAccess); }
+
+
+
+
+// Class TObjectId
+inline TObjectId::TObjectId()
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TObjectId::TObjectId(TUint64 aId)
+	: iId(aId)
+/**
+Constructor taking an unsigned integer value.
+
+@param aId The value of the object id.
+*/
+	{}
+
+
+
+
+inline TUint64 TObjectId::Id() const
+/**
+Return the ID as a 64 bit integer
+*/
+	{ return iId; }
+
+
+
+
+inline TObjectId::operator TUint() const
+/**
+Conversion operator invoked by the compiler when a TObjectId type is passed
+to a function that is prototyped to take a TUint type.
+
+@see TUint
+*/
+	{ return TUint(iId); }
+
+
+
+
+inline TBool TObjectId::operator==(TObjectId aId) const
+/**
+Tests whether this thread Id is equal to the specified Id.
+
+@param aId The thread Id to be compared with this thread Id.
+
+@return True, if the thread Ids are equal; false otherwise.
+*/
+	{return iId==aId.iId;}
+
+
+
+
+inline TBool TObjectId::operator!=(TObjectId aId) const
+/**
+Tests whether this thread Id is unequal to the specified thread Id.
+
+@param aId The thread Id to be compared with this thread Id.
+
+@return True, if the thread Ids are unequal; false otherwise.
+*/
+	{return iId!=aId.iId;}
+
+
+
+
+// Class TThreadId
+inline TThreadId::TThreadId()
+	: TObjectId()
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TThreadId::TThreadId(TUint64 aId)
+	: TObjectId(aId)
+/**
+Constructor taking an unsigned integer value.
+
+@param aId The value of the thread id.
+*/
+	{}
+
+
+
+
+// Class RThread
+inline RThread::RThread()
+	: RHandleBase(KCurrentThreadHandle)
+/**
+Default constructor.
+
+The constructor exists to initialise private data within this handle; it does 
+not create the thread object.
+
+Specifically, it sets the handle-number to the value KCurrentThreadHandle.
+In effect, the constructor creates a default thread handle.
+*/
+	{}
+
+
+
+
+inline TInt RThread::Open(const TFindThread& aFind,TOwnerType aType)
+/**
+Opens a handle to the thread found by pattern matching a name.
+
+A TFindThread object is used to find all threads whose full names match a 
+specified pattern. 
+
+By default, ownership of this thread handle is vested in the current process, 
+but can be vested in the current thread by passing EOwnerThread as the second 
+parameter to this function.
+
+@param aFind A reference to the TFindThread object used to find the thread.
+@param aType An enumeration whose enumerators define the ownership of this 
+             thread handle. If not explicitly specified, EOwnerProcess is
+			 taken as default.
+
+@return KErrNone if successful, otherwise one of the other system-wide error codes.
+*/
+	{return(RHandleBase::Open(aFind,aType));}
+
+
+
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+inline TBool RThread::HasCapability(TCapability aCapability, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability, aDiagnostic);
+	}
+
+inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
+	}
+
+#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+// Only available to NULL arguments
+inline TBool RThread::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability);
+	}
+
+inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2);
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+// For things using KSuppressPlatSecDiagnostic
+inline TBool RThread::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+// Class TProcessId
+inline TProcessId::TProcessId()
+	: TObjectId()
+/**
+Default constructor.
+*/
+	{}
+
+
+
+
+inline TProcessId::TProcessId(TUint64 aId)
+	: TObjectId(aId)
+/**
+Constructor taking an unsigned integer value.
+
+@param aId The value of the process id.
+*/
+	{}
+
+
+
+
+// Class RProcess
+inline RProcess::RProcess()
+	: RHandleBase(KCurrentProcessHandle)
+/** 
+Default constructor.
+
+The constructor exists to initialise private data within this handle; it does 
+not create the process object.
+
+Specifically, it sets the handle-number to the value KCurrentProcessHandle.
+In effect, the constructor creates a default process handle.
+*/
+	{}
+
+
+
+
+inline RProcess::RProcess(TInt aHandle)
+	: RHandleBase(aHandle)
+/**
+Constructor taking a handle number.
+
+@param aHandle The handle number to be used to construct this RProcess handle.
+*/
+	{}
+
+
+
+
+inline TInt RProcess::Open(const TFindProcess& aFind,TOwnerType aType)
+/**
+Opens a handle to the process found by pattern matching a name.
+
+A TFindProcess object is used to find all processes whose full names match 
+a specified pattern. 
+
+By default, ownership of this process handle is vested in the current process, 
+but can be vested in the current thread by passing EOwnerThread as the second 
+parameter to this function.
+
+@param aFind A reference to the TFindProcess object used to find the process.
+@param aType An enumeration whose enumerators define the ownership of this 
+             process handle. If not explicitly specified, EOwnerProcess is taken
+			 as default.
+
+@return KErrNone if successful, otherwise one of the other system-wide error codes.
+*/
+	{return(RHandleBase::Open(aFind,aType));}
+
+
+
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+inline TBool RProcess::HasCapability(TCapability aCapability, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability, aDiagnostic);
+	}
+
+inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
+	}
+
+#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+// Only available to NULL arguments
+inline TBool RProcess::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability);
+	}
+
+inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2);
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+// For things using KSuppressPlatSecDiagnostic
+inline TBool RProcess::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+
+
+
+
+// Class RSessionBase
+
+
+/**
+Creates a session with a server, specifying no message slots.
+
+It should be called as part of session initialisation in the derived class.
+
+Message slots are not pre-allocated for the session but are taken from
+a system-wide pool allowing up to 255 asynchronous messages to be outstanding.
+This raises a risk of failure due to lack of memory and, therefore, this mode
+of operation is not viable for sessions that make guarantees about the failure
+modes of asynchonous services.
+
+@param aServer  The name of the server with which a session is to
+                be established.
+@param aVersion The lowest version of the server with which this client
+                is compatible
+
+@return KErrNone if successful, otherwise one of the other system-wide error
+        codes.
+*/
+inline TInt RSessionBase::CreateSession(const TDesC& aServer,const TVersion& aVersion)
+	{return CreateSession(aServer,aVersion,-1,EIpcSession_Unsharable,NULL,0);}
+
+
+
+
+/**
+Creates a session with a server, specifying no message slots.
+
+It should be called as part of session initialisation in the derived class.
+
+Message slots are not pre-allocated for the session but are taken from
+a system-wide pool allowing up to 255 asynchronous messages to be outstanding.
+This raises a risk of failure due to lack of memory and, therefore, this mode
+of operation is not viable for sessions that make guarantees about the failure
+modes of asynchonous services.
+
+@param aServer  A handle to a server with which a session is to be established.
+@param aVersion The lowest version of the server with which this client
+                is compatible
+
+@return KErrNone if successful, otherwise one of the other system-wide error
+        codes.
+*/
+inline TInt RSessionBase::CreateSession(RServer2 aServer,const TVersion& aVersion)
+	{return CreateSession(aServer,aVersion,-1,EIpcSession_Unsharable,NULL,0);}
+
+
+
+
+/**
+Issues a blind request to the server with the specified function number,
+and arguments.
+
+A blind request is one where the server does not issue a response
+to the client.
+
+@param aFunction The function number identifying the request.
+@param aArgs     A set of up to 4 arguments and their types to be passed
+                 to the server.
+
+@return KErrNone, if the send operation is successful;
+        KErrServerTerminated, if the server no longer present;
+        KErrServerBusy, if there are no message slots available;
+        KErrNoMemory, if there is insufficient memory available.
+
+@panic  USER 72 if the function number is negative.
+*/
+inline TInt RSessionBase::Send(TInt aFunction,const TIpcArgs& aArgs) const
+	{return DoSend(aFunction,&aArgs);}
+
+
+
+
+/**
+Issues an asynchronous request to the server with the specified function
+number and arguments. 
+
+The completion status of the request is returned via the request
+status object, aStatus. 
+
+@param aFunction The function number identifying the request.
+@param aArgs     A set of up to 4 arguments and their types to be passed
+                 to the server.
+@param aStatus   The request status object used to contain the completion status
+                 of the request.
+                 
+@panic  USER 72  if the function number is negative.                 
+*/
+inline void RSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs,TRequestStatus& aStatus) const
+	{DoSendReceive(aFunction,&aArgs,aStatus);}
+
+
+
+
+/**
+Issues a synchronous request to the server with the specified function number
+and arguments.
+
+@param aFunction The function number identifying the request.
+@param aArgs     A set of up to 4 arguments and their types to be passed
+                 to the server.
+
+@return KErrNone, if the send operation is successful;
+        KErrServerTerminated, if the server no longer present;
+        KErrServerBusy, if there are no message slots available;
+        KErrNoMemory, if there is insufficient memory available.
+
+@panic  USER 72  if the function number is negative.
+*/
+inline TInt RSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs) const
+	{return DoSendReceive(aFunction,&aArgs);}
+
+
+
+
+/**
+Issues a blind request to the server with the specified function number,
+but with no arguments.
+
+A blind request is one where the server does not issue a response
+to the client.
+
+@param aFunction The function number identifying the request.
+
+@return KErrNone, if the send operation is successful;
+        KErrServerTerminated, if the server no longer present;
+        KErrServerBusy, if there are no message slots available;
+        KErrNoMemory, if there is insufficient memory available.
+
+@panic  USER 72 if the function number is negative.
+*/
+inline TInt RSessionBase::Send(TInt aFunction) const
+	{return DoSend(aFunction,NULL);}
+
+
+
+
+/**
+Issues an asynchronous request to the server with the specified function
+number, but with no arguments.
+
+The completion status of the request is returned via the request
+status object, aStatus. 
+
+@param aFunction The function number identifying the request.
+@param aStatus   The request status object used to contain the completion
+                 status of the request.
+                 
+@panic  USER 72  if the function number is negative.                 
+*/
+inline void RSessionBase::SendReceive(TInt aFunction,TRequestStatus& aStatus) const
+	{ DoSendReceive(aFunction,NULL,aStatus);}
+
+
+
+
+/**
+Sets the handle-number of this handle to the specified 
+value.
+
+The function can take a (zero or positive) handle-number,
+or a (negative) error number.
+
+If aHandleOrError represents a handle-number, then the handle-number of this handle
+is set to that value.
+If aHandleOrError represents an error number, then the handle-number of this handle is set to zero
+and the negative value is returned.
+
+@param aHandleOrError A handle-number, if zero or positive; an error value, if negative.
+
+@return KErrNone, if aHandle is a handle-number; the value of aHandleOrError, otherwise.
+*/
+inline TInt RSessionBase::SetReturnedHandle(TInt aHandleOrError)
+	{ return RHandleBase::SetReturnedHandle(aHandleOrError);}
+
+
+
+
+inline TInt RSessionBase::SetReturnedHandle(TInt aHandleOrError,RHandleBase& aHandle)
+	{ return RHandleBase::SetReturnedHandle(aHandleOrError,aHandle);}
+/**
+Issues a synchronous request to the server with the specified function number,
+but with no arguments.
+
+@param aFunction The function number identifying the request.
+
+@return KErrNone, if the send operation is successful;
+        KErrServerTerminated, if the server no longer present;
+        KErrServerBusy, if there are no message slots available;
+        KErrNoMemory, if there is insufficient memory available.
+
+@panic  USER 72  if the function number is negative.
+*/
+inline TInt RSessionBase::SendReceive(TInt aFunction) const
+	{return DoSendReceive(aFunction,NULL);}
+
+
+
+
+// Class RSubSessionBase
+inline RSubSessionBase::RSubSessionBase()
+	: iSubSessionHandle(0)
+/**
+Default constructor
+*/
+	{}
+
+
+
+
+inline TInt RSubSessionBase::SubSessionHandle() const
+/**
+Gets the sub-session handle number.
+
+This number is automatically passed to the server when making requests and is
+used to identify the appropriate server-side sub-session.
+
+@return The sub-session handle number.
+*/
+	{return iSubSessionHandle;}
+
+
+
+
+/**
+Creates a new sub-session within an existing session.
+
+@param aSession    The session to which this sub-session will belong.
+@param aFunction   The opcode specifying the requested service; the server should interpret this as a request to create a sub-session.
+@param aArgs       The message arguments.   
+
+@return            KErrNone if successful, otherwise one of the system-wide error codes.
+*/
+inline TInt RSubSessionBase::CreateSubSession(const RSessionBase& aSession,TInt aFunction,const TIpcArgs& aArgs)
+	{ return DoCreateSubSession(aSession,aFunction,&aArgs); }
+
+
+
+	
+/**
+Creates a new sub-session within an existing session.
+
+This variant sends no message arguments to the server.
+
+@param aSession    The session to which this sub-session will belong.
+@param aFunction   The opcode specifying the requested service; the server should interpret this as a request to create a sub-session.
+
+@return            KErrNone if successful, otherwise one of the system-wide error codes.
+*/
+inline TInt RSubSessionBase::CreateSubSession(const RSessionBase& aSession,TInt aFunction)
+	{ return DoCreateSubSession(aSession,aFunction,NULL); }
+
+
+
+	
+/**
+Sends a blind message to the server - no reply is expected.
+
+A set of message arguments is passed that can be used to specify client
+addresses, which the server can use to read from and write to the client
+address space.
+
+Note that this function can fail if there are no available message-slots, either
+in the system wide pool (if this is being used), or in the session reserved pool
+(if this is being used). If the client request is synchronous, then always use
+the synchronous variant of SendReceive(); this is guaranteed to reach the server.
+
+@param aFunction	The opcode specifying the requested service.
+@param aArgs		The message arguments.
+                    
+@return				KErrNone if successful, otherwise one of the system-wide error codes.                    
+*/
+inline TInt RSubSessionBase::Send(TInt aFunction,const TIpcArgs& aArgs) const
+	{return DoSend(aFunction,&aArgs);}
+
+
+
+	
+/**
+Sends a message to the server and waits asynchronously for the reply.
+
+An opcode specifies the service required.
+A set of message arguments is passed that can be used to specify client addresses,
+which the server can use to read from and write to the client address space.
+
+Note that this function can fail if there are no available message-slots, 
+either in the system wide pool (if this is being used), or in the session
+reserved pool (if this is being used). If the client request is synchronous,
+then always use the synchronous variant of SendReceive();
+this is guaranteed to reach the server.
+
+@param aFunction	The opcode specifying the requested service.
+@param aArgs		The message arguments.
+@param aStatus	    A request status which indicates the completion status of the asynchronous request.
+*/
+inline void RSubSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs,TRequestStatus& aStatus) const
+	{DoSendReceive(aFunction,&aArgs,aStatus);}
+
+
+
+	
+/**
+Sends a message to the server and waits synchronously for a reply.
+
+An opcode specifies the service required.
+A set of message arguments is passed that can be used to specify client addresses,
+which the server can use to read from and write to the client address space.
+
+Note that this function will only fail if the server itself fails or environmental
+errors occur in the server. All requests made using this function are guaranteed to
+reach the server. This means that all synchronous client requests (typically those
+that return void) should be routed through this synchronous variant of SendReceive().
+
+@param aFunction	The opcode specifying the requested service.
+@param aArgs		The message arguments.
+
+@return				KErrNone if successful, otherwise one of the system-wide error codes. 
+*/
+inline TInt RSubSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs) const
+	{return DoSendReceive(aFunction,&aArgs);}
+	
+
+
+	
+/**
+Sends a blind message to the server - no reply is expected.
+
+This variant sends no message arguments to the server.
+
+@param aFunction	The opcode specifying the requested service.
+                    
+@return				KErrNone if successful, otherwise one of the system-wide error codes. 
+*/
+inline TInt RSubSessionBase::Send(TInt aFunction) const
+	{return DoSend(aFunction,NULL);}
+
+
+
+	
+/**
+Sends a message to the server and waits asynchronously for the reply.
+
+An opcode specifies the service required.
+This variant sends no message arguments to the server.
+
+@param aFunction	The opcode specifying the requested service.
+@param aStatus	    A request status which indicates the completion status of the asynchronous request.
+*/
+inline void RSubSessionBase::SendReceive(TInt aFunction,TRequestStatus& aStatus) const
+	{ DoSendReceive(aFunction,NULL,aStatus);}
+
+
+
+	
+/**
+Sends a message to the server and waits synchronously for a reply.
+
+An opcode specifies the service required.
+This variant sends no message arguments to the server.
+
+@param aFunction	The opcode specifying the requested service.
+
+@return				KErrNone if successful, otherwise one of the system-wide error codes. 
+*/
+inline TInt RSubSessionBase::SendReceive(TInt aFunction) const
+	{return DoSendReceive(aFunction,NULL);}
+
+
+
+
+// Class RRefBase
+
+/**
+Default constructor.
+*/
+inline RRefBase::RRefBase()
+	: iPtr(NULL)
+	{}
+
+
+
+/**
+Copy constructor.
+
+@param aRef A reference to the object to be copied.
+*/
+inline RRefBase::RRefBase(const RRefBase &aRef)
+	{Copy(aRef);}
+
+
+
+
+// Class RRef
+
+
+/**
+Default constructor.
+*/
+template <class T>
+inline RRef<T>::RRef()
+	{}
+
+
+
+/**
+Copy constructor.
+
+The constructor frees any existing contained object, and takes ownership of
+the object owned by anObject. 
+
+@param anObject A reference to another 'reference' object.
+                On return from this constructor, anObject may be safely
+                orphaned if it lives on the program stack.
+*/
+template <class T>
+inline RRef<T>::RRef(const RRef<T> &anObject)
+	{Copy(anObject);}
+
+
+
+
+/**
+Assignment operator.
+
+The constructor frees any existing contained object, and takes ownership of
+the object owned by anObject. 
+
+@param anObject A reference to another 'reference' object.
+                On return from this constructor, anObject may be safely
+                orphaned if it lives on the program stack.
+*/
+template <class T>
+inline void RRef<T>::operator=(const RRef<T> &anObject)
+	{Copy(anObject);}
+
+
+
+
+/**
+Gets a pointer to the contained object.
+
+@return A pointer to the contained object
+*/
+template <class T>
+inline T *RRef<T>::operator->()
+	{return((T *)iPtr);}
+
+
+
+
+/**
+Gets a pointer to the contained object.
+
+@return A pointer to the contained object
+*/
+template <class T>
+inline RRef<T>::operator T*()
+	{return((T *)iPtr);}
+
+
+
+
+/**
+Creates a copy of the specified object, which is to be contained by
+this reference object.
+
+The amount of memory set aside to contain the object is defined by the size
+of the object
+
+@param anObject The object to be packaged up by this reference object.
+*/
+template <class T>
+void RRef<T>::Alloc(const T &anObject)
+	{DoAlloc(&anObject,sizeof(T));}
+
+
+
+
+/**
+Creates a copy of the specified object, which is to be contained by
+this reference object.
+
+The amount of memory set aside to contain the object is defined by aSize.
+
+@param anObject The object to be packaged up by this reference object.
+@param aSize    The amount of memory to be set aside to contain the object.
+                You must make sure that this is big enough.
+*/
+template <class T>
+void RRef<T>::Alloc(const T &anObject,TInt aSize)
+	{DoAlloc(&anObject,aSize);}
+
+
+
+
+/**
+Creates a copy of the specified object, which is to be contained by
+this reference object, and leaves on failure.
+
+The amount of memory set aside to contain the object is defined by the size
+of the object
+
+@param anObject The object to be packaged up by this reference object.
+*/
+template <class T>
+void RRef<T>::AllocL(const T &anObject)
+	{DoAllocL(&anObject,sizeof(T));}
+
+
+
+
+/**
+Creates a copy of the specified object, which is to be contained by
+this reference object, and leaves on failure.
+
+The amount of memory set aside to contain the object is defined by aSize.
+
+@param anObject The object to be packaged up by this reference object.
+@param aSize    The amount of memory to be set aside to contain the object.
+                You must make sure that this is big enough.
+*/
+template <class T>
+void RRef<T>::AllocL(const T &anObject,TInt aSize)
+	{DoAllocL(&anObject,aSize);}
+
+
+
+
+// Class TRegion
+inline TBool TRegion::CheckError() const
+/** 
+Tests whether the region's error flag is set.
+
+The error flag may be set:
+
+1. when an attempt to allocate more memory for the region fails
+
+2. if an attempt is made to expand a fixed size region beyond its allocated
+   size
+
+3. if ForceError() has been called.
+
+Use Clear() to unset the error flag, clear the region and free all allocated 
+memory.
+
+@return True, if the error flag is set; false, otherwise. 
+
+@see TRegion::ForceError
+@see TRegion::Clear
+*/
+	{return(iError);}
+
+
+
+
+inline TInt TRegion::Count() const
+/**
+Gets the number of rectangles in this region.
+
+@return The number of rectangles.
+*/
+	{return(iCount);}
+
+
+
+
+inline const TRect *TRegion::RectangleList() const
+/**
+Gets a pointer to the array of rectangles defining this region.
+
+@return Pointer to the array of rectangles. Note that array is a standard 
+        C++ array, i.e. a concatenated set of TRect objects. Use Count() to
+		get the number of rectangles.
+
+@see TRegion::Count
+*/
+	{return(((TRegion *)this)->RectangleListW());}
+
+
+
+
+inline TRegion::TRegion()
+	{}
+
+
+
+
+// Class RRegion
+inline TInt RRegion::CheckSpare() const
+/**
+Gets the number of free memory slots in the region.
+
+This is the number of slots which have been allocated, minus the number in 
+use.
+
+@return The number of free memory slots in the region.
+*/
+	{return(iAllocedRects-iCount);}
+
+
+
+
+// Class TRegionFix
+template <TInt S>
+inline TRegionFix<S>::TRegionFix() : TRegion(-S)
+/**
+Constructs a default fixed size region.
+*/
+	{}
+
+
+
+
+template <TInt S>
+inline TRegionFix<S>::TRegionFix(const TRect &aRect) : TRegion(-S)
+/**
+Constructs a fixed size region with a TRect.
+
+@param aRect Rectangle to be added to the newly constructed region.
+*/
+	{AddRect(aRect);}
+
+
+
+
+template <TInt S>
+inline TRegionFix<S>::TRegionFix(const TRegionFix<S> &aRegion)
+/**
+Copy constructor.
+
+@param aRegion The TRegionFix object to be copied.
+*/
+	{*this=aRegion;}
+
+
+
+
+template <TInt S>
+inline RRegionBuf<S>::RRegionBuf() : RRegion(-S&(~ERRegionBuf),S)
+/**
+Constructs a default object.
+
+The granularity is the value of the template parameter.
+*/
+	{}
+
+
+
+template <TInt S>
+inline RRegionBuf<S>::RRegionBuf(const RRegion &aRegion) 
+/**
+Constructs this object from the specified RRegion.
+
+@param aRegion The region to assign to this RRegionBuf.
+*/
+	{*this=aRegion;}
+
+
+
+
+template <TInt S>
+inline RRegionBuf<S>::RRegionBuf(const TRect &aRect) : RRegion(-S&(~ERRegionBuf),S)
+/**
+Constructs an RRegionBuf with a TRect.
+
+Its granularity is initialised to the value contained in the template argument.
+The resulting region consists of the specified single rectangle.
+
+@param aRect The single rectangle with which to initialise the region.
+*/
+	{AddRect(aRect);}
+
+
+
+
+template <TInt S>
+inline RRegionBuf<S>::RRegionBuf(const RRegionBuf<S> &aRegion)
+/**
+Copy constructs from an existing RRegionBuf object.
+
+@param aRegion The RRegionBuf to be copied.
+*/
+    {*this=aRegion;}
+
+
+
+
+// enum TTimerLockSpec
+inline TTimerLockSpec &operator++(TTimerLockSpec &aLock)
+	{
+	return aLock=((aLock==ETwelveOClock) ? EOneOClock : (TTimerLockSpec)((TInt)aLock+1));
+	}
+inline TTimerLockSpec operator++(TTimerLockSpec &aLock, TInt)
+	{
+	TTimerLockSpec l=aLock;
+	aLock=((aLock==ETwelveOClock) ? EOneOClock : (TTimerLockSpec)((TInt)aLock+1));
+	return l;
+	}
+
+
+
+
+// Class TCheckedUid
+inline const TUidType& TCheckedUid::UidType() const
+/**
+Gets the Uid type contained in this object.
+
+@return The Uid type.
+*/
+    {return(iType);}
+
+
+
+
+// Array deletion support, uses CBase deletion (virtual d'tor) for all C-classes
+template <class T>
+/**	@internalComponent
+*/
+void _DeleteArray(T** aBegin,T** aEnd)
+	{for (;;) if (aBegin<aEnd) delete *aBegin++; else return;}
+
+template <class T>
+/**	@internalComponent
+*/
+struct _ArrayUtil
+	{
+	static inline void Delete(T* aBegin,T* aEnd,CBase*)
+		{::_DeleteArray((CBase**)aBegin,(CBase**)aEnd);}
+	static inline void Delete(T* aBegin,T* aEnd,TAny*)
+		{::_DeleteArray(aBegin,aEnd);}
+	static inline void Delete(T* aArray,TInt aCount)
+		{Delete(aArray,aArray+aCount,*aArray);}
+	};
+
+
+
+
+#ifndef __TOOLS__
+// Template class TFixedArray
+IMPORT_C void PanicTFixedArray();
+
+
+
+
+template <class T,TInt S>
+inline TFixedArray<T,S>::TFixedArray()
+/**
+Default constructor.
+
+Constructs an uninitialised C++ array.
+*/
+	{}
+
+
+
+
+template <class T,TInt S>
+inline void TFixedArray<T,S>::Copy(const T* aList,TInt aLength)
+/**
+Copies the specified set of contiguous objects into the C++ array.
+
+The copy operation starts at the beginning of the array, replacing
+any existing data.
+
+@param aList   A pointer to a set of contiguous objects. 
+@param aLength The number of contiguous objects to be copied. This value must
+               not be negative and must not be greater than the size of the
+			   array as defined by the integer template parameter.
+
+@panic USER 133, in a debug build only, if aLength is negative or is greater
+       than the size of the array as defined by the integer template parameter.
+*/
+	{__ASSERT_DEBUG(TUint(aLength)<=TUint(S),PanicTFixedArray());Mem::Copy(iRep,aList,aLength*sizeof(T));}
+
+
+
+
+template <class T,TInt S>
+inline TFixedArray<T,S>::TFixedArray(const T* aList,TInt aLength)
+/**
+Constructs a C++ array initialised with the specified objects.
+
+@param aList   A pointer to a set of contiguous objects. 
+@param aLength The number of contiguous objects to be copied. This value must
+               not be negative and must not be greater than the size of the
+			   array as defined by the integer template parameter.
+
+@panic USER 133, in a debug build only, if aLength is negative or is greater
+       than the size of the array as defined by the integer template parameter.
+*/
+	{Copy(aList,aLength);}
+
+
+
+
+template <class T,TInt S>
+inline void TFixedArray<T,S>::Reset()
+/**
+Fills every element of the array with binary zeroes.
+*/
+	{Mem::FillZ(iRep,sizeof(iRep));}
+
+
+
+
+template <class T,TInt S>
+inline TInt TFixedArray<T,S>::Count() const
+/**
+Gets the size of the array.
+
+For any instance of this class, the array size 
+is fixed and has the same value as the integer template parameter.
+
+@return The size of the array.
+*/
+	{return S;}
+
+
+
+
+template <class T,TInt S>
+inline TInt TFixedArray<T,S>::Length() const
+/**
+Gets the size of an array element, in bytes.
+
+@return The size of an array element, in bytes.
+*/
+	{return sizeof(T);}
+
+
+
+
+template <class T,TInt S>
+inline TBool TFixedArray<T,S>::InRange(TInt aIndex)
+	{return TUint(aIndex)<S;}
+
+
+
+
+template <class T,TInt S>
+inline T& TFixedArray<T,S>::operator[](TInt aIndex)
+/**
+Gets a reference to the specified element within the C++ array.
+
+@param aIndex The position of the element within the array. This is an offset value; 
+              a zero value refers to the first element in the array. This value must be 
+              greater than or equal to zero and less than the size of the array.
+
+@return A reference to an element of the array.
+
+@panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
+       of the array as defined by the integer template parameter.
+*/
+	{__ASSERT_DEBUG(InRange(aIndex),PanicTFixedArray());return iRep[aIndex];}
+
+
+
+
+template <class T,TInt S>
+inline const T& TFixedArray<T,S>::operator[](TInt aIndex) const
+/**
+Gets a const reference to the specified element within the C++ array.
+
+@param aIndex The position of the element within the array. This is an offset value; 
+              a zero value refers to the first element in the array. This value must be 
+              greater than or equal to zero and less than the size of the array.
+
+@return A const reference to an element of the array; the element cannot be 
+        changed through this reference.
+
+@panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
+       of the array as defined by the integer template parameter.
+*/
+	{return CONST_CAST(ThisClass&,*this)[aIndex];}
+
+
+
+
+template <class T,TInt S>
+inline T& TFixedArray<T,S>::At(TInt aIndex)
+/**
+Gets a reference to the specified element within the C++ array.
+
+@param aIndex The position of the element within the array. This is an offset value; 
+              a zero value refers to the first element in the array. This value must be 
+              greater than or equal to zero and less than the size of the array.
+
+@return A reference to an element of the array.
+
+@panic USER 133, if aIndex is negative or greater than or equal to the size
+       of the array as defined by the integer template parameter.
+*/
+	{__ASSERT_ALWAYS(InRange(aIndex),PanicTFixedArray());return iRep[aIndex];}
+
+
+
+
+template <class T,TInt S>
+inline const T& TFixedArray<T,S>::At(TInt aIndex) const
+/**
+Gets a const reference to the specified element within the C++ array.
+
+@param aIndex The position of the element within the array. This is an offset value; 
+              a zero value refers to the first element in the array. This value must be 
+              greater than or equal to zero and less than the size of the array.
+
+@return A const reference to an element of the array; the element cannot be 
+        changed through this reference.
+
+@panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
+       of the array as defined by the integer template parameter.
+*/
+	{return CONST_CAST(ThisClass&,*this).At(aIndex);}
+
+
+
+
+template <class T,TInt S>
+inline T* TFixedArray<T,S>::Begin()
+/**
+Gets a pointer to the first element of the array.
+
+@return A pointer to the first element of the array.
+*/
+	{return &iRep[0];}
+
+
+
+
+template <class T,TInt S>
+inline T* TFixedArray<T,S>::End()
+/**
+Gets a pointer to the first byte following the end of the array.
+
+@return A pointer to the first byte following the end of the array.
+*/
+	{return &iRep[S];}
+
+
+
+
+template <class T,TInt S>
+inline const T* TFixedArray<T,S>::Begin() const
+/**
+Gets a pointer to the first element of the array.
+
+@return A pointer to a const element of the array. 
+*/
+	{return &iRep[0];}
+
+
+
+
+template <class T,TInt S>
+inline const T* TFixedArray<T,S>::End() const
+/**
+Gets a pointer to the first byte following the end of the array.
+
+@return A pointer to the const first byte following the end of the array.
+*/
+	{return &iRep[S];}
+
+
+
+
+template <class T,TInt S>
+inline TInt TFixedArray<T,S>::CountFunctionR(const CBase*)
+	{return S;}
+
+
+
+
+template <class T,TInt S>
+inline const TAny* TFixedArray<T,S>::AtFunctionR(const CBase* aThis,TInt aIndex)
+	{return &REINTERPRET_CAST(const ThisClass&,*aThis)[aIndex];}
+
+
+
+
+template <class T,TInt S>
+inline TArray<T> TFixedArray<T,S>::Array() const
+/**
+Creates and returns a generic array for this C++ array.
+
+@return A generic array for this C++ array.
+*/
+	{return TArray<T>(CountFunctionR,AtFunctionR,REINTERPRET_CAST(const CBase*,this));}
+
+
+
+
+template <class T,TInt S>
+inline void TFixedArray<T,S>::DeleteAll()
+/**
+Invokes the delete operator on every member of the array.
+
+The function can only be used for arrays of pointers to CBase derived objects.
+
+If the array is to be used after a call to this function, it is good practice 
+to call TFixedArray<class T,TInt S>::Reset() to set all array elements to 
+NULL.
+*/
+	{_ArrayUtil<T>::Delete(iRep,S);}
+#endif
+
+
+
+
+// class User
+
+inline RHeap* User::SwitchHeap(RAllocator* aHeap)
+/**
+Changes the current thread's heap.
+	
+@param aHeap A pointer to the new heap handle.
+
+@return A pointer to the old heap handle.
+*/
+	{ return (RHeap*)SwitchAllocator(aHeap); }
+
+
+
+
+inline RHeap& User::Heap()
+/**
+Gets a reference to the handle to the current thread's heap.
+	
+@return A reference to the handle to the current thread's heap.
+*/
+	{ return (RHeap&)Allocator(); }
+
+
+
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+inline TBool User::CreatorHasCapability(TCapability aCapability, const char* aDiagnostic)
+	{
+	return DoCreatorHasCapability(aCapability, aDiagnostic);
+	}
+
+inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic)
+	{
+	return DoCreatorHasCapability(aCapability1, aCapability2, aDiagnostic);
+	}
+
+#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+// Only available to NULL arguments
+inline TBool User::CreatorHasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/)
+	{
+	return DoCreatorHasCapability(aCapability);
+	}
+
+inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/)
+	{
+	return DoCreatorHasCapability(aCapability1, aCapability2);
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+// For things using KSuppressPlatSecDiagnostic
+inline TBool User::CreatorHasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/)
+	{
+	return DoCreatorHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/)
+	{
+	return DoCreatorHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+
+inline const TAny* User::LeaveIfNull(const TAny* aPtr)
+/**
+Leaves with the reason code KErrNoMemory, if the specified pointer is NULL. 
+
+If the pointer is not NULL, the function simply returns with the value of 
+the pointer.
+
+Used to check pointers to const objects.
+
+@param aPtr The pointer to be tested.
+
+@return If the function returns, the value of aPtr.
+*/
+	{ return (const TAny*)LeaveIfNull((TAny*)aPtr); }
+
+/** Sets this TSecurityInfo to the security attributes of this process. */
+inline void TSecurityInfo::SetToCurrentInfo()
+	{ new (this) TSecurityInfo(RProcess()); }
+
+/** Constructs a TSecurityInfo using the security attributes of aProcess */
+inline void TSecurityInfo::Set(RProcess aProcess)
+	{ new (this) TSecurityInfo(aProcess); }
+
+/** Constructs a TSecurityInfo using the security attributes of the process
+owning aThread 
+*/
+inline void TSecurityInfo::Set(RThread aThread)
+	{ new (this) TSecurityInfo(aThread); }
+
+/** Constructs a TSecurityInfo using the security attributes of the process
+which sent the message aMsgPtr */
+inline void TSecurityInfo::Set(RMessagePtr2 aMsgPtr)
+	{ new (this) TSecurityInfo(aMsgPtr); }
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+/** Checks this policy against the platform security attributes of aProcess.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aProcess The RProcess object to check against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aProcess, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic) const
+	{
+	return DoCheckPolicy(aProcess, aDiagnostic);
+	}
+
+/** Checks this policy against the platform security attributes of the process
+owning aThread.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aThread The thread whose owning process' platform security attributes
+are to be checked against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security parameters of the owning process of aThread, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic) const
+	{
+	return DoCheckPolicy(aThread, aDiagnostic);
+	}
+
+/** Checks this policy against the platform security attributes of the process which sent
+the given message.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aMsg, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic) const
+	{
+	return DoCheckPolicy(aMsgPtr, aDiagnostic);
+	}
+
+/** Checks this policy against the platform security attributes of the process which sent
+the given message.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
+@param aMissing A TSecurityInfo object which this method fills with any capabilities or IDs
+				it finds to be missing. 
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aMsg, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+
+@internalComponent
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic) const
+	{
+	return DoCheckPolicy(aMsgPtr, aMissing, aDiagnostic);
+	}
+
+/** Checks this policy against the platform security attributes of this process' creator.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of this process' creator, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic) const
+	{
+	return DoCheckPolicyCreator(aDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic) const
+	{
+	return (&(*this))->CheckPolicy(aProcess, aDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic) const
+	{
+	return (&(*this))->CheckPolicy(aThread, aDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr, aDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
+@internalComponent
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr, aMissing, aDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic) const
+	{
+	return (&(*this))->CheckPolicyCreator(aDiagnostic);
+	}
+
+#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+/** Checks this policy against the platform security attributes of aProcess.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aProcess The RProcess object to check against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aProcess, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoCheckPolicy(aProcess);
+	}
+
+/** Checks this policy against the platform security attributes of the process
+owning aThread.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aThread The thread whose owning process' platform security attributes
+are to be checked against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security parameters of the owning process of aThread, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoCheckPolicy(aThread);
+	}
+
+/** Checks this policy against the platform security attributes of the process which sent
+the given message.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aMsg, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoCheckPolicy(aMsgPtr);
+	}
+
+/** Checks this policy against the platform security attributes of the process which sent
+the given message.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
+@param aMissing A TSecurityInfo object which this method fills with any capabilities or IDs
+				it finds to be missing. 
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of aMsg, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+
+@internalComponent
+*/
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoCheckPolicy(aMsgPtr, aMissing);
+	}
+
+/** Checks this policy against the platform security attributes of this process' creator.
+
+	When a check fails the action taken is determined by the system wide Platform Security
+	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
+	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
+	check failed.
+
+@param aDiagnostic A string that will be emitted along with any diagnostic message
+							that may be issued if the policy check fails.
+							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
+							which enables it to be easily removed from the system.
+@return ETrue if all the requirements of this TSecurityPolicy are met by the
+platform security attributes of this process' creator, EFalse otherwise.
+@panic USER 190 if 'this' is an invalid SSecurityInfo object
+*/
+inline TBool TSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoCheckPolicyCreator();
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoCheckPolicy(aProcess, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoCheckPolicy(aThread, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoCheckPolicy(aMsgPtr, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoCheckPolicy(aMsgPtr, aMissing, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline TBool TSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoCheckPolicyCreator(KSuppressPlatSecDiagnosticMagicValue);
+	}
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+/**
+@see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return (&(*this))->CheckPolicy(aProcess);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return (&(*this))->CheckPolicy(aThread);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
+@internalComponent
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr, aMissing);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return (&(*this))->CheckPolicyCreator();
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return (&(*this))->CheckPolicy(aProcess, KSuppressPlatSecDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return (&(*this))->CheckPolicy(aThread, KSuppressPlatSecDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr, KSuppressPlatSecDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
+@internalComponent
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return (&(*this))->CheckPolicy(aMsgPtr, aMissing, KSuppressPlatSecDiagnostic);
+	}
+
+/**
+@see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
+*/
+inline TBool TStaticSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return (&(*this))->CheckPolicyCreator(KSuppressPlatSecDiagnostic);
+	}
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+#endif //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+
+
+#ifndef __KERNEL_MODE__
+
+/**
+Appends an object pointer onto the array.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be appended.
+*/
+template <class T>
+inline void RPointerArray<T>::AppendL(const T* anEntry)
+	{ User::LeaveIfError(Append(anEntry));}
+
+
+/**
+Inserts an object pointer into the array at the specified position.
+
+The function leaves with one of the system wide error codes, if
+the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be inserted.
+@param aPos    The position within the array where the object pointer is to be 
+               inserted. The position is relative to zero, i.e. zero implies
+			   that a pointer is inserted at the beginning of the array.
+
+@panic USER 131, if aPos is negative, or is greater than the number of object
+       pointers currently in the array.
+*/
+template <class T>
+inline void RPointerArray<T>::InsertL(const T* anEntry, TInt aPos)
+	{ User::LeaveIfError(Insert(anEntry,aPos)); }
+
+
+/**
+Finds the first object pointer in the array which matches the specified object 
+pointer, using a sequential search.
+
+Matching is based on the comparison of pointers.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@return The index of the first matching object pointer within the array.
+@leave KErrNotFound, if no matching object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindL(const T* anEntry) const
+	{ return User::LeaveIfError(Find(anEntry));}
+
+
+/**
+Finds the first object pointer in the array whose object matches the specified 
+object, using a sequential search and a matching algorithm.
+
+The algorithm for determining whether two class T objects match is provided 
+by a function supplied by the caller.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry    The object pointer to be found.
+@param anIdentity A package encapsulating the function which determines whether 
+                  two class T objects match.
+
+@return The index of the first matching object pointer within the array.
+@leave  KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindL(const T* anEntry, TIdentityRelation<T> anIdentity) const
+	{ return User::LeaveIfError(Find(anEntry, anIdentity));}
+
+
+/**
+Finds the last object pointer in the array which matches the specified object 
+pointer, using a sequential search.
+
+Matching is based on the comparison of pointers.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@return The index of the last matching object pointer within the array.
+@leave KErrNotFound, if no matching object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindReverseL(const T* anEntry) const
+	{ return User::LeaveIfError(FindReverse(anEntry));}
+
+
+/**
+Finds the last object pointer in the array whose object matches the specified 
+object, using a sequential search and a matching algorithm.
+
+The algorithm for determining whether two class T objects match is provided 
+by a function supplied by the caller.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry    The object pointer to be found.
+@param anIdentity A package encapsulating the function which determines whether 
+                  two class T objects match.
+
+@return The index of the last matching object pointer within the array.
+@leave  KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindReverseL(const T* anEntry, TIdentityRelation<T> anIdentity) const
+	{ return User::LeaveIfError(FindReverse(anEntry, anIdentity));}
+
+
+/**
+Finds the object pointer in the array that matches the specified object
+pointer, using a binary search technique.
+
+The function assumes that object pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+
+@return The index of the matching object pointer within the array
+@leave KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindInAddressOrderL(const T* anEntry) const
+	{ return User::LeaveIfError(FindInAddressOrder(anEntry));}
+
+
+/**
+Finds the object pointer in the array whose object matches the specified
+object, using a binary search technique and an ordering algorithm.
+
+The function assumes that existing object pointers in the array are ordered 
+so that the objects themselves are in object order as determined by an algorithm 
+supplied by the caller and packaged as a TLinearOrder<T>.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+
+@return The index of the matching object pointer within the array.
+
+@leave KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline TInt RPointerArray<T>::FindInOrderL(const T* anEntry, TLinearOrder<T> anOrder) const
+	{ return User::LeaveIfError(FindInOrder(anEntry, anOrder));}
+
+
+/**
+Finds the object pointer in the array that matches the specified object
+pointer, using a binary search technique.
+
+The function assumes that object pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anIndex A reference to a TInt into which the
+               function puts an index value: If the function does not leave,
+               this is the index of the matching object pointer within the
+               array. If the function leaves with KErrNotFound, this is the
+               index of the first object pointer within the array which
+               logically follows after anEntry.
+
+@leave KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline void RPointerArray<T>::FindInAddressOrderL(const T* anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInAddressOrder(anEntry, anIndex)); }
+
+
+/**
+Finds the object pointer in the array whose object matches the specified
+object, using a binary search technique and an ordering algorithm.
+
+The function assumes that existing object pointers in the array are ordered 
+so that the objects themselves are in object order as determined by an
+algorithm supplied by the caller and packaged as a TLinearOrder<T>.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anIndex A TInt supplied by the caller. On return, contains an
+               index value:
+               If the function does not leave, this is the index of the
+               matching object pointer within the array. 
+               If the function leaves with KErrNotFound, this is the index of
+               the first object pointer in the array whose object is bigger
+               than the entry being searched for - if no objects pointed to in
+               the array are bigger, then the index value is the same as the
+               total number of object pointers in the array.
+
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+
+@leave         KErrNotFound, if no suitable object pointer can be found.
+*/
+template <class T>
+inline void RPointerArray<T>::FindInOrderL(const T* anEntry, TInt& anIndex, TLinearOrder<T> anOrder) const
+	{ User::LeaveIfError(FindInOrder(anEntry, anIndex, anOrder)); }
+
+
+/**
+Finds the object pointer in the array that matches the specified object
+pointer, using a binary search technique.
+
+Where there is more than one matching element, it finds the first, the last
+or any matching element as specified by the value of aMode.
+
+The function assumes that object pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param	anEntry The object pointer to be found.
+@param	aMode   Specifies whether to find the first match, the last match or
+                any match, as defined by one of the TArrayFindMode enum values.
+
+@return If there is a matching element, the array index of a matching element -  what
+        the index refers to depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows the
+        last matching element - if the last matching element is also the last element of the array,
+        then the index value is the same as the total number of elements in the array.
+        
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline TInt RPointerArray<T>::SpecificFindInAddressOrderL(const T* anEntry, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInAddressOrder(anEntry, aMode));}
+
+
+/**
+Finds the object pointer in the array whose object matches the specified
+object, using a binary search technique and an ordering algorithm.
+
+In the case that there is more than one matching element finds the first, last
+or any match as specified by the value of aMode.
+
+The function assumes that existing object pointers in the array are ordered 
+so that the objects themselves are in object order as determined by an algorithm 
+supplied by the caller and packaged as a TLinearOrder<T> type.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+@param	aMode  Specifies whether to find the first match, the last match or any match,
+               as defined by one of the TArrayFindMode enum values.
+
+@return If there is a matching element, the array index of a matching
+        element -  what the index refers to depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element of the array, then
+        the index value is the same as the total number of elements in the array.
+
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline TInt RPointerArray<T>::SpecificFindInOrderL(const T* anEntry, TLinearOrder<T> anOrder, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, anOrder, aMode));}
+
+
+/**
+Finds the object pointer in the array that matches the specified object
+pointer, using a binary search technique.
+
+Where there is more than one matching element, it finds the first, the last or
+any matching element as specified by the value of aMode.
+
+The function assumes that object pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anIndex A TInt type supplied by the caller. On return, it contains an index
+               value depending on whether a match is found and on the value of aMode.
+               If there is no matching element in the array, then this is the  index
+               of the first element in the array that is bigger than the element being
+               searched for - if no elements in the array are bigger, then the index
+               value is the same as the total number of elements in the array.
+               If there is a matching element, then what the index refers to depends
+               on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements in the array.
+               
+@param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
+               one of the TArrayFindMode enum values.
+
+@leave  KErrNotFound, if no suitable object pointer can be found.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline void RPointerArray<T>::SpecificFindInAddressOrderL(const T* anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInAddressOrder(anEntry, anIndex, aMode)); }
+
+
+/**
+Finds the object pointer in the array whose object matches the specified
+object, using a binary search technique and an ordering algorithm.
+
+Where there is more than one matching element, it finds the first, the last or any
+matching element as specified by the value of aMode.
+
+The function assumes that existing object pointers in the array are ordered 
+so that the objects themselves are in object order as determined by an
+algorithm supplied by the caller and packaged as a TLinearOrder<T>.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be found.
+@param anIndex A TInt type supplied by the caller. On return, it contains an index
+               value depending on whether a match is found and on the value of aMode.
+               If there is no matching element in the array, then this is
+               the index of the first element in the array that is bigger than
+               the element being searched for - if no elements in the array are bigger,
+               then the index value is the same as the total number of elements in the array.
+               If there is a matching element, then what the index refers to depends
+               on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element of
+               the array, then the index value is the same as the total number of elements in the array.
+
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+@param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
+               one of the TArrayFindModeenum values.
+
+@leave  KErrNotFound, if no suitable object pointer can be found.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline void RPointerArray<T>::SpecificFindInOrderL(const T* anEntry, TInt& anIndex, TLinearOrder<T> anOrder, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, anOrder, aMode)); }
+
+
+/**
+Inserts an object pointer into the array in address order.
+
+No duplicate entries are permitted.
+The function assumes that existing object pointers within the array are in 
+address order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be inserted.
+*/
+template <class T>
+inline void RPointerArray<T>::InsertInAddressOrderL(const T* anEntry)
+	{ User::LeaveIfError(InsertInAddressOrder(anEntry)); }
+
+
+/**
+Inserts an object pointer into the array so that the object itself is in object 
+order.
+
+The algorithm for determining the order of two class T objects is provided 
+by a function supplied by the caller.
+
+No duplicate entries are permitted.
+
+The function assumes that the array is ordered so that the referenced objects 
+are in object order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+Note that the array remains unchanged following an attempt to insert a duplicate
+entry.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be inserted.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+*/
+template <class T>
+inline void RPointerArray<T>::InsertInOrderL(const T* anEntry, TLinearOrder<T> anOrder)
+	{ User::LeaveIfError(InsertInOrder(anEntry, anOrder)); }
+
+
+/**
+Inserts an object pointer into the array in address order, allowing duplicates.
+
+If the new object pointer is a duplicate of an existing object pointer in 
+the array, then the new pointer is inserted after the existing one. If more 
+than one duplicate object pointer already exists in the array, then any new 
+duplicate pointer is inserted after the last one.
+
+The function assumes that existing object pointers within the array are in 
+address order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be inserted.
+*/
+template <class T>
+inline void RPointerArray<T>::InsertInAddressOrderAllowRepeatsL(const T* anEntry)
+	{ User::LeaveIfError(InsertInAddressOrderAllowRepeats(anEntry)); }
+
+
+/**
+Inserts an object pointer into the array so that the object itself is in object 
+order, allowing duplicates
+
+The algorithm for determining the order of two class T objects is provided 
+by a function supplied by the caller.
+
+If the specified object is a duplicate of an existing object, then the new 
+pointer is inserted after the pointer to the existing object. If more than 
+one duplicate object already exists, then the new pointer is inserted after 
+the pointer to the last one.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The object pointer to be inserted. 
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+*/
+template <class T>
+inline void RPointerArray<T>::InsertInOrderAllowRepeatsL(const T* anEntry, TLinearOrder<T> anOrder)
+	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry, anOrder)); }
+
+
+
+/**
+Reserves space for the specified number of elements.
+
+After a call to this function, the memory allocated to the array is sufficient 
+to hold the number of object pointers specified. Adding new object pointers to the array 
+does not result in a re-allocation of memory until the the total number of 
+pointers exceeds the specified count.
+
+@param	aCount	The number of object pointers for which space should be reserved
+@leave KErrNoMemory	If the requested amount of memory could not be allocated
+*/
+template <class T>
+inline void RPointerArray<T>::ReserveL(TInt aCount)
+	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
+
+
+
+// Specialization for RPointerArray<TAny>
+
+/**
+Appends an pointer onto the array.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be appended.
+*/
+inline void RPointerArray<TAny>::AppendL(const TAny* anEntry)
+	{ User::LeaveIfError(Append(anEntry));}
+
+
+/**
+Inserts an pointer into the array at the specified position.
+
+The function leaves with one of the system wide error codes, if
+the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be inserted.
+@param aPos    The position within the array where the pointer is to be 
+               inserted. The position is relative to zero, i.e. zero implies
+			   that a pointer is inserted at the beginning of the array.
+
+@panic USER 131, if aPos is negative, or is greater than the number of object
+       pointers currently in the array.
+*/
+inline void RPointerArray<TAny>::InsertL(const TAny* anEntry, TInt aPos)
+	{ User::LeaveIfError(Insert(anEntry,aPos)); }
+
+
+/**
+Finds the first pointer in the array which matches the specified pointer, using
+a sequential search.
+
+Matching is based on the comparison of pointers.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be found.
+@return The index of the first matching pointer within the array.
+@leave KErrNotFound, if no matching pointer can be found.
+*/
+inline TInt RPointerArray<TAny>::FindL(const TAny* anEntry) const
+	{ return User::LeaveIfError(Find(anEntry));}
+
+
+/**
+Finds the last pointer in the array which matches the specified pointer, using
+a sequential search.
+
+Matching is based on the comparison of pointers.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be found.
+@return The index of the last matching pointer within the array.
+@leave KErrNotFound, if no matching pointer can be found.
+*/
+inline TInt RPointerArray<TAny>::FindReverseL(const TAny* anEntry) const
+	{ return User::LeaveIfError(FindReverse(anEntry));}
+
+
+/**
+Finds the pointer in the array that matches the specified pointer, using a
+binary search technique.
+
+The function assumes that pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be found.
+
+@return The index of the matching pointer within the array
+@leave KErrNotFound, if no suitable pointer can be found.
+*/
+inline TInt RPointerArray<TAny>::FindInAddressOrderL(const TAny* anEntry) const
+	{ return User::LeaveIfError(FindInAddressOrder(anEntry));}
+
+
+/**
+Finds the pointer in the array that matches the specified pointer, using a
+binary search technique.
+
+The function assumes that pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be found.
+@param anIndex A reference to a TInt into which the
+               function puts an index value: If the function does not leave,
+			   this is the index of the matching pointer within the array. If the
+			   function leaves with KErrNotFound, this is the index of the last
+			   pointer within the array which logically precedes
+			   anEntry.
+
+@leave KErrNotFound, if no suitable pointer can be found.
+*/
+inline void RPointerArray<TAny>::FindInAddressOrderL(const TAny* anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInAddressOrder(anEntry, anIndex)); }
+
+
+/**
+Finds the pointer in the array that matches the specified pointer, using a
+binary search technique.
+
+Where there is more than one matching element, it finds the first, the last
+or any matching element as specified by the value of aMode.
+
+The function assumes that pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param	anEntry The pointer to be found.
+@param	aMode   Specifies whether to find the first match, the last match or
+                any match, as defined by one of the TArrayFindMode enum values.
+
+@return If there is a matching element, the array index of a matching element -  what
+        the index refers to depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows the
+        last matching element - if the last matching element is also the last element of the array,
+        then the index value is the same as the total number of elements in the array.
+        
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+inline TInt RPointerArray<TAny>::SpecificFindInAddressOrderL(const TAny* anEntry, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInAddressOrder(anEntry, aMode));}
+
+
+/**
+Finds the pointer in the array that matches the specified pointer, using a
+binary search technique.
+
+Where there is more than one matching element, it finds the first, the last or
+any matching element as specified by the value of aMode.
+
+The function assumes that pointers in the array are in address order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be found.
+@param anIndex A TInt type supplied by the caller. On return, it contains an index
+               value depending on whether a match is found and on the value of aMode.
+               If there is no matching element in the array, then this is the  index
+               of the first element in the array that is bigger than the element being
+               searched for - if no elements in the array are bigger, then the index
+               value is the same as the total number of elements in the array.
+               If there is a matching element, then what the index refers to depends
+               on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements in the array.
+               
+@param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
+               one of the TArrayFindMode enum values.
+
+@leave  KErrNotFound, if no suitable pointer can be found.
+
+@see TArrayFindMode
+*/
+inline void RPointerArray<TAny>::SpecificFindInAddressOrderL(const TAny* anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInAddressOrder(anEntry, anIndex, aMode)); }
+
+
+/**
+Inserts an pointer into the array in address order.
+
+No duplicate entries are permitted.  The function assumes that existing pointers
+within the array are in address order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be inserted.
+*/
+inline void RPointerArray<TAny>::InsertInAddressOrderL(const TAny* anEntry)
+	{ User::LeaveIfError(InsertInAddressOrder(anEntry)); }
+
+
+/**
+Inserts an pointer into the array in address order, allowing duplicates.
+
+If the new pointer is a duplicate of an existing pointer in the array, then the
+new pointer is inserted after the existing one. If more than one duplicate
+pointer already exists in the array, then any new duplicate pointer is inserted
+after the last one.
+
+The function assumes that existing pointers within the array are in address
+order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The pointer to be inserted.
+*/
+inline void RPointerArray<TAny>::InsertInAddressOrderAllowRepeatsL(const TAny* anEntry)
+	{ User::LeaveIfError(InsertInAddressOrderAllowRepeats(anEntry)); }
+
+
+/**
+Apends an object onto the array.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry    A reference to the object of type class T to be appended.
+*/
+template <class T>
+inline void RArray<T>::AppendL(const T& anEntry)
+	{ User::LeaveIfError(Append(anEntry));}
+
+
+/**
+Inserts an object into the array at a specified position.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The class T object to be inserted.
+@param aPos    The position within the array where the object is to
+               be inserted. The position is relative to zero, i.e. zero
+			   implies that an object is inserted at the beginning of
+			   the array.
+			   
+@panic USER 131, if aPos is negative or is greater than the number of objects
+       currently in the array.
+*/
+template <class T>
+inline void RArray<T>::InsertL(const T& anEntry, TInt aPos)
+	{ User::LeaveIfError(Insert(anEntry, aPos));}
+
+
+/**
+Finds the first object in the array which matches the specified object using 
+a sequential search.
+
+Matching is based on the comparison of a TInt value at the key offset position 
+within the objects.
+
+For classes which define their own equality operator (==), the alternative method
+FindL(const T& anEntry, TIdentityRelation<T> anIdentity) is recommended.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+
+@return The index of the first matching object within the array. 
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindL(const T& anEntry) const
+	{ return User::LeaveIfError(Find(anEntry));}
+
+
+/**
+Finds the first object in the array which matches the specified object using 
+a sequential search and a matching algorithm.
+
+The algorithm for determining whether two class T type objects match is provided 
+by a function supplied by the caller.
+
+Such a function need not be supplied if an equality operator (==) is defined for class T. 
+In this case, default construction of anIdentity provides matching.
+
+See Find(const T& anEntry, TIdentityRelation<T> anIdentity) for more details.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry    A reference to an object of type class T to be used
+                  for matching.
+@param anIdentity A package encapsulating the function which determines whether 
+                  two class T type objects match.
+
+@return The index of the first matching object within the array.
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindL(const T& anEntry, TIdentityRelation<T> anIdentity) const
+	{ return User::LeaveIfError(Find(anEntry, anIdentity));}
+
+
+/**
+Finds the last object in the array which matches the specified object using 
+a sequential search.
+
+Matching is based on the comparison of a TInt value at the key offset position 
+within the objects.
+
+For classes which define their own equality operator (==), the alternative method
+FindReverseL(const T& anEntry, TIdentityRelation<T> anIdentity) is recommended.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+
+@return The index of the last matching object within the array. 
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindReverseL(const T& anEntry) const
+	{ return User::LeaveIfError(FindReverse(anEntry));}
+
+
+/**
+Finds the last object in the array which matches the specified object using 
+a sequential search and a matching algorithm.
+
+The algorithm for determining whether two class T type objects match is provided 
+by a function supplied by the caller.
+
+Such a function need not be supplied if an equality operator (==) is defined for class T. 
+In this case, default construction of anIdentity provides matching.
+
+See Find(const T& anEntry, TIdentityRelation<T> anIdentity) for more details.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of objects in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry    A reference to an object of type class T to be used
+                  for matching.
+@param anIdentity A package encapsulating the function which determines whether 
+                  two class T type objects match.
+
+@return The index of the last matching object within the array.
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindReverseL(const T& anEntry, TIdentityRelation<T> anIdentity) const
+	{ return User::LeaveIfError(FindReverse(anEntry, anIdentity));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The function assumes that existing objects within the array are in signed 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+
+@return The index of the matching object within the array.
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindInSignedKeyOrderL(const T& anEntry) const
+	{ return User::LeaveIfError(FindInSignedKeyOrder(anEntry));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The function assumes that existing objects within the array are in unsigned 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+
+@return The index of the matching object within the array.
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindInUnsignedKeyOrderL(const T& anEntry) const
+	{ return User::LeaveIfError(FindInUnsignedKeyOrder(anEntry));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique and an ordering algorithm.
+
+The function assumes that existing objects within the array are in object 
+order as determined by an algorithm supplied by the caller and packaged as 
+a TLinearOrder<T>.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+
+@return The index of the matching object within the array.
+@leave  KErrNotFound if no matching object can be found.
+*/
+template <class T>
+inline TInt RArray<T>::FindInOrderL(const T& anEntry, TLinearOrder<T> anOrder) const
+{ return User::LeaveIfError(FindInOrder(anEntry, anOrder));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The function assumes that existing objects within the array are in signed 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex On return contains an index value of the matching object within the array.
+               If the function leaves with KErrNotFound,this is the index of the
+               first element in the array whose key is bigger than the key of the
+               element being sought. If there are no elements in the array with
+               a bigger key, then the index value is the same as the total 
+               number of elements in the array.
+@leave KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline void RArray<T>::FindInSignedKeyOrderL(const T& anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInSignedKeyOrder(anEntry, anIndex));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The function assumes that existing objects within the array are in unsigned 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex On return contains an index value of the matching object within the array. 
+               If the function leaves with KErrNotFound,  this is the index of the
+               first element in the array whose key is bigger than the key of the
+               element being sought. If there are no elements in the array with
+               a bigger key, then the index value is the same as the total 
+               number of elements in the array.
+@leave  KErrNotFound, if no matching object can be found.
+*/
+template <class T>
+inline void RArray<T>::FindInUnsignedKeyOrderL(const T& anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInUnsignedKeyOrder(anEntry, anIndex));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique and an ordering algorithm.
+
+The function assumes that existing objects within the array are in object 
+order as determined by an algorithm supplied by the caller and packaged as 
+a TLinearOrder<T>.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex On return contains the index value of the matching object within the array
+               If the function leaves with KErrNotFound, this is the index of
+               the first element in the array that is bigger than the element
+               being searched for - if no elements in the array are bigger,
+               then the index value is the same as the total number of elements
+               in the array.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+
+@leave  KErrNotFound if no matching object can be found.
+*/
+template <class T>
+inline void RArray<T>::FindInOrderL(const T& anEntry, TInt& anIndex, TLinearOrder<T> anOrder) const
+	{ User::LeaveIfError(FindInOrder(anEntry, anIndex, anOrder));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The element ordering is determined by a signed 32-bit word
+(the key) embedded in each array element. In the case that there is more than
+one matching element, finds the first, last or any match as specified.
+
+The function assumes that existing objects within the array are in signed 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param	aMode  Specifies whether to find the first match, the last match or
+               any match, as defined by one of the TArrayFindMode enum values.
+
+@return The array index of a matching element - what the index refers to
+        depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element of
+        the array, then the index value is the same as the total number of elements in the array.
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline TInt RArray<T>::SpecificFindInSignedKeyOrderL(const T& anEntry, TInt aMode) const
+{ return User::LeaveIfError(SpecificFindInSignedKeyOrder(anEntry, aMode));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The element ordering is determined by an unsigned 32-bit word
+(the key) embedded in each array element. In the case that there is more than
+one matching element, finds the first, last or any match as specified.
+
+The function assumes that existing objects within the array are in unsigned 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param	aMode  Specifies whether to find the first match, the last match or any
+        match, as defined by one of the TArrayFindMode enum values.
+
+@return The array index of a matching element -  what the index refers to
+        depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element
+        of the array, then the index value is the same as the total number of elements in the array.
+        
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline TInt RArray<T>::SpecificFindInUnsignedKeyOrderL(const T& anEntry, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInUnsignedKeyOrder(anEntry, aMode));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique and an ordering algorithm.
+
+Where there is more than one matching element, it finds the first, the last or
+any matching element as specified by the value of aMode.
+
+The function assumes that existing objects within the array are in object 
+order as determined by an algorithm supplied by the caller and packaged as 
+a TLinearOrder<T> type.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+@param	aMode  Specifies whether to find the first match, the last match or any match,
+               as defined by one of the TArrayFindMode enum values.
+
+@return The array index of a matching element -  what the index refers to
+        depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element
+        of the array, then the index value is the same as the total number of elements in the array.
+        
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline TInt RArray<T>::SpecificFindInOrderL(const T& anEntry, TLinearOrder<T> anOrder, TInt aMode) const
+{ return User::LeaveIfError(SpecificFindInOrder(anEntry, anOrder, aMode));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The element ordering is determined by a signed 32-bit word
+(the key) embedded in each array element. In the case that there is more than
+one matching element, finds the first, last or any match as specified.
+
+The function assumes that existing objects within the array are in signed 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex A TInt type supplied by the caller. On return, it contains an
+               index value depending on whether a match is found and on the
+               value of aMode. If there is no matching element in the array,
+               then this is the index of the first element in the array that
+               is bigger than the element being searched for - if no elements
+               in the array are bigger, then the index value is the same as
+               the total number of elements in the array.
+               If there is a matching element, then what the index refers to
+               depends on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements
+               in the array.
+@param aMode   Specifies whether to find the first match, the last match or any match,
+               as defined by one of the TArrayFindMode enum values.
+               
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline void RArray<T>::SpecificFindInSignedKeyOrderL(const T& anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInSignedKeyOrder(anEntry, anIndex, aMode));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique.
+
+The element ordering is determined by an unsigned 32-bit word
+(the key) embedded in each array element. In the case that there is more than
+one matching element, finds the first, last or any match as specified.
+
+The function assumes that existing objects within the array are in unsigned 
+key order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex A TInt type supplied by the caller. On return, it contains an
+               index value depending on whether a match is found and on the
+               value of aMode. If there is no matching element in the array,
+               then this is the index of the first element in the array that
+               is bigger than the element being searched for - if no elements
+               in the array are bigger, then the index value is the same as
+               the total number of elements in the array. If there is a matching
+               element, then what the index refers to depends on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements in the array.
+@param aMode   Specifies whether to find the first match, the last match or any match,
+               as defined by one of the  TArrayFindMode enum values.
+               
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline void RArray<T>::SpecificFindInUnsignedKeyOrderL(const T& anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInUnsignedKeyOrder(anEntry, anIndex, aMode));}
+
+
+/**
+Finds the object in the array which matches the specified object using a binary 
+search technique and a specified ordering algorithm.
+
+Where there is more than one matching element, it finds the first, the last or
+any matching element as specified by the value of aMode.
+
+The function assumes that existing objects within the array are in object 
+order as determined by an algorithm supplied by the caller and packaged as 
+a TLinearOrder<T> type.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to an object of type class T to be used for matching.
+@param anIndex A TInt type supplied by the caller. On return, it contains an
+               index value depending on whether a match is found and on the value
+               of aMode. If there is no matching element in the array, then this is
+               the  index of the first element in the array that is bigger than the
+               element being searched for - if no elements in the array are bigger,
+               then the index value is the same as the total number of elements
+               in the array. If there is a matching element, then what the index
+               refers to depends on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements in the array.
+               
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+@param aMode   Specifies whether to find the first match, the last match or any match,
+               as defined by one of the TArrayFindMode enum values.
+               
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+template <class T>
+inline void RArray<T>::SpecificFindInOrderL(const T& anEntry, TInt& anIndex, TLinearOrder<T> anOrder, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, anOrder, aMode));}
+
+
+/**
+Inserts an object into the array in ascending signed key order.
+
+The order of two class T type objects is based on comparing a TInt value
+located at the key offset position within the class T object.
+
+No duplicate entries are permitted.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+Note that the array remains unchanged following an attempt to insert a duplicate entry.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+*/
+template <class T>
+inline void RArray<T>::InsertInSignedKeyOrderL(const T& anEntry)
+	{ User::LeaveIfError(InsertInSignedKeyOrder(anEntry));}
+
+
+/**
+Inserts an object into the array in ascending unsigned key order, not allowing 
+duplicate entries.
+
+The order of two class T type objects is based on comparing a TUint value 
+located at the key offset position within the class T object. 
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+Note that the array remains unchanged following an attempt to insert a duplicate entry.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+*/
+template <class T>
+inline void RArray<T>::InsertInUnsignedKeyOrderL(const T& anEntry)
+	{ User::LeaveIfError(InsertInUnsignedKeyOrder(anEntry));}
+
+
+/**
+Inserts an object of into the array in object order.
+
+The algorithm for determining the order of two class T type objects is provided 
+by a function supplied by the caller.
+
+No duplicate entries are permitted.
+
+The function assumes that existing objects within the array are in object 
+order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+Note that the array remains unchanged following an attempt to insert a duplicate entry.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+*/
+template <class T>
+inline void RArray<T>::InsertInOrderL(const T& anEntry, TLinearOrder<T> anOrder)
+	{ User::LeaveIfError(InsertInOrder(anEntry, anOrder));}
+
+
+/**
+Inserts an object into the array in ascending signed key order,
+allowing duplicates.
+
+The order of two class T type objects is based on comparing a TInt value
+located at the key offset position within the class T object. 
+
+If anEntry is a duplicate of an existing object in the array, then the new 
+object is inserted after the existing object. If more than one duplicate object 
+already exists in the array, then any new duplicate object is inserted after 
+the last one.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+*/
+template <class T>
+inline void RArray<T>::InsertInSignedKeyOrderAllowRepeatsL(const T& anEntry)
+	{ User::LeaveIfError(InsertInSignedKeyOrderAllowRepeats(anEntry));}
+
+
+/**
+Inserts an object into the array in ascending unsigned key order, allowing 
+duplicates.
+
+The order of two class T type objects is based on comparing a TUint value 
+located at the key offset position within the class T object. 
+
+If anEntry is a duplicate of an existing object in the array, then the new 
+object is inserted after the existing object. If more than one duplicate object 
+already exists in the array, then any new duplicate object is inserted after 
+the last one.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+*/
+template <class T>
+inline void RArray<T>::InsertInUnsignedKeyOrderAllowRepeatsL(const T& anEntry)
+	{ User::LeaveIfError(InsertInUnsignedKeyOrderAllowRepeats(anEntry));}
+
+
+/**
+Inserts an object into the array in object order, allowing duplicates.
+
+The algorithm for determining the order of two class T type objects is provided 
+by a function supplied by the caller.
+
+If anEntry is a duplicate of an existing object in the array, then the new 
+object is inserted after the existing object. If more than one duplicate object 
+already exists in the array, then anEntry is inserted after the last one.
+
+The function assumes that existing objects within the array are in object 
+order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry A reference to the object of type class T to be inserted.
+@param anOrder A package encapsulating the function which determines the order 
+               of two class T objects.
+*/
+template <class T>
+inline void RArray<T>::InsertInOrderAllowRepeatsL(const T& anEntry, TLinearOrder<T> anOrder)
+	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry, anOrder));}
+
+
+
+/**
+Reserves space for the specified number of elements.
+
+After a call to this function, the memory allocated to the array is sufficient 
+to hold the number of objects specified. Adding new objects to the array 
+does not result in a re-allocation of memory until the the total number of 
+objects exceeds the specified count.
+
+@param	aCount	The number of objects for which space should be reserved
+@leave KErrNoMemory	If the requested amount of memory could not be allocated
+*/
+template <class T>
+inline void RArray<T>::ReserveL(TInt aCount)
+	{ User::LeaveIfError(RArrayBase::DoReserve(aCount)); }
+
+
+
+
+/**
+Appends a signed integer onto the array.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The signed integer to be appended.
+*/
+inline void RArray<TInt>::AppendL(TInt anEntry)
+	{ User::LeaveIfError(Append(anEntry));}
+
+
+/**
+Inserts a signed integer into the array at the specified position.
+	
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The signed integer to be inserted.
+@param aPos    The position within the array where the signed integer is to be 
+	           inserted. The position is relative to zero, i.e. zero implies
+			   that an entry is inserted at the beginning of the array.
+		   
+@panic USER 131, if aPos is negative, or is greater than the number of entries
+       currently in the array.
+*/
+inline void RArray<TInt>::InsertL(TInt anEntry, TInt aPos)
+	{ User::LeaveIfError(Insert(anEntry, aPos));}
+
+
+/**
+Finds the first signed integer in the array which matches the specified signed 
+integer using a sequential search.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of entries in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The signed integer to be found.
+
+@return The index of the first matching signed integer within the array.
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline TInt RArray<TInt>::FindL(TInt anEntry) const
+	{ return User::LeaveIfError(Find(anEntry));}
+
+
+/**
+Finds the last signed integer in the array which matches the specified signed 
+integer using a sequential search.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of entries in the array.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The signed integer to be found.
+
+@return The index of the last matching signed integer within the array.
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline TInt RArray<TInt>::FindReverseL(TInt anEntry) const
+	{ return User::LeaveIfError(FindReverse(anEntry));}
+
+
+/**
+Finds the signed integer in the array that matches the specified signed integer 
+using a binary search technique.
+
+The function assumes that the array is in signed integer order.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The signed integer to be found.
+
+@return The index of the matching signed integer within the array.
+@leave  KErrNotFound, if no match can be found.
+*/
+inline TInt RArray<TInt>::FindInOrderL(TInt anEntry) const
+	{ return User::LeaveIfError(FindInOrder(anEntry));}
+
+
+/**
+Finds the signed integer in the array that matches the specified signed integer
+using a binary search technique.
+	
+The function assumes that the array is in signed integer order.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The signed integer to be found.
+@param anIndex A reference to a signed integer into which the
+               function puts an index value: If the function returns ,
+               this is the index of the matching signed integer within the
+               array. If the function leaves with KErrNotFound, this is the
+               index of the first signed integer within the array that is
+               bigger than the signed integer being searched for - if no
+               signed integers within the array are bigger, then the index
+               value is the same as the total number of signed integers
+               within the array.
+@leave  KErrNotFound if no  match can be found.
+*/
+inline void RArray<TInt>::FindInOrderL(TInt anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInOrder(anEntry, anIndex));}
+
+
+/**
+Finds the signed integer in the array that matches the specified signed integer 
+using a binary search technique.
+
+Where there is more than one matching element, it finds the first, last or any
+matching element  as specified by the value of aMode.
+	
+The function assumes that the array is in signed integer order.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The signed integer to be found.
+@param aMode   Specifies whether to find the first match, the last match or
+               any match, as defined by one of the TArrayFindMode enum values.
+
+@return The array index of a matching element - what the index refers to
+        depends on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element
+        of the array, then the index value is the same as the total number of elements in the array.
+        
+@leave  KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+inline TInt RArray<TInt>::SpecificFindInOrderL(TInt anEntry, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, aMode));}
+
+
+/**
+Finds the signed integer in the array that matches the specified signed integer
+using a binary search technique.
+
+Where there is more than one matching element, it finds the first, last or any
+matching element  as specified by the value of aMode.
+
+The function assumes that the array is in signed integer order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The signed integer to be found.
+@param anIndex A TInt type supplied by the caller. On return, it contains an
+               index value depending on whether a match is found and on the value of aMode.
+               If there is no matching element in the array, then this is
+               the  index of the first element in the array that is bigger
+               than the element being searched for - if no elements in the
+               array are bigger, then the index value is the same as the total
+               number of elements in the array. If there is a matching element,
+               then what the index refers to depends on the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element
+               of the array, then the index value is the same as the total number of elements in the array.
+               
+@param	aMode  Specifies whether to find the first match, the last match or any match, as defined
+               by one of the TArrayFindMode enum values.
+               
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+inline void RArray<TInt>::SpecificFindInOrderL(TInt anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, aMode));}
+
+
+/**
+Inserts a signed integer into the array in signed integer order.
+
+No duplicate entries are permitted.
+
+The function assumes that existing entries within the array are in signed 
+integer order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+
+Note that the array remains unchanged following an attempt to insert a duplicate entry. 
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+
+@param anEntry The signed integer to be inserted.
+*/
+inline void RArray<TInt>::InsertInOrderL(TInt anEntry)
+	{ User::LeaveIfError(InsertInOrder(anEntry));}
+
+
+/**
+Inserts a signed integer into the array in signed integer order,
+allowing duplicates.
+
+If anEntry is a duplicate of an existing entry in the array, then the new 
+signed integer is inserted after the existing one. If more than one duplicate 
+entry already exists in the array, then any new duplicate signed integer is 
+inserted after the last one.
+
+The function assumes that existing entries within the array are in signed 
+integer order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The signed integer to be inserted.
+*/
+inline void RArray<TInt>::InsertInOrderAllowRepeatsL(TInt anEntry)
+	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry));}
+
+
+
+/**
+Reserves space for the specified number of elements.
+
+After a call to this function, the memory allocated to the array is sufficient 
+to hold the number of integers specified. Adding new integers to the array 
+does not result in a re-allocation of memory until the the total number of 
+integers exceeds the specified count.
+
+@param	aCount	The number of integers for which space should be reserved
+@leave KErrNoMemory	If the requested amount of memory could not be allocated
+*/
+inline void RArray<TInt>::ReserveL(TInt aCount)
+	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
+
+
+
+
+/**
+Appends an unsigned integer onto the array.
+	
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be appended.
+*/
+inline void RArray<TUint>::AppendL(TUint anEntry)
+	{ User::LeaveIfError(Append(anEntry));}
+
+
+/**
+Inserts an unsigned integer into the array at the specified position.
+	
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry  The unsigned integer to be inserted.
+@param aPos     The position within the array where the unsigned integer is to 
+	            be inserted. The position is relative to zero, i.e. zero
+				implies that an entry is inserted at the beginning of
+				the array.
+			
+@panic USER 131, if aPos is negative, or is greater than the number of entries
+       currently in the array.
+*/
+inline void RArray<TUint>::InsertL(TUint anEntry, TInt aPos)
+	{ User::LeaveIfError(Insert(anEntry, aPos));}
+
+
+/**
+Finds the first unsigned integer in the array which matches the specified
+value, using a sequential search.
+
+The find operation always starts at the low index end of the array. There 
+is no assumption about the order of entries in the array.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be found.
+@return The index of the first matching unsigned integer within the array.
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline TInt RArray<TUint>::FindL(TUint anEntry) const
+	{ return User::LeaveIfError(Find(anEntry));}
+
+
+/**
+Finds the last unsigned integer in the array which matches the specified
+value, using a sequential search.
+
+The find operation always starts at the high index end of the array. There 
+is no assumption about the order of entries in the array.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be found.
+@return The index of the last matching unsigned integer within the array.
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline TInt RArray<TUint>::FindReverseL(TUint anEntry) const
+	{ return User::LeaveIfError(FindReverse(anEntry));}
+
+
+/**
+Finds the unsigned integer in the array which matches the specified value, 
+using a binary search technique.
+	
+The functions assume that existing entries within the array are in unsigned 
+integer order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The unsigned integer to be found.
+
+@return The index of the matching unsigned integer within the array;
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline TInt RArray<TUint>::FindInOrderL(TUint anEntry) const
+	{ return User::LeaveIfError(FindInOrder(anEntry));}
+
+
+/**
+Finds the unsigned integer in the array which matches the specified value, 
+using a binary search technique.
+
+If the index cannot be found, the function returns the index of the last
+unsigned integer within the array which logically precedes anEntry.
+The functions assume that existing entries within the array are in unsigned 
+integer order.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The unsigned integer to be found.
+@param anIndex A TInt supplied by the caller. On return, contains an index
+               value of the matching unsigned integer within the array. 
+               If the function leaves with KErrNotFound, this is the index of the
+               first unsigned integer within the array that is bigger than the
+               unsigned integer being searched for - if no unsigned integers within
+               the array are bigger, then the index value is the same as the
+               total number of unsigned integers within the array.
+
+@leave  KErrNotFound, if no matching entry can be found.
+*/
+inline void RArray<TUint>::FindInOrderL(TUint anEntry, TInt& anIndex) const
+	{ User::LeaveIfError(FindInOrder(anEntry, anIndex));}
+
+
+/**
+Finds the unsigned integer in the array that matches the specified unsigned integer 
+using a binary search technique.
+
+In the case that there is more than one matching element, finds the first, last or any
+match as specified.
+	
+The function assumes that the array is in unsigned integer order.
+
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.
+	
+@param anEntry The unsigned integer to be found.
+@param aMode   Specifies whether to find the first match, the last match or 
+               any match, as defined by one of the TArrayFindMode enum values.
+
+@return The array index of a matching element - what the index refers to depends
+        on the value of aMode:
+        if this is EArrayFindMode_First, then the index refers to the first matching element;
+        if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+        if this is EArrayFindMode_Last, then the index refers to first element that follows
+        the last matching element - if the last matching element is also the last element
+        of the array, then the index value is the same as the total number of elements in the array.
+        
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+inline TInt RArray<TUint>::SpecificFindInOrderL(TUint anEntry, TInt aMode) const
+	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, aMode));}
+
+
+/**
+Finds the unsigned integer in the array that matches the specified unsigned integer
+using a binary search technique.
+
+Where there is more than one matching element, it finds the first, last or
+any matching element as specified by the value of aMode.
+
+The function assumes that the array is in unsigned integer order.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be found.
+@param anIndex A TInt type supplied by the caller. On return, it contains an index
+               value depending on whether a match is found and on the value of aMode.
+               If there is no matching element in the array, then this is the
+               index of the first element in the array that is bigger than the element
+               being searched for - if no elements in the array are bigger, then
+               the index value is the same as the total number of elements in the array.
+               If there is a matching element, then what the index refers to depends on
+               the value of aMode:
+               if this is EArrayFindMode_First, then the index refers to the first matching element;
+               if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
+               if this is EArrayFindMode_Last, then the index refers to first element that follows
+               the last matching element - if the last matching element is also the last element of the array,
+               then the index value is the same as the total number of elements in the array.
+               
+@param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
+               one of the TArrayFindMode enum values.
+@leave KErrNotFound if no matching entry exists.
+
+@see TArrayFindMode
+*/
+inline void RArray<TUint>::SpecificFindInOrderL(TUint anEntry, TInt& anIndex, TInt aMode) const
+	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, aMode));}
+
+
+/**
+Inserts an unsigned integer into the array in unsigned integer order.
+
+No duplicate entries are permitted.
+
+The function assumes that existing entries within the array are in unsigned 
+integer order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+Note that the array remains unchanged following an attempt to insert a duplicate entry.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be inserted.
+*/
+inline void RArray<TUint>::InsertInOrderL(TUint anEntry)
+	{ User::LeaveIfError(InsertInOrder(anEntry));}
+
+
+/**
+Inserts an unsigned integer into the array in unsigned integer order, allowing 
+duplicates.
+
+If the new integer is a duplicate of an existing entry in the array, then 
+the new unsigned integer is inserted after the existing one. If more than 
+one duplicate entry already exists in the array, then any new duplicate
+unsigned integer is inserted after the last one.
+	
+The function assumes that existing entries within the array are in unsigned 
+integer order.
+
+The function leaves with one of the system wide error codes, if the operation fails.
+	
+NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
+	
+@param anEntry The unsigned integer to be inserted.
+*/
+inline void RArray<TUint>::InsertInOrderAllowRepeatsL(TUint anEntry)
+	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry));}
+
+
+
+/**
+Reserves space for the specified number of elements.
+
+After a call to this function, the memory allocated to the array is sufficient 
+to hold the number of integers specified. Adding new integers to the array 
+does not result in a re-allocation of memory until the the total number of 
+integers exceeds the specified count.
+
+@param	aCount	The number of integers for which space should be reserved
+@leave KErrNoMemory	If the requested amount of memory could not be allocated
+*/
+inline void RArray<TUint>::ReserveL(TInt aCount)
+	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
+
+
+
+// class TChunkHeapCreateInfo
+/**
+Sets single thread property of the chunk heap.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetSingleThread()
+for this TChunkHeapCreateInfo object.
+
+@param aSingleThread	ETrue when the chunk heap is to be single threaded,
+						EFalse otherwise.
+*/
+inline void TChunkHeapCreateInfo::SetSingleThread(const TBool aSingleThread)
+	{
+	iSingleThread = aSingleThread;
+	}
+
+
+/**
+Sets alignment of the cells of the chunk heap to be created.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetAlignment()
+for this TChunkHeapCreateInfo object.
+
+@param aAlignment	The alignment of the heap cells.
+*/
+inline void TChunkHeapCreateInfo::SetAlignment(TInt aAlign)
+	{
+	iAlign = aAlign;
+	}
+
+
+/**
+Sets the increments to the size of the host chunk.  If the supplied value is 
+less than KMinHeapGrowBy, it is discarded and the value KMinHeapGrowBy is 
+used instead.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetGrowBy()
+for this TChunkHeapCreateInfo object.
+
+@param aGrowBy	The increment to the size of the host chunk.
+*/
+inline void TChunkHeapCreateInfo::SetGrowBy(TInt aGrowBy)
+	{
+	iGrowBy = aGrowBy;
+	}
+
+
+/**
+Sets the offset from the base of the host chunk to the start of the heap.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetOffset()
+for this TChunkHeapCreateInfo object.
+
+@param aOffset	The offset in bytes.
+*/
+inline void TChunkHeapCreateInfo::SetOffset(TInt aOffset)
+	{
+	iOffset = aOffset;
+	}
+
+
+/**
+Sets the mode flags of the chunk heap.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetMode()
+for this TChunkHeapCreateInfo object.
+
+@param aMode	The mode flags for the chunk heap to be created, this should be
+				one or more of the values from TChunkHeapCreateMode.
+*/
+inline void TChunkHeapCreateInfo::SetMode(TUint aMode)
+	{
+	iMode = aMode;
+	}
+
+
+/**
+Sets the paging attribute of the chunk heap to be created.
+
+This overrides any previous call to TChunkHeapCreateInfo::SetPaging()
+for this TChunkHeapCreateInfo object.
+
+@param aPaging	The paging attribute for the chunk heap to be created.
+*/
+inline void TChunkHeapCreateInfo::SetPaging(const TChunkHeapPagingAtt aPaging)
+	{
+	iPaging = aPaging;
+	}
+
+
+/**
+Sets the priority of the client's process.
+
+@param aPriority The priority value.
+*/
+inline void RMessagePtr2::SetProcessPriorityL(TProcessPriority aPriority) const
+	{ User::LeaveIfError(SetProcessPriority(aPriority));}
+
+
+/**
+Opens a handle on the client thread.
+
+@param aClient    On successful return, the handle to the client thread.
+@param aOwnerType An enumeration whose enumerators define the ownership of
+                  the handle. If not explicitly specified,
+                  EOwnerProcess is taken as default.
+*/
+inline void RMessagePtr2::ClientL(RThread& aClient, TOwnerType aOwnerType) const
+	{ User::LeaveIfError(Client(aClient, aOwnerType));}
+
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability, aDiagnostic);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, const char* aDiagnosticMessage) const
+	{
+	if (!HasCapability(aCapability, aDiagnosticMessage))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, const char* aDiagnosticMessage) const
+	{
+	if (!HasCapability(aCapability1, aCapability2, aDiagnosticMessage))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+
+#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+// Only available to NULL arguments
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, OnlyCreateWithNull /*aDiagnosticMessage*/) const
+	{
+	if (!DoHasCapability(aCapability))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnosticMessage*/) const
+	{
+	if (!DoHasCapability(aCapability1, aCapability2))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+// For things using KSuppressPlatSecDiagnostic
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	if (!DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+
+inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
+	}
+
+inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
+	{
+	if (!DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue))
+		{
+		User::Leave(KErrPermissionDenied);
+		}
+	}
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+#endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+
+inline TInt RThread::RenameMe(const TDesC& aName)
+	{ return User::RenameThread(aName); }
+inline TInt RProcess::RenameMe(const TDesC& aName)
+	{ return User::RenameProcess(aName); }
+
+
+#endif // !__KERNEL_MODE__
+
+#ifdef __SUPPORT_CPP_EXCEPTIONS__
+// The standard header file <exception> defines the following guard macro for EDG and CW, VC++, GCC respectively.
+// The guard below is ugly. It will surely come back and bite us unless we resolve the whole issue of standard headers
+// when we move to supporting Standard C++.
+
+// The macro __SYMBIAN_STDCPP_SUPPORT__ is defined when building a StdC++ target.
+// In this case, we wish to avoid defining uncaught_exception below since it clashes with the StdC++ specification 
+#if !defined(_EXCEPTION) && !defined(_EXCEPTION_) && !defined(__EXCEPTION__) && !defined(__SYMBIAN_STDCPP_SUPPORT__)
+
+#if defined(__VC32__) && !defined(_CRTIMP_PURE)
+
+	// Declare MS EH runtime functions
+	bool __uncaught_exception(void);
+
+#if _MSC_VER >= 1200
+	__declspec(noreturn) void terminate(void);
+	__declspec(noreturn) void unexpected(void);
+#else
+	void terminate(void);
+	void unexpected(void);
+#endif
+
+	typedef void (*terminate_handler)();
+	terminate_handler set_terminate(terminate_handler h) throw();
+	typedef void (*unexpected_handler)();
+	unexpected_handler set_unexpected(unexpected_handler h) throw();
+
+namespace std {
+#ifdef __MSVCDOTNET__
+	inline bool uncaught_exception(void) { return ::__uncaught_exception(); }
+#else // !__MSVCDOTNET__
+	// MS KB242192: BUG: uncaught_exception() Always Returns False
+	inline bool uncaught_exception(void) { return false; }
+#endif //__MSVCDOTNET__
+	inline void terminate(void) { ::terminate(); }
+	inline void unexpected(void) { ::unexpected(); }
+	inline terminate_handler set_terminate(terminate_handler h) throw() { return ::set_terminate(h); }
+	inline unexpected_handler set_unexpected(unexpected_handler h) throw() { return ::set_unexpected(h); }
+}
+
+#endif // extract from MSVC headers
+
+#ifdef __CW32__
+
+	extern "C" bool __uncaught_exception(void);
+
+namespace std {
+#if __MWERKS__ > 0x3200
+	inline bool uncaught_exception(void) { return ::__uncaught_exception(); }
+#else
+	// no uncaught_exception() implementation on CW 2.4.7
+	inline bool uncaught_exception(void) { return false; }
+#endif
+}
+
+#endif // extract from CW headers
+
+#endif // <exception> header guard
+
+#endif //__SUPPORT_CPP_EXCEPTIONS__