epoc32/include/e32std.inl
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // e32\include\e32std.inl
    15 // 
    16 //
    17 
    18 // Global leaving operator new
    19 inline TAny* operator new(TUint aSize, TLeave)
    20 	{return User::AllocL(aSize);}
    21 inline TAny* operator new(TUint aSize, TLeave, TUint aExtraSize)
    22 	{return User::AllocL(aSize + aExtraSize);}
    23 #if !defined(__VC32__) || defined (__MSVCDOTNET__)
    24 inline TAny* operator new[](TUint aSize, TLeave)
    25 	{return User::AllocL(aSize);}
    26 #endif
    27 
    28 
    29 
    30 
    31 // class Mem
    32 inline TUint8* Mem::Copy(TAny* aTrg, const TAny* aSrc, TInt aLength)
    33 /**
    34 Copies data from a source location to a target location and returns a pointer 
    35 to the end of the copied data.
    36 	
    37 The source and target areas can overlap.
    38 	
    39 The copy operation is optimised so that if both source and target locations 
    40 are aligned on a word boundary, the operation performs the copy on a word 
    41 by word basis.
    42 	
    43 @param aTrg    A pointer to the target location for the copy operation. 
    44 @param aSrc    A pointer to the source location for the copy operation. 
    45 @param aLength The number of bytes to be copied. This value must not
    46                be negative. 
    47 
    48 @return A pointer to a location aLength bytes beyond aTrg (i.e. the location 
    49         aTrg+aLength).
    50 
    51 @panic USER 90 In debug builds only, if aLength is negative. 
    52 */
    53 	{ return (TUint8*)memmove(aTrg, aSrc, aLength) + aLength; }
    54 
    55 
    56 
    57 
    58 inline TUint8* Mem::Move(TAny* aTrg, const TAny* aSrc, TInt aLength)
    59 /**
    60 Moves a block of data from a source location to a target location and returns 
    61 a pointer to the end of the moved data.
    62 	
    63 The source and target areas can overlap.
    64 	
    65 Both source and target locations must be aligned on a word boundary. 
    66 The specified length must also be a multiple of 4.
    67 	
    68 @param aTrg    A pointer to the target location for the move operation. This 
    69                pointer must be word aligned. 
    70 @param aSrc    A pointer to the source location for the move operation. This
    71                pointer must be word aligned.
    72 @param aLength The number of bytes to be copied. This value must be a multiple 
    73                of 4.
    74 			   
    75 @return A pointer to a location aLength bytes beyond aTrg (i.e. the location 
    76         aTrg+aLength).
    77 
    78 @panic USER 93 In debug builds only, if aTrg is not word aligned.
    79 @panic USER 92 In debug builds only, if aSrc is not word aligned.
    80 @panic USER 91 In debug builds only, if aLength is not a multiple of 4.
    81 */
    82 	{ return (TUint8*)wordmove(aTrg, aSrc, aLength) + aLength; }
    83 
    84 
    85 
    86 
    87 inline void Mem::Fill(TAny* aTrg, TInt aLength, TChar aChar)
    88 /**
    89 Fills a specified block of data with a specified character, replacing
    90 any existing content.
    91 	
    92 The function assumes that the fill character is a non-Unicode character.
    93 	
    94 @param aTrg    A pointer to the location where filling is to start. 
    95 @param aLength The number of bytes to be filled. This value must not
    96                be negative. 
    97 @param aChar   The fill character.
    98 
    99 @panic USER 95 In debug builds only, if aLength is negative.  
   100 */
   101 	{ memset(aTrg, (TInt)(aChar.operator TUint()), aLength); }
   102 
   103 
   104 
   105 
   106 inline void Mem::FillZ(TAny* aTrg,TInt aLength)
   107 /**
   108 Fills a specified block of data with binary zeroes (i.e. 0x00), replacing any 
   109 existing content.
   110 	
   111 @param aTrg    A pointer to the location where filling is to start. 
   112 @param aLength The number of bytes to be filled. This value must not
   113                be negative. 
   114 	
   115 @panic USER 95 In debug builds only, if aLength is negative.  
   116 */
   117 	{ memclr(aTrg, aLength); }
   118 
   119 
   120 
   121 
   122 #if !(defined(__GCC32__) && defined(__MARM__))
   123 inline TInt Mem::Compare(const TUint8* aLeft, TInt aLeftL, const TUint8* aRight, TInt aRightL)
   124 /**
   125 Compares a block of data at one specified location with a block of data at 
   126 another specified location.
   127 
   128 The comparison proceeds on a byte for byte basis, the result of the comparison 
   129 is based on the difference of the first bytes to disagree.
   130 
   131 The data at the two locations are equal if they have the same length and content. 
   132 Where the lengths are different and the shorter section of data is the same 
   133 as the first part of the longer section of data, the shorter is considered 
   134 to be less than the longer.
   135 
   136 @param aLeft   A pointer to the first (or left) block of 8 bit data
   137                to be compared.
   138 @param aLeftL  The length of the first (or left) block of data to be compared,  
   139                i.e. the number of bytes.
   140 @param aRight  A pointer to the second (or right) block of 8 bit data to be 
   141                compared.
   142 @param aRightL The length of the second (or right) block of data to be compared 
   143                i.e. the number of bytes.
   144                
   145 @return Positive, if the first (or left) block of data is greater than the 
   146         second (or right) block of data.
   147         Negative, if the first (or left) block of data is less than the
   148         second (or right) block of data.
   149         Zero, if both the first (or left) and second (or right) blocks of data
   150         have the same length and the same content.
   151 */
   152 	{ return memcompare(aLeft, aLeftL, aRight, aRightL); }
   153 #endif
   154 
   155 
   156 
   157 
   158 // class RHeap
   159 inline TInt RHeap::SetBrk(TInt aBrk)
   160 	{ return ((RChunk*)&iChunkHandle)->Adjust(aBrk); }
   161 
   162 
   163 
   164 
   165 // class TChar
   166 #ifndef __KERNEL_MODE__
   167 inline void TChar::SetChar(TUint aChar)
   168 	{iChar=aChar;}
   169 
   170 
   171 
   172 
   173 inline void TChar::Fold()
   174 /**
   175 Converts the character to a form which can be used in tolerant comparisons 
   176 without control over the operations performed. 
   177 
   178 Tolerant comparisons are those which ignore character differences like case 
   179 and accents.
   180 
   181 This function can be used when searching for a string in a text file or a 
   182 file in a directory. Folding performs the following conversions: converts 
   183 to lowercase, strips accents, converts all digits representing the values 
   184 0..9 to the ordinary digit characters '0'..'9', converts all spaces (standard, 
   185 non-break, fixed-width, ideographic, etc.) to the ordinary space character 
   186 (0x0020), converts Japanese characters in the hiragana syllabary to katakana, 
   187 and converts East Asian halfwidth and fullwidth variants to their ordinary 
   188 forms. You can choose to perform any subset of these operations by using the 
   189 other function overload.
   190 
   191 @see User::Fold
   192 */
   193 	{iChar=User::Fold(iChar);}
   194 
   195 
   196 
   197 
   198 inline void TChar::LowerCase()
   199 /**
   200 Converts the character to its lowercase form.
   201 
   202 Characters lacking a lowercase form are unchanged.
   203 
   204 @see User::LowerCase
   205 */
   206 	{iChar=User::LowerCase(iChar);}
   207 
   208 
   209 
   210 
   211 inline void TChar::UpperCase()
   212 /**
   213 Converts the character to its uppercase form.
   214 
   215 Characters lacking an uppercase form are unchanged.
   216 
   217 @see User::UpperCase
   218 */
   219 	{iChar=User::UpperCase(iChar);}
   220 
   221 
   222 
   223 
   224 #ifdef _UNICODE
   225 inline void TChar::Fold(TInt aFlags)
   226 /**
   227 Converts the character to a form which can be used in tolerant comparisons 
   228 allowing selection of the specific fold operations to be performed.
   229 
   230 @param aFlags Flags which define the operations to be performed. The values 
   231               are defined in the enum beginning with EFoldCase.
   232 
   233 @see TChar::EFoldCase
   234 @see User::Fold
   235 */
   236 	{iChar=User::Fold(iChar,aFlags);}
   237 
   238 
   239 
   240 
   241 inline void TChar::TitleCase()
   242 /**
   243 Converts the character to its titlecase form.
   244 
   245 The titlecase form of a character is identical to its uppercase form unless 
   246 a specific titlecase form exists. Characters lacking a titlecase form are 
   247 unchanged.
   248 */
   249 	{iChar=User::TitleCase(iChar);}
   250 #endif
   251 
   252 
   253 
   254 
   255 inline TBool TChar::Eos() const
   256 /**
   257 Tests whether the character is the C/C++ end-of-string character - 0.
   258 
   259 @return True, if the character is 0; false, otherwise.
   260 */
   261 	{return(iChar==0);}
   262 #endif // _UNICODE
   263 
   264 
   265 
   266 
   267 // Class TCallBack
   268 inline TCallBack::TCallBack()
   269 /**
   270 Default constructor.
   271 	
   272 Sets the function pointer to Null.
   273 */
   274 	{iFunction=NULL;}
   275 
   276 
   277 
   278 
   279 inline TCallBack::TCallBack(TInt (*aFunction)(TAny *aPtr))
   280 	: iFunction(aFunction),iPtr(NULL)
   281 /**
   282 Constructs the callback object with the specified callback function.
   283 
   284 @param aFunction A pointer to the callback function. It takes an argument of
   285                  type TAny* and returns a TInt.
   286 				 It must be either a static member of a class or a function
   287 				 which is not a member of any class. 
   288 */
   289 	{}
   290 
   291 
   292 
   293 
   294 inline TCallBack::TCallBack(TInt (*aFunction)(TAny *aPtr),TAny *aPtr)
   295 	: iFunction(aFunction),iPtr(aPtr)
   296 /**
   297 Constructs the callback object with the specified callback function and
   298 a pointer to any object.
   299 
   300 @param aFunction A pointer to the callback function. It takes an argument of
   301                  type TAny* and returns a TInt.
   302 				 It must be either a static member of a class or a function
   303 				 which is not a member of any class. 
   304 @param aPtr      A pointer which is always passed to the callback function.
   305 */
   306 	{}
   307 
   308 
   309 
   310 
   311 /**
   312 Calls the callback function.
   313 	
   314 @return The value returned by the callback function. The meaning of this value
   315         depends entirely on the context in which the callback function
   316         is called.
   317         For example, when used with the CIdle class, a false (zero) value
   318         indicates that the callback function should not be 	called again.
   319         As another example, when used with the CPeriodic class, the return
   320         value is ignored and is irrelevant in that context.
   321 
   322 @see CIdle
   323 @see CPeriodic        
   324 */
   325 inline TInt TCallBack::CallBack() const
   326 	{ return (iFunction ? (*iFunction)(iPtr) : 0); }
   327 
   328 
   329 
   330 
   331 // Class TSglQue
   332 template <class T>
   333 inline TSglQue<T>::TSglQue()
   334 /**
   335 Constructs an empty list header and sets the offset value of the link object 
   336 to zero.
   337 
   338 In practice, never assume that the offset of the link object from the start 
   339 of a list element is zero, even if the link object is declared as the first 
   340 data member in the list element class.
   341 
   342 If this default constructor is used, then call the SetOffset() function of 
   343 the base class to ensure that the offset value is set correctly.
   344 
   345 @see TSglQueBase::SetOffset
   346 */
   347 	{}
   348 
   349 
   350 
   351 
   352 template <class T>
   353 inline TSglQue<T>::TSglQue(TInt aOffset)
   354 	: TSglQueBase(aOffset)
   355 /**
   356 Constructs an empty list header and sets the offset of the link object to the 
   357 specified value.
   358 
   359 @param aOffset The offset of the link object from the start of a list element. 
   360                 The macro _FOFF can be used to calculate this value.
   361 				
   362 @panic USER 75, if aOffset is not divisible by four.
   363 
   364 @see _FOFF
   365 */
   366 	{}
   367 
   368 
   369 
   370 
   371 template <class T>
   372 inline void TSglQue<T>::AddFirst(T &aRef)
   373 /**
   374 Inserts the specified list element at the front of the singly linked list.
   375 
   376 If the list is not empty, the specified element becomes the first in the list. 
   377 What was previously the first element becomes the second in the list.
   378 
   379 @param aRef The list element to be inserted at the front of the singly linked 
   380             list.
   381 */
   382 	{DoAddFirst(&aRef);}
   383 
   384 
   385 
   386 
   387 template <class T>
   388 inline void TSglQue<T>::AddLast(T &aRef)
   389 /**
   390 Inserts the specified list element at the back of the singly linked list.
   391 
   392 If the list is not empty, the specified element becomes the last in the list. 
   393 What was previously the last element becomes the next to last element in the 
   394 list.
   395 
   396 @param aRef The list element to be inserted at the back of the singly linked 
   397             list.
   398 */
   399 	{DoAddLast(&aRef);}
   400 
   401 
   402 
   403 
   404 template <class T>
   405 inline TBool TSglQue<T>::IsFirst(const T *aPtr) const
   406 /**
   407 Tests whether the specified element is the first in the singly linked list.
   408 
   409 @param aPtr A pointer to the element whose position in the list is to be
   410             checked.
   411 
   412 @return True, if the element is the first in the list; false, otherwise.
   413 */
   414 	{return(PtrAdd(aPtr,iOffset)==(T *)iHead);}
   415 
   416 
   417 
   418 
   419 template <class T>
   420 inline TBool TSglQue<T>::IsLast(const T *aPtr) const
   421 /**
   422 Tests whether the specified element is the last in the singly linked list.
   423 
   424 @param aPtr A pointer to the element whose position in the list is 
   425             to be checked.
   426 
   427 @return True, if the element is the last in the list; false, otherwise.
   428 */
   429 	{return(PtrAdd(aPtr,iOffset)==(T *)iLast);}
   430 
   431 
   432 
   433 
   434 template <class T>
   435 inline T *TSglQue<T>::First() const
   436 /**
   437 Gets a pointer to the first list element in the singly linked list.
   438 
   439 @return A pointer to the first list element in the singly linked list. If 
   440         the list is empty, this pointer is not necessarily NULL and must not
   441 		be assumed to point to a valid object.
   442 */
   443 	{return(PtrSub((T *)iHead,iOffset));}
   444 
   445 
   446 
   447 
   448 template <class T>
   449 inline T *TSglQue<T>::Last() const
   450 /**
   451 Gets a pointer to the last list element in the singly linked list.
   452 
   453 @return A pointer to the last list element in the singly linked list. If the 
   454         list is empty, this pointer is not necessarily NULL and must not be
   455 		assumed to point to a valid object.
   456 */
   457 	{return(PtrSub((T *)iLast,iOffset));}
   458 
   459 
   460 
   461 
   462 template <class T>
   463 inline void TSglQue<T>::Remove(T &aRef)
   464 /**
   465 Removes the specified element from the singly linked list.
   466 
   467 The singly linked list must not be empty.
   468 
   469 @param aRef A list element to be removed from the singly linked list.
   470 
   471 @panic USER 76, if the element to be removed is not in the list
   472 */
   473 	{DoRemove(&aRef);}
   474 
   475 
   476 
   477 
   478 // Class TDblQue
   479 template <class T>
   480 inline TDblQue<T>::TDblQue()
   481 /**
   482 Constructs an empty list header and sets the offset value of the link object 
   483 to zero.
   484 
   485 In practice, never assume that the offset of the link object from the start 
   486 of a list element is zero, even if the link object is declared as the first 
   487 data member in the list element class.
   488 
   489 If this default constructor is used, then call the SetOffset() function of 
   490 the base class to ensure that the offset value is set correctly.
   491 
   492 @see TDblQueBase::SetOffset()
   493 */
   494 	{}
   495 
   496 
   497 
   498 
   499 template <class T>
   500 inline TDblQue<T>::TDblQue(TInt aOffset)
   501 	: TDblQueBase(aOffset)
   502 /**
   503 Constructs an empty list header and sets the offset of the link object to the 
   504 specified value.
   505 
   506 @param aOffset The offset of the link object from the start of a list element. 
   507                 The macro _FOFF can be used to calculate this value.
   508 				
   509 @panic USER 78. if aOffset is not divisble by 4.
   510 				  
   511 @see _FOFF
   512 */
   513 	{}
   514 
   515 
   516 
   517 
   518 template <class T>
   519 inline void TDblQue<T>::AddFirst(T &aRef)
   520 /**
   521 Inserts the specified list element at the front of the doubly linked list.
   522 
   523 If the list is not empty, the specified element becomes the first in the list. 
   524 What was previously the first element becomes the second in the list.
   525 
   526 @param aRef The list element to be inserted at the front of the doubly linked 
   527             list.
   528 */
   529 	{DoAddFirst(&aRef);}
   530 
   531 
   532 
   533 
   534 template <class T>
   535 inline void TDblQue<T>::AddLast(T &aRef)
   536 /**
   537 Inserts the specified list element at the back of the doubly linked list.
   538 
   539 If the list is not empty, the specified element becomes the last in the list. 
   540 What was previously the last element becomes the next to last element in the 
   541 list.
   542 
   543 @param aRef The list element to be inserted at the back of the doubly linked 
   544             list.
   545 */
   546 	{DoAddLast(&aRef);}
   547 
   548 
   549 
   550 
   551 template <class T>
   552 inline TBool TDblQue<T>::IsHead(const T *aPtr) const
   553 /**
   554 Tests whether the end of a list has been reached.
   555 
   556 A doubly linked list is circular; in following the chain of elements in a 
   557 list (e.g. using the iterator operator++ or operator--), the chain eventually 
   558 reaches the end of the list and aPtr corresponds to the header (although it 
   559 will not point to a valid T object).
   560 
   561 @param aPtr The pointer value to be checked. 
   562 
   563 @return True, if the end of the list has been reached. False, if the end of 
   564         the list has not been reached; aPtr points to an element in the list.
   565 */
   566 	{return(PtrAdd(aPtr,iOffset)==(T *)&iHead);}
   567 
   568 
   569 
   570 
   571 template <class T>
   572 inline TBool TDblQue<T>::IsFirst(const T *aPtr) const
   573 /**
   574 Tests whether the specified element is the first in the doubly linked list.
   575 
   576 @param aPtr A pointer to the element whose position in the list is to be checked.
   577 
   578 @return True, if the element is the first in the list; false, otherwise.
   579 */
   580 	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iNext);}
   581 
   582 
   583 
   584 
   585 template <class T>
   586 inline TBool TDblQue<T>::IsLast(const T *aPtr) const
   587 /**
   588 Tests whether the specified element is the last in the doubly linked list.
   589 
   590 @param aPtr A pointer to the element whose position in the list is to be checked.
   591 
   592 @return True, if the element is the last in the list; false, otherwise.
   593 */
   594 	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iPrev);}
   595 
   596 
   597 
   598 
   599 template <class T>
   600 inline T *TDblQue<T>::First() const
   601 /**
   602 Gets a pointer to the first list element in the doubly linked list.
   603 
   604 @return A pointer to the first list element in the doubly linked list. If 
   605         the list is empty, this pointer is not necessarily NULL and must not
   606 		be assumed to point to a valid object.
   607 */
   608 	{
   609 #if defined (_DEBUG)
   610 	__DbgTestEmpty();
   611 #endif
   612     return(PtrSub((T *)iHead.iNext,iOffset));
   613     }
   614 
   615 
   616 
   617 
   618 template <class T>
   619 inline T *TDblQue<T>::Last() const
   620 /**
   621 Gets a pointer to the last list element in the doubly linked list.
   622 
   623 @return A pointer to the last list element in the doubly linked list. If the 
   624         list is empty, this pointer is not necessarily NULL and must not be assumed 
   625         to point to a valid object.
   626 */
   627 	{
   628 #if defined (_DEBUG)
   629 	__DbgTestEmpty();
   630 #endif
   631 	return(PtrSub((T *)iHead.iPrev,iOffset));
   632 	}
   633 
   634 
   635 
   636 
   637 // Class TPriQue
   638 template <class T>
   639 inline TPriQue<T>::TPriQue()
   640 /**
   641 Default constructor.
   642 
   643 Constructs an empty list header and sets the offset value of the link
   644 object to zero.
   645 
   646 In practice, never assume that the offset of the link object from the start
   647 of a list element is zero, even if the link object is declared as the first
   648 data member in the list element class.
   649 
   650 If this default constructor is used, then call the SetOffset() function of
   651 the base class to ensure that the offset value is set correctly.
   652 
   653 @see TDblQueBase::SetOffset
   654 */
   655 	{}
   656 
   657 
   658 
   659 
   660 template <class T>
   661 inline TPriQue<T>::TPriQue(TInt aOffset)
   662 	: TDblQueBase(aOffset)
   663 /**
   664 Constructs an empty list header and sets the offset of the link object
   665 to the specified value.
   666 
   667 @param aOffset The offset of the link object from the start of a list element.
   668                 The macro _FOFF can be used to calculate this value.
   669 				
   670 @panic USER 78 if aOffset is not divisible by four.		  
   671 */
   672 	{}
   673 
   674 
   675 
   676 
   677 template <class T>
   678 inline void TPriQue<T>::Add(T &aRef)
   679 /**
   680 Inserts the specified list element in descending priority order.
   681 
   682 If there is an existing list element with the same priority, then the new
   683 element is added after the existing element.
   684 
   685 @param aRef The list element to be inserted.
   686 */
   687 	{DoAddPriority(&aRef);}
   688 
   689 
   690 
   691 
   692 template <class T>
   693 inline TBool TPriQue<T>::IsHead(const T *aPtr) const
   694 /**
   695 Tests whether the end of a list has been reached.
   696 
   697 A doubly linked list is circular; in following the chain of elements in a list
   698 (e.g. using the iterator operator++ or operator--), the chain eventually
   699 reaches the end of the list and aPtr corresponds to the header (although it
   700 will not point to a valid T object).
   701 
   702 @param aPtr The pointer value to be checked.
   703 
   704 @return True, if the end of the list has been reached. False, if the end of the
   705         list has not been reached; aPtr points to an element in the list.
   706 */
   707 	{return(PtrAdd(aPtr,iOffset)==(T *)&iHead);}
   708 
   709 
   710 
   711 
   712 template <class T>
   713 inline TBool TPriQue<T>::IsFirst(const T *aPtr) const
   714 /**
   715 Tests whether the specified element is the first in the linked list.
   716 
   717 @param aPtr A pointer to the element whose position in the list is to
   718             be checked.
   719 
   720 @return True, if the element is the first in the list; false, otherwise.
   721 */
   722 	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iNext);}
   723 
   724 
   725 
   726 
   727 template <class T>
   728 inline TBool TPriQue<T>::IsLast(const T *aPtr) const
   729 /**
   730 Tests whether the specified element is the last in the linked list.
   731 
   732 @param aPtr A pointer to the element whose position in the list is to
   733             be checked.
   734 
   735 @return True, if the element is the last in the list; false, otherwise.
   736 */
   737 	{return(PtrAdd(aPtr,iOffset)==(T *)iHead.iPrev);}
   738 
   739 
   740 
   741 
   742 template <class T>
   743 inline T *TPriQue<T>::First() const
   744 /**
   745 Gets a pointer to the first list element in the linked list.
   746 
   747 @return A pointer to the first list element in the linked list.
   748         If the list is empty, this pointer is not necessarily NULL and must
   749 		not be assumed to point to a valid object.
   750 */
   751 	{return(PtrSub((T *)iHead.iNext,iOffset));}
   752 
   753 
   754 
   755 
   756 template <class T>
   757 inline T *TPriQue<T>::Last() const
   758 /**
   759 Gets a pointer to the last list element in the linked list.
   760 
   761 @return A pointer to the last list element in the linked list.
   762         If the list is empty, this pointer is not necessarily NULL and must
   763 		not be assumed to point to a valid object.
   764 */
   765 	{return(PtrSub((T *)iHead.iPrev,iOffset));}
   766 
   767 
   768 
   769 
   770 // Class TDeltaQue
   771 template <class T>
   772 inline TDeltaQue<T>::TDeltaQue()
   773 /**
   774 Constructs an empty list header and sets the offset value of the link object 
   775 to zero.
   776 
   777 In practice, never assume that the offset of the link object from the start 
   778 of a list element is zero, even if the link object is declared as the first 
   779 data member in the list element class.
   780 
   781 If this default constructor is used, then call the TDblQueBase::SetOffset() 
   782 function in the base class to ensure that the offset value is set correctly.
   783 
   784 TDeltaQueBase::iFirstDelta is set to NULL.
   785 
   786 @see TDblQueBase::SetOffset
   787 */
   788 	{}
   789 
   790 
   791 
   792 
   793 template <class T>
   794 inline TDeltaQue<T>::TDeltaQue(TInt aOffset)
   795 	: TDeltaQueBase(aOffset)
   796 /**
   797 Constructs an empty list header and sets the offset of the link object to the 
   798 specified value.
   799 
   800 TDeltaQueBase::iFirstDelta is set to NULL.
   801 
   802 @param aOffset The offset of the link object from the start of a list element. 
   803                 The macro _FOFF can be used to calculate this value. 
   804 
   805 @panic USER 78, if aOffset is not divisible by four.
   806 				  
   807 @see _FOFF
   808 */
   809 	{}
   810 
   811 
   812 
   813 
   814 template <class T>
   815 inline void TDeltaQue<T>::Add(T &aRef,TInt aDelta)
   816 /**
   817 Adds the specified list element, having the specified 'distance' from the
   818 nominal zero point, into the list.
   819 
   820 The element is added into the list, the adjacent delta values adjusted, and 
   821 a suitable delta value assigned to the new element, so that the new element 
   822 is at the specified 'distance' from the nominal zero point.
   823 
   824 @param aRef   The list element to be inserted.
   825 @param aDelta The 'distance' from the nominal zero point.
   826 */
   827 	{DoAddDelta(&aRef,aDelta);}
   828 
   829 
   830 
   831 
   832 template <class T>
   833 inline void TDeltaQue<T>::Remove(T &aRef)
   834 /**
   835 Removes the specified list element from the linked list.
   836 
   837 The delta value of the element following the removed element is adjusted
   838 so that its 'distance' from the nominal zero point remains the same.
   839 
   840 @param aRef The list element to be removed.
   841 */
   842 	{DoRemove(&aRef);}
   843 
   844 
   845 
   846 
   847 template <class T>
   848 inline T *TDeltaQue<T>::RemoveFirst()
   849 /**
   850 Removes the first list element from the linked list if its delta value is zero 
   851 or negative.
   852 
   853 @return A pointer to the element removed from the linked list. This is NULL, 
   854         if the first element has a positive delta value.
   855 */
   856 	{return((T *) DoRemoveFirst());}
   857 
   858 
   859 
   860 
   861 // Class TSglQueIter
   862 template <class T>
   863 inline TSglQueIter<T>::TSglQueIter(TSglQueBase &aQue)
   864 	: TSglQueIterBase(aQue)
   865 /**
   866 Constructs the iterator for the specified singly linked list.
   867 
   868 The iterator can be constructed whether or not the list contains any elements.
   869 
   870 If the list does contain elements, the iterator pointer is set to the first one.
   871 
   872 If the list has no elements, the iterator pointer is not set and the conversion 
   873 operator T*() and the post increment operator ++ subsequently return NULL. 
   874 Once elements have been added to the list, use either the
   875 TSglQueIter::Set() function or the TSglQueIterBase::SetToFirst() function to set the 
   876 iterator pointer.
   877 
   878 @param aQue A reference to a singly linked list header.
   879 
   880 @see TSglQueIter::Set
   881 @see TSglQueIterBase::SetToFirst
   882 */
   883 	{}
   884 
   885 
   886 
   887 
   888 template <class T>
   889 inline void TSglQueIter<T>::Set(T &aLink)
   890 /**
   891 Sets the iterator to point to a specific element in the list.
   892 
   893 This function can be used to alter the pointer at any time during the iterator's 
   894 existence. The referenced element must be in the list, otherwise the result 
   895 is undefined.
   896 
   897 @param aLink A reference to the element from where iteration is to continue.
   898 */
   899 	{DoSet(&aLink);}
   900 
   901 
   902 
   903 
   904 template <class T>
   905 inline TSglQueIter<T>::operator T *()
   906 /**
   907 Gets a pointer to the iterator’s current element.
   908 
   909 The operator is normally used implicitly; e.g. some member functions of the
   910 list header class TSglQue require a pointer to an element (of type class T)
   911 as a parameter, but in practice an iterator is often passed instead.
   912 This operator performs the necessary conversion.
   913 */
   914 	{return((T *)DoCurrent());}
   915 
   916 
   917 
   918 
   919 template <class T>
   920 inline T *TSglQueIter<T>::operator++(TInt)
   921 /**
   922 Gets a pointer to the iterator's current element and then sets the iterator 
   923 to point to the next element.
   924 
   925 Repeated use of this operator allows successive elements to be accessed.
   926 
   927 @return A pointer to the current list element, if the iterator points to an 
   928         element. NULL, if the iterator does not point to an element; i.e. the
   929 		iterator pointer has reached the end of the list.
   930 */
   931 	{return((T *)DoPostInc());}
   932 
   933 
   934 
   935 
   936 // Class TDblQueIter
   937 template <class T>
   938 inline TDblQueIter<T>::TDblQueIter(TDblQueBase &aQue)
   939 	: TDblQueIterBase(aQue)
   940 /**
   941 Constructs the iterator for the specified doubly linked list
   942 
   943 The iterator can be constructed whether or not the list contains any elements.
   944 
   945 If the list does contain elements, the iterator pointer is set to the first one.
   946 
   947 If the list has no elements, the iterator pointer is not set and the conversion 
   948 operator T*(), the post increment operator++() and the post decrement operator 
   949 --() subsequently return NULL. Once elements have been added to the list, use 
   950 either the TDblQueIter::Set() function, the TDblQueIterBase::SetToFirst() 
   951 function or the TDblQueIterBase::SetToLast() function to set the iterator 
   952 pointer.
   953 
   954 @param aQue A reference to a doubly linked list header.
   955 
   956 @see TDblQueIter::Set
   957 @see TDblQueIterBase::SetToFirst
   958 @see TDblQueIterBase::SetToLast
   959 */
   960 	{}
   961 
   962 
   963 
   964 
   965 template <class T>
   966 inline void TDblQueIter<T>::Set(T &aLink)
   967 /**
   968 Sets the iterator to point to a specific element in the list.
   969 
   970 This function can be used to alter the pointer at any time during
   971 the iterator's existence. The referenced element must be in the list,
   972 otherwise the result is undefined.
   973 
   974 @param aLink A reference to the element from where iteration is to continue.
   975 */
   976 	{DoSet(&aLink);}
   977 
   978 
   979 
   980 
   981 template <class T>
   982 inline TDblQueIter<T>::operator T *()
   983 /**
   984 Gets a pointer to the iterator’s current element.
   985 
   986 The operator is normally used implicitly; e.g. some member functions of the
   987 list header class TDblQue require a pointer to an element (of type class T)
   988 as a parameter but in practice, an iterator is often passed instead.
   989 This operator performs the necessary conversion.
   990 
   991 @return A pointer to the current element, if the iterator points to an element
   992         in the list. NULL, if the iterator does not point to an element;
   993 		i.e. the iterator pointer has previously reached the end of the list
   994 		(see operator++) or the start of the list (see operator--) or
   995 		the list is empty. 
   996 */
   997 	{return((T *) DoCurrent());}
   998 
   999 
  1000 
  1001 
  1002 template <class T>
  1003 inline T *TDblQueIter<T>::operator++(TInt)
  1004 /**
  1005 Gets a pointer to the iterator's current element and then sets the iterator 
  1006 to point to the next element.
  1007 
  1008 Repeated use of this operator allows successive 
  1009 elements to be accessed in the forwards direction.
  1010 
  1011 @return A pointer to the current list element, if the iterator points to an 
  1012         element. NULL, if the iterator does not point to an element;
  1013 		i.e. the iterator pointer has reached the end of the list.
  1014 */
  1015 	{return((T *) DoPostInc());}
  1016 
  1017 
  1018 
  1019 
  1020 template <class T>
  1021 inline T *TDblQueIter<T>::operator--(TInt)
  1022 /**
  1023 Gets a pointer to the iterator's current element and then sets the iterator 
  1024 to point to the previous element.
  1025 
  1026 Repeated use of this operator allows successive 
  1027 elements to be accessed in the backwards direction.
  1028 
  1029 @return A pointer to the current element, if the iterator points to an element. 
  1030         NULL, if the iterator does not point to an element; i.e. the iterator
  1031 		pointer has reached the beginning of the list.
  1032 */
  1033 	{return((T *) DoPostDec());}
  1034 
  1035 
  1036 
  1037 
  1038 // Class TKey
  1039 inline void TKey::SetPtr(const TAny *aPtr)
  1040 /**
  1041 Sets the pointer to a sample element whose key is to be used for comparison.
  1042 	
  1043 The element can be in an existing array or it can be located anywhere in
  1044 addressable memory.
  1045 	
  1046 The At() member function supplied by a derived class must return a pointer 
  1047 to this sample element's key when passed an index value of KIndexPtr.
  1048 	
  1049 SetPtr() must be called before calling User::BinarySearch() because this algorithm 
  1050 uses the key of this sample element as the basis for searching the array.
  1051 	
  1052 @param aPtr A pointer to a sample element.
  1053 */
  1054 	{iPtr=aPtr;}
  1055 
  1056 
  1057 
  1058 
  1059 // Class TCharF
  1060 inline TCharF::TCharF(TUint aChar)
  1061 	: TChar(User::Fold(aChar))
  1062 /**
  1063 Constructs this 'fold character' object and initialises it with the specified 
  1064 value.
  1065 
  1066 @param aChar The initialisation value.
  1067 */
  1068 	{}
  1069 
  1070 
  1071 
  1072 
  1073 inline TCharF::TCharF(const TChar& aChar)
  1074 	: TChar(User::Fold(aChar))
  1075 /**
  1076 Constructs this 'fold character' object and initialises it with the value of 
  1077 the TChar object aChar.
  1078 
  1079 @param aChar The character object to use as the initialisation value.
  1080 */
  1081 	{}
  1082 
  1083 
  1084 
  1085 
  1086 inline TCharF& TCharF::operator=(TUint aChar)
  1087 /**
  1088 Assigns an unsigned integer value to the 'fold character' object.
  1089 
  1090 @param aChar The value to assign.
  1091 
  1092 @return A reference to this 'fold character' object.
  1093 */
  1094 	{SetChar(User::Fold(aChar));return(*this);}
  1095 
  1096 
  1097 
  1098 
  1099 inline TCharF& TCharF::operator=(const TChar& aChar)
  1100 /**
  1101 Assigns the specified character object to this 'fold character' object.
  1102 
  1103 @param aChar The character object to assign.
  1104 
  1105 @return A reference to this 'fold character' object.
  1106 */
  1107 	{SetChar(User::Fold(aChar));return(*this);}
  1108 
  1109 
  1110 
  1111 
  1112 // Class TCharLC
  1113 inline TCharLC::TCharLC(TUint aChar)
  1114 	: TChar(User::LowerCase(aChar))
  1115 /**
  1116 Constructs this 'character to lower case' object and initialises it with the 
  1117 specified value.
  1118 
  1119 @param aChar The initialisation value.
  1120 
  1121 */
  1122 	{}
  1123 
  1124 
  1125 
  1126 
  1127 inline TCharLC::TCharLC(const TChar& aChar)
  1128 	: TChar(User::LowerCase(aChar))
  1129 /**
  1130 Constructs this 'character to lower case' object and initialises it with the 
  1131 value of the TChar object aChar.
  1132 
  1133 @param aChar The character object to use as the initialisation value.
  1134 */
  1135 	{}
  1136 
  1137 
  1138 
  1139 
  1140 inline TCharLC& TCharLC::operator=(TUint aChar)
  1141 /**
  1142 Assigns an unsigned integer value to the 'character to lower case' object.
  1143 
  1144 @param aChar The value to assign.
  1145 
  1146 @return A reference to this 'character to lower case' object.
  1147 */
  1148 	{SetChar(User::LowerCase(aChar));return(*this);}
  1149 
  1150 
  1151 
  1152 
  1153 inline TCharLC& TCharLC::operator=(const TChar& aChar)
  1154 /**
  1155 Assigns the specified character object to this 'character to lower case'
  1156 object.
  1157 
  1158 @param aChar The character object to assign.
  1159 
  1160 @return A reference to this 'character to lower case' object.
  1161 */
  1162 	{SetChar(User::LowerCase(aChar));return(*this);}
  1163 
  1164 
  1165 
  1166 
  1167 // Class TCharUC
  1168 inline TCharUC::TCharUC(TUint aChar)
  1169 	: TChar(User::UpperCase(aChar))
  1170 /**
  1171 Constructs this 'character to upper case' object and initialises it with the 
  1172 specified value.
  1173 
  1174 @param aChar The initialisation value.
  1175 */
  1176 	{}
  1177 
  1178 
  1179 
  1180 
  1181 inline TCharUC::TCharUC(const TChar& aChar)
  1182 	: TChar(User::UpperCase(aChar))
  1183 /**
  1184 Constructs this 'character to upper case' object and initialises it with the 
  1185 value of the TChar object aChar.
  1186 
  1187 @param aChar The character object to use as the initialisation value.
  1188 */
  1189 	{}
  1190 
  1191 
  1192 
  1193 
  1194 inline TCharUC& TCharUC::operator=(TUint aChar)
  1195 /**
  1196 Assigns an unsigned integer value to the 'character to upper case'  object.
  1197 
  1198 @param aChar The value to assign.
  1199 
  1200 @return A reference to this 'character to upper case'  object.
  1201 */
  1202 	{SetChar(User::UpperCase(aChar));return(*this);}
  1203 
  1204 
  1205 
  1206 
  1207 inline TCharUC& TCharUC::operator=(const TChar& aChar)
  1208 /**
  1209 Assigns the specified character object to this 'character to upper case' 
  1210 object.
  1211 
  1212 @param aChar The character object to assign.
  1213 
  1214 @return A reference to this 'character to upper case'  object.
  1215 */
  1216 	{SetChar(User::UpperCase(aChar));return(*this);}
  1217 
  1218 
  1219 
  1220 
  1221 // Class TDateTime
  1222 inline TDateTime::TDateTime()
  1223 	: iYear(1980),
  1224 	  iMonth(EJanuary), 
  1225 	  iDay(1),
  1226 	  iHour(0),
  1227 	  iMinute(0),
  1228 	  iSecond(0),
  1229 	  iMicroSecond(0)
  1230 /**
  1231 Constructs an uninitialised TDateTime object.
  1232 */
  1233 	{}           
  1234 
  1235 
  1236 
  1237 
  1238 inline TInt TDateTime::Year() const
  1239 /**
  1240 Gets the year component of the date/time.
  1241 
  1242 A negative value indicates a BC date.
  1243 
  1244 @return The year
  1245 */
  1246 	{return(iYear);}
  1247 
  1248 
  1249 
  1250 
  1251 inline TMonth TDateTime::Month() const
  1252 /**
  1253 Gets the month component of the date/time.
  1254 
  1255 @return The month. EJanuary to EDecember. Offset from zero, so add one before 
  1256         displaying the month number.
  1257 */
  1258 	{return(iMonth);}
  1259 
  1260 
  1261 
  1262 
  1263 inline TInt TDateTime::Day() const
  1264 /**
  1265 Gets the day component of the date/time.
  1266 
  1267 @return The day. Offset from zero, so add one before displaying the day number.
  1268 */
  1269 	{return(iDay);}
  1270 
  1271 
  1272 
  1273 
  1274 inline TInt TDateTime::Hour() const
  1275 /**
  1276 Gets the hour component of the date/time.
  1277 
  1278 @return The hour.
  1279 */
  1280 	{return(iHour);}
  1281 
  1282 
  1283 
  1284 
  1285 inline TInt TDateTime::Minute() const
  1286 /**
  1287 Gets the minute component of the date/time.
  1288 
  1289 @return The minute.
  1290 */
  1291 	{return(iMinute);}
  1292 
  1293 
  1294 
  1295 
  1296 inline TInt TDateTime::Second() const
  1297 /**
  1298 Gets the second component of the date/time.
  1299 
  1300 @return The second.
  1301 */
  1302 	{return(iSecond);}
  1303 
  1304 
  1305 
  1306 
  1307 inline TInt TDateTime::MicroSecond() const
  1308 /**
  1309 Gets the microsecond component of the date/time.
  1310 
  1311 @return The microsecond.
  1312 */
  1313 	{return(iMicroSecond);}
  1314 
  1315 // Class TTimeIntervalMicroSeconds
  1316 
  1317 
  1318 
  1319 
  1320 inline TTimeIntervalMicroSeconds::TTimeIntervalMicroSeconds()
  1321 /**
  1322 Default constructor.
  1323 
  1324 Constructs an uninitialised object.
  1325 */
  1326 	{}
  1327 
  1328 
  1329 
  1330 
  1331 inline TTimeIntervalMicroSeconds::TTimeIntervalMicroSeconds(const TInt64& aInterval)
  1332 	: iInterval(aInterval)
  1333 /**
  1334 Constructs the object with the specified 64-bit interval value.
  1335 
  1336 @param aInterval The 64-bit interval value with which the object is to be
  1337                  initialised.
  1338 */
  1339 	{}
  1340 
  1341 
  1342 
  1343 
  1344 inline TTimeIntervalMicroSeconds& TTimeIntervalMicroSeconds::operator=(const TInt64& aInterval)
  1345 /**
  1346 Assigns a 64-bit integer value to this object.
  1347 
  1348 @param aInterval The 64-bit integer interval value to be assigned.
  1349 
  1350 @return A reference to this object.
  1351 */
  1352 	{iInterval=aInterval;return(*this);}
  1353 
  1354 
  1355 
  1356 
  1357 inline TBool TTimeIntervalMicroSeconds::operator==(const TTimeIntervalMicroSeconds& aInterval) const
  1358 /**
  1359 Tests whether this TTimeIntervalMicroSeconds object is equal to the
  1360 specified TTimeIntervalMicroSeconds object.
  1361 
  1362 @param aInterval The time interval to be compared with this time interval.
  1363 
  1364 @return True if the two time intervals are equal. False otherwise.
  1365 */
  1366 	{return(iInterval==aInterval.iInterval);}
  1367 
  1368 
  1369 
  1370 
  1371 inline TBool TTimeIntervalMicroSeconds::operator!=(const TTimeIntervalMicroSeconds& aInterval) const
  1372 /**
  1373 Tests whether this TTimeIntervalMicroSeconds object is not equal to the
  1374 specified TTimeIntervalMicroSeconds object.
  1375 
  1376 @param aInterval The time interval to be compared with this time interval.
  1377 
  1378 @return True if the two time intervals are not equal. False otherwise.
  1379 */
  1380 	{return(iInterval!=aInterval.iInterval);}
  1381 
  1382 
  1383 
  1384 
  1385 inline TBool TTimeIntervalMicroSeconds::operator>=(const TTimeIntervalMicroSeconds& aInterval) const
  1386 /**
  1387 Tests whether this TTimeIntervalMicroSeconds object is greater than or equal to the
  1388 specified TTimeIntervalMicroSeconds object.
  1389 
  1390 @param aInterval The time interval to be compared with this time interval.
  1391 
  1392 @return True if this time interval is greater than or equal to the specified
  1393         time interval. False otherwise.
  1394 */
  1395 	{return(iInterval>=aInterval.iInterval);}
  1396 
  1397 
  1398 
  1399 
  1400 inline TBool TTimeIntervalMicroSeconds::operator<=(const TTimeIntervalMicroSeconds& aInterval) const
  1401 /**
  1402 Tests whether this TTimeIntervalMicroSeconds object is less than or equal to the
  1403 specified TTimeIntervalMicroSeconds object.
  1404 
  1405 @param aInterval The time interval to be compared with this time interval.
  1406 
  1407 @return True if this time interval is less than or equal to the specified
  1408         time interval. False otherwise.
  1409 */
  1410 	{return(iInterval<=aInterval.iInterval);}
  1411 
  1412 
  1413 
  1414 
  1415 inline TBool TTimeIntervalMicroSeconds::operator>(const TTimeIntervalMicroSeconds& aInterval) const
  1416 /**
  1417 Tests whether this TTimeIntervalMicroSeconds object is greater than the
  1418 specified TTimeIntervalMicroSeconds object.
  1419 
  1420 @param aInterval The time interval to be compared with this time interval.
  1421 
  1422 @return True if this time interval is greater than the specified
  1423         time interval. False otherwise.
  1424 */
  1425 	{return(iInterval>aInterval.iInterval);}
  1426 
  1427 
  1428 
  1429 
  1430 inline TBool TTimeIntervalMicroSeconds::operator<(const TTimeIntervalMicroSeconds& aInterval) const
  1431 /**
  1432 Tests whether this TTimeIntervalMicroSeconds object is less than the
  1433 specified TTimeIntervalMicroSeconds object.
  1434 
  1435 @param aInterval The time interval to be compared with this time interval.
  1436 
  1437 @return True if this time interval is less than the specified
  1438         time interval. False otherwise.
  1439 */
  1440 	{return(iInterval<aInterval.iInterval);}
  1441 
  1442 
  1443 
  1444 
  1445 inline const TInt64& TTimeIntervalMicroSeconds::Int64() const
  1446 /**
  1447 Gets the time interval as a 64-bit integer value.
  1448 
  1449 @return This 64-bit integer time interval value.
  1450 */
  1451 	{return(iInterval);}
  1452 
  1453 
  1454 
  1455 
  1456 // Class TTimeIntervalBase
  1457 inline TTimeIntervalBase::TTimeIntervalBase()
  1458 /**
  1459 Default constructor.
  1460 */
  1461 	{}
  1462 
  1463 
  1464 
  1465 
  1466 inline TTimeIntervalBase::TTimeIntervalBase(TInt aInterval)
  1467 	: iInterval(aInterval)
  1468 /**
  1469 Constructor taking an interval value.
  1470 
  1471 @param aInterval The interval value.
  1472 */
  1473 	{}
  1474 
  1475 
  1476 
  1477 
  1478 inline TBool TTimeIntervalBase::operator==(TTimeIntervalBase aInterval) const
  1479 /**
  1480 Tests whether this time interval is the same as the specified time interval.
  1481 
  1482 @param aInterval The time interval to be compared with this time interval.
  1483 
  1484 @return True if the two time intervals are equal. False otherwise.
  1485 */
  1486 	{return(iInterval==aInterval.iInterval);}
  1487 
  1488 
  1489 
  1490 
  1491 inline TBool TTimeIntervalBase::operator!=(TTimeIntervalBase aInterval) const
  1492 /**
  1493 Tests whether this time interval is not the same as the specified
  1494 time interval.
  1495 
  1496 @param aInterval The time interval to be compared with this time interval.
  1497 
  1498 @return True if the two time intervals differ. False otherwise.
  1499 */
  1500 	{return(iInterval!=aInterval.iInterval);}
  1501 
  1502 
  1503 
  1504 
  1505 inline TBool TTimeIntervalBase::operator>=(TTimeIntervalBase aInterval) const
  1506 /**
  1507 Tests whether this time interval is greater than or equal to the
  1508 specified time interval.
  1509 
  1510 @param aInterval The time interval to be compared with this time interval.
  1511 
  1512 @return True if this time interval is greater than or equal to the specified
  1513         time interval. False otherwise.
  1514 */
  1515 	{return(iInterval>=aInterval.iInterval);}
  1516 
  1517 
  1518 
  1519 
  1520 inline TBool TTimeIntervalBase::operator<=(TTimeIntervalBase aInterval) const
  1521 /**
  1522 Tests whether this time interval is less than or equal to the
  1523 specified time interval.
  1524 
  1525 @param aInterval The time interval to be compared with this time interval.
  1526 
  1527 @return True if this time interval is less than or equal to the specified
  1528         time interval. False otherwise.
  1529 */
  1530 	{return(iInterval<=aInterval.iInterval);}
  1531 
  1532 
  1533 
  1534 
  1535 inline TBool TTimeIntervalBase::operator>(TTimeIntervalBase aInterval) const
  1536 /**
  1537 Tests whether this time interval is greater than the specified time interval.
  1538 
  1539 @param aInterval The time interval to be compared with this time interval.
  1540 
  1541 @return True if this time interval is greater than the specified
  1542         time interval. False otherwise.
  1543 */
  1544 	{return(iInterval>aInterval.iInterval);}
  1545 
  1546 
  1547 
  1548 
  1549 inline TBool TTimeIntervalBase::operator<(TTimeIntervalBase aInterval) const
  1550 /**
  1551 Tests whether this time interval is less than the specified time interval.
  1552 
  1553 @param aInterval The time interval to be compared with this time interval.
  1554 
  1555 @return True if this time interval is less than the specified
  1556         time interval. False otherwise.
  1557 */
  1558 	{return(iInterval<aInterval.iInterval);}
  1559 
  1560 
  1561 
  1562 
  1563 inline TInt TTimeIntervalBase::Int() const
  1564 /** 
  1565 Gets the time interval as a 32 bit integer.
  1566 
  1567 @return The time interval as a 32 bit integer.
  1568 */
  1569 	{return(iInterval);}
  1570 
  1571 
  1572 
  1573 
  1574 // Class TTimeIntervalMicroSeconds32
  1575 inline TTimeIntervalMicroSeconds32::TTimeIntervalMicroSeconds32()
  1576 /**
  1577 Default constructor.
  1578 
  1579 Constructs an uninitialised object.
  1580 */
  1581 	{}
  1582 
  1583 
  1584 
  1585 
  1586 inline TTimeIntervalMicroSeconds32::TTimeIntervalMicroSeconds32(TInt aInterval)
  1587     : TTimeIntervalBase(aInterval)
  1588 /**
  1589 Constructs the object with the specified interval value.
  1590 
  1591 @param aInterval The interval value with which the object is to be initialised.
  1592 */
  1593 	{}
  1594 
  1595 
  1596 
  1597 
  1598 inline TTimeIntervalMicroSeconds32& TTimeIntervalMicroSeconds32::operator=(TInt aInterval)
  1599 /**
  1600 Assigns a value to this object.
  1601 
  1602 @param aInterval The interval value to be assigned.
  1603 
  1604 @return A reference to this object.
  1605 */
  1606 	{iInterval=aInterval;return(*this);}
  1607 
  1608 
  1609 
  1610 
  1611 // Class TTimeIntervalSeconds
  1612 inline TTimeIntervalSeconds::TTimeIntervalSeconds()
  1613 /**
  1614 Default constructor.
  1615 
  1616 Constructs an uninitialised object.
  1617 */
  1618 	{}
  1619 
  1620 
  1621 
  1622 
  1623 inline TTimeIntervalSeconds::TTimeIntervalSeconds(TInt aInterval)
  1624 	: TTimeIntervalBase(aInterval)
  1625 /**
  1626 Constructs the object with the specified interval value.
  1627 
  1628 @param aInterval The interval value with which the object is to be initialised.
  1629 */
  1630 	{}
  1631 
  1632 
  1633 
  1634 
  1635 inline TTimeIntervalSeconds& TTimeIntervalSeconds::operator=(TInt aInterval)
  1636 /**
  1637 Assigns a value to this object.
  1638 
  1639 @param aInterval The interval value to be assigned.
  1640 
  1641 @return A reference to this object.
  1642 */
  1643 	{iInterval=aInterval;return(*this);}
  1644 
  1645 
  1646 
  1647 
  1648 // Class TTimeIntervalMinutes
  1649 inline TTimeIntervalMinutes::TTimeIntervalMinutes()
  1650 /**
  1651 Default constructor.
  1652 
  1653 Constructs an uninitialised object.
  1654 */
  1655 	{}
  1656 
  1657 
  1658 
  1659 
  1660 inline TTimeIntervalMinutes::TTimeIntervalMinutes(TInt aInterval)
  1661 	: TTimeIntervalBase(aInterval)
  1662 /**
  1663 Constructs the object with the specified interval value.
  1664 
  1665 @param aInterval The interval value with which the object is to be initialised.
  1666 */
  1667 	{}
  1668 
  1669 
  1670 
  1671 
  1672 inline TTimeIntervalMinutes& TTimeIntervalMinutes::operator=(TInt aInterval)
  1673 /**
  1674 Assigns a value to this object.
  1675 
  1676 @param aInterval The interval value to be assigned.
  1677 
  1678 @return A reference to this object.
  1679 */
  1680 	{iInterval=aInterval;return(*this);}
  1681 
  1682 
  1683 
  1684 
  1685 // Class TTimeIntervalHours
  1686 inline TTimeIntervalHours::TTimeIntervalHours()
  1687 /**
  1688 Default constructor.
  1689 
  1690 Constructs an uninitialised object.
  1691 */
  1692 	{}
  1693 inline TTimeIntervalHours::TTimeIntervalHours(TInt aInterval)
  1694 	: TTimeIntervalBase(aInterval)
  1695 /**
  1696 Constructs the object with the specified interval value.
  1697 
  1698 @param aInterval The interval value with which the object is to be initialised.
  1699 */
  1700 	{}
  1701 
  1702 
  1703 
  1704 
  1705 inline TTimeIntervalHours& TTimeIntervalHours::operator=(TInt aInterval)
  1706 /**
  1707 Assigns a value to this object.
  1708 
  1709 @param aInterval The interval value to be assigned.
  1710 
  1711 @return A reference to this object.
  1712 */
  1713 	{iInterval=aInterval;return(*this);}
  1714 
  1715 
  1716 
  1717 
  1718 // Class TTimeIntervalDays
  1719 inline TTimeIntervalDays::TTimeIntervalDays()
  1720 /**
  1721 Default constructor.
  1722 
  1723 Constructs an uninitialised object.
  1724 */
  1725 	{}
  1726 
  1727 
  1728 
  1729 
  1730 inline TTimeIntervalDays::TTimeIntervalDays(TInt aInterval)
  1731 	: TTimeIntervalBase(aInterval)
  1732 /**
  1733 Constructs the object with the specified interval value.
  1734 
  1735 @param aInterval The interval value with which the object is to be initialised.
  1736 */
  1737 	{}
  1738 
  1739 
  1740 
  1741 
  1742 inline TTimeIntervalDays& TTimeIntervalDays::operator=(TInt aInterval)
  1743 /**
  1744 Assigns a value to this object.
  1745 
  1746 @param aInterval The interval value to be assigned.
  1747 
  1748 @return A reference to this object.
  1749 */
  1750 	{iInterval=aInterval;return(*this);}
  1751 
  1752 
  1753 
  1754 
  1755 // Class TTimeIntervalMonths
  1756 inline TTimeIntervalMonths::TTimeIntervalMonths()
  1757 /**
  1758 Default constructor.
  1759 
  1760 Constructs an uninitialised object.
  1761 */
  1762 	{}
  1763 
  1764 
  1765 
  1766 
  1767 inline TTimeIntervalMonths::TTimeIntervalMonths(TInt aInterval)
  1768 	: TTimeIntervalBase(aInterval)
  1769 /**
  1770 Constructs the object with the specified interval value.
  1771 
  1772 @param aInterval The interval value with which the object is to be initialised.
  1773 */
  1774 	{}
  1775 
  1776 
  1777 
  1778 
  1779 inline TTimeIntervalMonths& TTimeIntervalMonths::operator=(TInt aInterval)
  1780 /**
  1781 Assigns a value to this object.
  1782 
  1783 @param aInterval The interval value to be assigned.
  1784 
  1785 @return A reference to this object.
  1786 */
  1787 	{iInterval=aInterval;return(*this);}
  1788 
  1789 
  1790 
  1791 
  1792 // Class TTimeIntervalYears
  1793 inline TTimeIntervalYears::TTimeIntervalYears()
  1794 /**
  1795 Default constructor.
  1796 
  1797 Constructs an uninitialised object.
  1798 */
  1799 	{}
  1800 
  1801 
  1802 
  1803 
  1804 inline TTimeIntervalYears::TTimeIntervalYears(TInt aInterval)
  1805 	: TTimeIntervalBase(aInterval)
  1806 /**
  1807 Constructs the object with the specified interval value.
  1808 
  1809 @param aInterval The interval value with which the object is to be initialised.
  1810 */
  1811 	{}
  1812 
  1813 
  1814 
  1815 
  1816 inline TTimeIntervalYears& TTimeIntervalYears::operator=(TInt aInterval)
  1817 /**
  1818 Assigns a value to this object.
  1819 
  1820 @param aInterval The interval value to be assigned.
  1821 
  1822 @return A reference to this object.
  1823 */
  1824 	{iInterval=aInterval;return(*this);}
  1825 
  1826 
  1827 
  1828 
  1829 // Class TTime
  1830 inline TTime::TTime()
  1831 /**
  1832 Default constructor.
  1833 
  1834 The object is initialised to an arbitrary value.
  1835 */
  1836 	{}
  1837 
  1838 
  1839 
  1840 
  1841 inline TTime::TTime(const TInt64& aTime)
  1842 	: iTime(aTime)
  1843 /**
  1844 Constructs the object from a 64-bit microsecond value.
  1845 
  1846 @param aTime Microsecond value to which to initialise the TTime object.
  1847 */
  1848 	{}
  1849 
  1850 
  1851 
  1852 
  1853 inline TTime &TTime::operator=(const TInt64& aTime)
  1854 /**
  1855 Assigns a value contained in a 64-bit integer to this TTime object.
  1856 
  1857 @param aTime Microsecond value which to assign to the TTime object.
  1858 
  1859 @return This TTime object.
  1860 */
  1861 	{iTime=aTime;return(*this);}
  1862 
  1863 
  1864 
  1865 
  1866 inline TBool TTime::operator==(TTime aTime) const
  1867 /**
  1868 Tests whether two date/times are equal.
  1869 
  1870 @param aTime The time to be compared with this TTime.
  1871 
  1872 @return True if the two TTimes are equal. False if not.
  1873 */
  1874 	{return(iTime==aTime.iTime);}
  1875 
  1876 
  1877 
  1878 
  1879 inline TBool TTime::operator!=(TTime aTime) const
  1880 /**
  1881 Tests whether two date/times are not equal.
  1882 
  1883 @param aTime The date/time to be compared with this TTime.
  1884 
  1885 @return True if the two TTimes are different. False if the same.
  1886 */
  1887 	{return(iTime!=aTime.iTime);}
  1888 
  1889 
  1890 
  1891 
  1892 inline TBool TTime::operator>=(TTime aTime) const
  1893 /**
  1894 Tests whether this date/time is later than or the same as the
  1895 specified date/time.
  1896 
  1897 @param aTime The date/time to be compared with this date/time.
  1898 
  1899 @return True if this date/time is later than or the same as the
  1900         specified date/time. False otherwise.
  1901 */
  1902 	{return(iTime>=aTime.iTime);}
  1903 
  1904 
  1905 
  1906 
  1907 inline TBool TTime::operator<=(TTime aTime) const
  1908 /**
  1909 Tests whether this date/time is earlier than or the same as the
  1910 specified date/time.
  1911 
  1912 @param aTime The date/time to be compared with this date/time.
  1913 
  1914 @return True if this date/time is earlier than or the same as the
  1915         specified date/time. False otherwise.
  1916 */
  1917 	{return(iTime<=aTime.iTime);}
  1918 
  1919 
  1920 
  1921 
  1922 inline TBool TTime::operator>(TTime aTime) const
  1923 /**
  1924 Tests whether this date/time is later than the specified date/time.
  1925 
  1926 @param aTime The date/time to be compared with this date/time.
  1927 
  1928 @return True if this date/time is later than the specified date/time.
  1929         False otherwise.
  1930 */
  1931 	{return(iTime>aTime.iTime);}
  1932 
  1933 
  1934 
  1935 
  1936 inline TBool TTime::operator<(TTime aTime) const
  1937 /**
  1938 Tests whether this date/time is earlier than the specified date/time.
  1939 
  1940 @param aTime The date/time to be compared with this date/time.
  1941 
  1942 @return True if this date/time is earlier than the specified date/time.
  1943         False otherwise.
  1944 */
  1945 	{return(iTime<aTime.iTime);}
  1946 
  1947 
  1948 
  1949 
  1950 inline const TInt64& TTime::Int64() const
  1951 /**
  1952 Gets the 64 bit integer representation of this TTime obect.
  1953 
  1954 @return The 64 bit integer representation.
  1955 */
  1956 	{return(iTime);}
  1957 
  1958 
  1959 
  1960 
  1961 // Class TLexMark8
  1962 inline TLexMark8::TLexMark8()
  1963 	: iPtr(NULL)
  1964 /**
  1965 Default constructor.
  1966 */
  1967 	{}
  1968 
  1969 
  1970 
  1971 
  1972 inline TLexMark8::TLexMark8(const TUint8 *aString) 
  1973 	: iPtr(aString)
  1974 	{}
  1975 
  1976 
  1977 
  1978 
  1979 // Class TLex8
  1980 inline TLex8::TLex8(const TUint8 *aString)
  1981 /**
  1982 Constructs the object with a pointer to a string.
  1983 
  1984 The extraction mark and next character members are initialised to point
  1985 to the start of the string.
  1986 
  1987 @param aString String to be assigned.
  1988 */
  1989 	{Assign(TPtrC8(aString));}
  1990 
  1991 
  1992 
  1993 
  1994 inline TLex8::TLex8(const TDesC8 &aDes)
  1995 /**
  1996 Constructs the object with a descriptor.
  1997 
  1998 The extraction mark and next character 
  1999 members are initialised to point to the start of the string.
  2000 
  2001 @param aDes Descriptor to be assigned by reference.
  2002 */
  2003 	{Assign(aDes);}
  2004 
  2005 
  2006 
  2007 
  2008 inline TLex8& TLex8::operator=(const TUint8* aString)
  2009 /**
  2010 Allows strings to be assigned to a TLex8.
  2011 
  2012 @param aString String to be assigned to the TLex8. 
  2013 
  2014 @return TLex8 descriptor.
  2015 */
  2016 	{Assign(TPtrC8(aString));return(*this);}
  2017 
  2018 
  2019 
  2020 
  2021 inline TLex8& TLex8::operator=(const TDesC8& aBuf)
  2022 /**
  2023 Allows descriptors to be assigned to a TLex8.
  2024 
  2025 @param aBuf Descriptor to be assigned to the TLex8.
  2026 
  2027 @return TLex8 descriptor.
  2028 */
  2029 	{Assign(aBuf);return(*this);}
  2030 
  2031 
  2032 
  2033 
  2034 inline TBool TLex8::Eos() const
  2035 /**
  2036 Tests whether the next character position is at the end of the string.
  2037 
  2038 @return True if at end of string, false otherwise.
  2039 */
  2040 	{return(iNext==iEnd);}
  2041 
  2042 
  2043 
  2044 
  2045 inline void TLex8::Mark()
  2046 /**
  2047 Sets the TLex8's next character position to its extraction mark.
  2048 */
  2049 	{Mark(iMark);}
  2050 
  2051 
  2052 
  2053 
  2054 inline void TLex8::Mark(TLexMark8& aMark) const
  2055 /**
  2056 Sets the supplied extraction mark to the TLex8's next character position.
  2057 
  2058 @param aMark On return, this is set to the next character position.
  2059 */
  2060 	{aMark.iPtr=iNext;}
  2061 
  2062 
  2063 
  2064 
  2065 inline void TLex8::UnGetToMark()
  2066 /**
  2067 Sets the next character position to the current extraction mark position.
  2068 
  2069 @panic USER 63, if the extraction mark is before the start or beyond the end
  2070        of the string.
  2071 */
  2072     {UnGetToMark(iMark);}
  2073 
  2074 
  2075 
  2076 
  2077 inline void TLex8::SkipAndMark(TInt aNumber)
  2078 /**
  2079 Moves the next character position a specified number of characters. 
  2080   
  2081 @param aNumber Number of characters to skip.
  2082 
  2083 @panic USER 61, if the skip moves the next character position either to before
  2084        the start or beyond the end of the string.
  2085 */
  2086     {SkipAndMark(aNumber,iMark);}
  2087 
  2088 
  2089 
  2090 
  2091 inline void TLex8::SkipSpaceAndMark()
  2092 /**
  2093 Moves the next character position past any white space and copies it to the 
  2094 TLex8's extraction mark.
  2095 
  2096 Stops if at the end of the string.
  2097 */
  2098     {SkipSpaceAndMark(iMark);}
  2099 
  2100 
  2101 
  2102 
  2103 inline TInt TLex8::TokenLength() const
  2104 /**
  2105 Gets the length of the token.
  2106 
  2107 This is the difference between the next character 
  2108 position and the extraction mark.
  2109 
  2110 @return Length of the token.
  2111 */
  2112 	{return(iNext-iMark.iPtr);}
  2113 
  2114 
  2115 
  2116 
  2117 inline TInt TLex8::MarkedOffset() const
  2118 /**
  2119 Gets the offset of the extraction mark from the start of the string.
  2120 
  2121 @return The offset of the extraction mark.
  2122 */
  2123     {return(iMark.iPtr-iBuf);}
  2124 
  2125 
  2126 
  2127 
  2128 inline TInt TLex8::Val(TInt &aVal)
  2129 /**
  2130 Parses the string to extract a signed integer.
  2131 
  2132 @param aVal On return, contains the extracted integer.
  2133 
  2134 @return KErrNone if successful.
  2135         KErrGeneral if the next character position is initially at the end of the string
  2136         or no valid characters found initially.
  2137         KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
  2138         If error codes KErrGeneral or KErrOverflow are returned, the object's
  2139         members are left unaltered.
  2140 */
  2141 	{return(Val((TInt32&)aVal));}
  2142 
  2143 
  2144 
  2145 
  2146 inline TInt TLex8::Val(TUint &aVal,TRadix aRadix)
  2147 /**
  2148 Parses the string to extract an unsigned integer, using the specified radix.
  2149 
  2150 @param aVal   On return, contains the extracted integer.
  2151 @param aRadix The radix to use when converting the number. The default radix
  2152               for this function overload is decimal.
  2153 
  2154 @return KErrNone if successful.
  2155         KErrGeneral if the next character position is initially at the end of the string
  2156         or no valid characters found initially.
  2157         KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
  2158         If error codes KErrGeneral or KErrOverflow are returned, the object's
  2159         members are left unaltered.
  2160 */
  2161 	{return(Val((TUint32&)aVal,aRadix));}
  2162 
  2163 
  2164 
  2165 
  2166 inline void TLex8::Assign(const TLex8& aLex)
  2167 /**
  2168 Assigns a string to this object from another TLex8 object.
  2169 
  2170 @param aLex The object to be assigned.
  2171 */
  2172 	{new(this) TLex8(aLex);}
  2173 
  2174 
  2175 
  2176 
  2177 // Class TLexMark16
  2178 inline TLexMark16::TLexMark16()
  2179 	: iPtr(NULL)
  2180 /**
  2181 Default constructor.
  2182 */
  2183 	{}
  2184 
  2185 
  2186 
  2187 
  2188 inline TLexMark16::TLexMark16(const TUint16 *aString) 
  2189 	: iPtr(aString)
  2190 	{}
  2191 
  2192 
  2193 
  2194 
  2195 // Class TLex16
  2196 inline TLex16::TLex16(const TUint16 *aString)
  2197 /**
  2198 Constructs the object with a pointer to a string.
  2199 
  2200 The extraction mark and next character members are initialised to point
  2201 to the start of the string.
  2202 
  2203 @param aString String to be assigned.
  2204 */
  2205 	{Assign(TPtrC16(aString));}
  2206 
  2207 
  2208 
  2209 
  2210 inline TLex16::TLex16(const TDesC16 &aDes)
  2211 /**
  2212 Constructs the object with a descriptor.
  2213 
  2214 The extraction mark and next character 
  2215 members are initialised to point to the start of the string.
  2216 
  2217 @param aDes Descriptor to be assigned by reference.
  2218 */
  2219 	{Assign(aDes);}
  2220 
  2221 
  2222 
  2223 inline TLex16& TLex16::operator=(const TUint16* aString)
  2224 /** 
  2225 Allows strings to be assigned to a TLex16.
  2226 
  2227 @param aString String to be assigned to the TLex16. 
  2228 
  2229 @return TLex16 descriptor.
  2230 */
  2231 	{Assign(TPtrC16(aString));return(*this);}
  2232 
  2233 
  2234 
  2235 
  2236 inline TLex16& TLex16::operator=(const TDesC16& aBuf)
  2237 /**
  2238 Allows descriptors to be assigned to a TLex16.
  2239 
  2240 @param aBuf Descriptor to be assigned to the TLex16.
  2241 
  2242 @return TLex8 descriptor.
  2243 */
  2244 	{Assign(aBuf);return(*this);}
  2245 
  2246 
  2247 
  2248 
  2249 inline TBool TLex16::Eos() const
  2250 /**
  2251 Tests whether the next character position is at the end of the string.
  2252 
  2253 @return True if at end of string, false otherwise.
  2254 */
  2255 	{return(iNext==iEnd);}
  2256 
  2257 
  2258 
  2259 
  2260 inline void TLex16::Mark(TLexMark16& aMark) const
  2261 /**
  2262 Sets the supplied extraction mark to the TLex16's next character position.
  2263 
  2264 @param aMark On return, set to the next character position.
  2265 */
  2266 	{aMark.iPtr=iNext;}
  2267 
  2268 
  2269 
  2270 
  2271 inline void TLex16::Mark()
  2272 /**
  2273 Sets the TLex16's next character position to its extraction mark.
  2274 */
  2275 	{iMark.iPtr=iNext;}
  2276 
  2277 
  2278 
  2279 
  2280 inline void TLex16::UnGetToMark()
  2281 /**
  2282 Sets the next character position to the current extraction mark position.
  2283 
  2284 @panic USER 68, if the specified mark is before the start or beyond the end
  2285        of the string.
  2286 */
  2287     {UnGetToMark(iMark);}
  2288 
  2289 
  2290 
  2291 
  2292 inline void TLex16::SkipAndMark(TInt aNumber)
  2293 /**
  2294 Moves the next character position a specified number of characters.
  2295 
  2296 @param aNumber Number of characters to skip. 
  2297 
  2298 @panic USER 68, if the skip moves the next character position either to before
  2299        the start or beyond the end of the string.
  2300 */
  2301     {SkipAndMark(aNumber,iMark);}
  2302 
  2303 
  2304 
  2305 
  2306 inline void TLex16::SkipSpaceAndMark()
  2307 /**
  2308 Moves the next character position past any white space and copies it to the 
  2309 TLex16's extraction mark.
  2310 
  2311 Stops if at the end of the string.
  2312 */
  2313     {SkipSpaceAndMark(iMark);}
  2314 
  2315 
  2316 
  2317 
  2318 inline TInt TLex16::TokenLength() const
  2319 /**
  2320 Gets the length of the token.
  2321 
  2322 This is the difference between the next character 
  2323 position and the extraction mark.
  2324 
  2325 @return Length of the token.
  2326 */
  2327 	{return(iNext-iMark.iPtr);}
  2328 
  2329 
  2330 
  2331 
  2332 inline TInt TLex16::MarkedOffset() const
  2333 /**
  2334 Gets the offset of the extraction mark from the start of the string.
  2335 
  2336 @return The offset of the extraction mark.
  2337 */
  2338     {return(iMark.iPtr-iBuf);}
  2339 
  2340 
  2341 
  2342 
  2343 inline TInt TLex16::Val(TInt &aVal)
  2344 /**
  2345 Parses the string to extract a signed integer.
  2346 
  2347 @param aVal On return, contains the extracted integer.
  2348 
  2349 @return KErrNone if successful.
  2350         KErrGeneral if the next character position is initially at the end of the string
  2351         or no valid characters found initially.
  2352         KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
  2353         If error codes KErrGeneral or KErrOverflow are returned, the object's
  2354         members are left unaltered.
  2355 */
  2356 	{return(Val((TInt32&)aVal));}
  2357 
  2358 
  2359 
  2360 
  2361 inline TInt TLex16::Val(TUint &aVal,TRadix aRadix)
  2362 /**
  2363 Parses the string to extract an unsigned integer, using the specified radix.
  2364 
  2365 @param aVal   On return, contains the extracted integer.
  2366 @param aRadix The radix to use when converting the number. The default radix
  2367               for this function overload is decimal.
  2368 
  2369 @return KErrNone if successful.
  2370         KErrGeneral if the next character position is initially at the end of the string
  2371         or no valid characters found initially.
  2372         KErrOverflow if there is sign overflow, i.e. converted value greater than limit.
  2373         If error codes KErrGeneral or KErrOverflow are returned, the object's
  2374         members are left unaltered.
  2375 */
  2376 	{return(Val((TUint32&)aVal,aRadix));}
  2377 
  2378 
  2379 
  2380 
  2381 inline void TLex16::Assign(const TLex16& aLex)
  2382 /**
  2383 Assigns a string to this object from another TLex16 object.
  2384 
  2385 @param aLex The object to be assigned.
  2386 */
  2387 	{new(this) TLex16(aLex);}
  2388 
  2389 
  2390 
  2391 
  2392 // Class TLocale
  2393 inline TLocale::TLocale(TInt)
  2394 	{}
  2395 
  2396 inline TInt TLocale::RegionCode() const
  2397 	{return(iRegionCode);}
  2398 inline TInt TLocale::CountryCode() const
  2399 /**
  2400 Gets the code which is used to select country-specific locale data.
  2401 
  2402 The country code is the code used as the international dialling prefix.
  2403 This code is also used to identify a country by the dialling software.
  2404 	
  2405 @return The country code.
  2406 */
  2407 	{return(iCountryCode);}
  2408 
  2409 
  2410 
  2411 
  2412 inline void TLocale::SetCountryCode(TInt aCode)
  2413 /**
  2414 Sets the value which is used to select country-specific locale data.
  2415 
  2416 This value can be retrieved by using TLocale::CountryCode(). The country code
  2417 is the code used as the international dialling prefix. This code is also used
  2418 to identify a country by the dialling software.
  2419 	
  2420 @param aCode The country code.
  2421 
  2422 @see TLocale::CountryCode
  2423 */
  2424 	{iCountryCode=aCode;}
  2425 
  2426 
  2427 
  2428 
  2429 inline TTimeIntervalSeconds TLocale::UniversalTimeOffset() const
  2430 /**
  2431 Gets the locale's universal time offset.
  2432 	
  2433 @return Offset in seconds from universal time. Time zones east of universal 
  2434 	    time have positive offsets. Time zones west of universal time have negative 
  2435 	    offsets.
  2436 
  2437 @deprecated Use User::UTCOffset to get the current offset inclusive of daylight
  2438 			savings time. This function returns the same value, for compatibility.
  2439 */
  2440 	{return(iUniversalTimeOffset);}
  2441 
  2442 
  2443 
  2444 
  2445 inline TDateFormat TLocale::DateFormat() const
  2446 /**
  2447 Gets the date format.
  2448 	
  2449 @return The date format.
  2450 */
  2451 	{return(iDateFormat);}
  2452 
  2453 
  2454 
  2455 
  2456 inline void TLocale::SetDateFormat(TDateFormat aFormat)
  2457 /**
  2458 Sets the date format.
  2459 	
  2460 @param aFormat The date format to be used.
  2461 */
  2462 	{iDateFormat=aFormat;}
  2463 
  2464 
  2465 
  2466 
  2467 inline TTimeFormat TLocale::TimeFormat() const
  2468 /**
  2469 Gets the time format (12 or 24 hour).
  2470 	
  2471 @return The time format.
  2472 */
  2473 	{return(iTimeFormat);}
  2474 
  2475 
  2476 
  2477 
  2478 inline void TLocale::SetTimeFormat(TTimeFormat aFormat)
  2479 /**
  2480 Sets the time format (12 or 24 hour).
  2481 	
  2482 @param aFormat The time format.
  2483 */
  2484 	{iTimeFormat=aFormat;}
  2485 
  2486 
  2487 
  2488 
  2489 inline TLocalePos TLocale::CurrencySymbolPosition() const
  2490 /**
  2491 Gets the currency symbol position.
  2492 	
  2493 For negative currency values, this position may be
  2494 reversed using SetNegativeCurrencySymbolOpposite().
  2495 	
  2496 @return The currency symbol position.
  2497 
  2498 @see TLocale::SetNegativeCurrencySymbolOpposite
  2499 */
  2500 	{return(iCurrencySymbolPosition);}
  2501 
  2502 
  2503 
  2504 
  2505 inline void TLocale::SetCurrencySymbolPosition(TLocalePos aPos)
  2506 /**
  2507 Sets the currency symbol position.
  2508 	
  2509 @param aPos The currency symbol position.
  2510 */
  2511 	{iCurrencySymbolPosition=aPos;}
  2512 
  2513 
  2514 
  2515 
  2516 inline TBool TLocale::CurrencySpaceBetween() const
  2517 /**
  2518 Gets whether or not a space is inserted between the currency symbol and the 
  2519 currency value.
  2520 	
  2521 For negative currency values, the space can be removed using SetNegativeLoseSpace().
  2522 	
  2523 @return True if a space is inserted; false if not.
  2524 
  2525 @see TLocale::SetNegativeLoseSpace
  2526 */
  2527 	{return(iCurrencySpaceBetween);}
  2528 
  2529 
  2530 
  2531 
  2532 inline void TLocale::SetCurrencySpaceBetween(TBool aSpace)
  2533 /**
  2534 Sets whether a space is inserted between the currency symbol and the currency 
  2535 amount.
  2536 	
  2537 @param aSpace ETrue if a space is inserted; EFalse if not.
  2538 */
  2539 	{iCurrencySpaceBetween=aSpace;}
  2540 
  2541 
  2542 
  2543 
  2544 inline TInt TLocale::CurrencyDecimalPlaces() const
  2545 /**
  2546 Gets the number of decimal places to which currency values are set.
  2547 	
  2548 @return The number of decimal places.
  2549 */
  2550 	{return(iCurrencyDecimalPlaces);}
  2551 
  2552 
  2553 
  2554 
  2555 inline void TLocale::SetCurrencyDecimalPlaces(TInt aPlaces)
  2556 /**
  2557 Sets the number of decimal places to which currency values should be set.
  2558 	
  2559 @param aPlaces The number of decimal places.
  2560 */
  2561 	{iCurrencyDecimalPlaces=aPlaces;}
  2562 
  2563 
  2564 
  2565 
  2566 inline TBool TLocale::CurrencyNegativeInBrackets() const
  2567 /**
  2568 @deprecated
  2569 
  2570 Gets whether negative currency values are enclosed in brackets rather than 
  2571 being preceded by a minus sign. 
  2572 	
  2573 This is deprecated, use NegativeCurrencyFormat() instead.
  2574 	
  2575 @return True if negative currency is enclosed in brackets and has no minus 
  2576         sign; false if negative currency has a minus sign and is not enclosed
  2577 		in brackets.
  2578 
  2579 @see TLocale::NegativeCurrencyFormat
  2580 */
  2581 	{return((TBool)iNegativeCurrencyFormat);}			
  2582 
  2583 
  2584 
  2585 
  2586 inline void TLocale::SetCurrencyNegativeInBrackets(TBool aBool)
  2587 /** 
  2588 @deprecated
  2589 
  2590 Sets whether negative currency values are enclosed in brackets rather than
  2591 being preceded by a minus sign.
  2592 	
  2593 This is deprecated, use SetNegativeCurrencyFormat() instead.
  2594 	
  2595 @param aBool ETrue, if a negative currency value must be enclosed in brackets 
  2596 	         without a minus sign; EFalse, if a negative currency value is
  2597 			 preceded by a minus sign without any enclosing brackets.
  2598 
  2599 @see TLocale::SetNegativeCurrencyFormat
  2600 */
  2601 	{iNegativeCurrencyFormat=(aBool)?EInBrackets:ELeadingMinusSign;}
  2602 
  2603 
  2604 
  2605 
  2606 inline TBool TLocale::CurrencyTriadsAllowed() const
  2607 /**
  2608 Gets whether triads are allowed in currency values. Triads are groups of 
  2609 three digits separated by the thousands separator.
  2610 	
  2611 @return True if triads are allowed; false if not.
  2612 */
  2613 	{return(iCurrencyTriadsAllowed);}
  2614 
  2615 
  2616 
  2617 
  2618 inline void TLocale::SetCurrencyTriadsAllowed(TBool aBool)
  2619 /**
  2620 Sets whether triads are allowed in currency values.
  2621 	
  2622 @param aBool ETrue if triads are allowed; EFalse if triads not allowed.
  2623 */
  2624 	{iCurrencyTriadsAllowed=aBool;}
  2625 
  2626 
  2627 
  2628 
  2629 inline TChar TLocale::ThousandsSeparator() const
  2630 /**
  2631 Gets the character used to separate groups of three digits to the left of 
  2632 the decimal separator.
  2633 	
  2634 A thousands separator character is only displayed in currency values if currency 
  2635 triads are allowed.
  2636 	
  2637 @return The character used as the thousands separator.
  2638 */
  2639 	{return(iThousandsSeparator);}
  2640 
  2641 
  2642 
  2643 
  2644 inline void TLocale::SetThousandsSeparator(const TChar& aChar)
  2645 /**
  2646 Sets the character to be used to separate groups of three digits to the left 
  2647 of the decimal separator.
  2648 	
  2649 A thousands separator character is only displayed in currency values if currency 
  2650 triads are allowed.
  2651 	
  2652 @param aChar The character to be used as the thousands separator.
  2653 */
  2654 	{iThousandsSeparator=aChar;}
  2655 
  2656 
  2657 
  2658 
  2659 inline TChar TLocale::DecimalSeparator() const
  2660 /**
  2661 Gets the character used to separate a whole number from its fractional part.
  2662 	
  2663 @return The character used as the decimal separator.
  2664 */
  2665 	{return(iDecimalSeparator);}
  2666 
  2667 
  2668 
  2669 
  2670 inline void TLocale::SetDecimalSeparator(const TChar& aChar)
  2671 /**
  2672 Sets the character to be used to separate a whole number from its fractional 
  2673 part.
  2674 	
  2675 @param aChar The character to be used as the decimal separator.
  2676 */
  2677 	{iDecimalSeparator=aChar;}
  2678 
  2679 
  2680 
  2681 
  2682 inline TChar TLocale::DateSeparator(TInt aIndex) const
  2683 /**
  2684 Gets one of the four characters used to separate the day, month and year 
  2685 components of the date.
  2686 	
  2687 If the four separators are represented by S0, S1, S2 and S3 and the three 
  2688 date components are represented by XX, YY and ZZ, then the separators are 
  2689 located: S0 XX S1 YY S2 ZZ S3.
  2690 	
  2691 @param aIndex An index indicating which of the four separators is being accessed. 
  2692               This must be a value between zero and three inclusive.
  2693 
  2694 @return A date separator character as determined by the value of aIndex.
  2695 */
  2696 	{return(iDateSeparator[aIndex]);}
  2697 
  2698 
  2699 
  2700 
  2701 inline void TLocale::SetDateSeparator(const TChar& aChar,TInt aIndex)
  2702 /**
  2703 Sets one of the four characters used to separate the day, month and year
  2704 components of the date.
  2705 	
  2706 If the four separators are represented by S0, S1, S2 and S3 and the three 
  2707 date components are represented by XX, YY and ZZ, then the separators are 
  2708 located: S0 XX S1 YY S2 ZZ S3.
  2709 	
  2710 @param aChar  A date separator character to be used.
  2711 @param aIndex An index indicating which of the four separators is being accessed. 
  2712 	          This must be a value between zero and three inclusive.
  2713 */
  2714 	{__ASSERT_DEBUG(aIndex>=0 && aIndex<KMaxDateSeparators,User::Invariant());
  2715 	iDateSeparator[aIndex]=aChar;}
  2716 
  2717 
  2718 
  2719 
  2720 inline TChar TLocale::TimeSeparator(TInt aIndex) const
  2721 /**
  2722 Gets one of the four characters used to separate the hour, second and minute 
  2723 components of the time.
  2724 	
  2725 If the four separators are represented by S0, S1, S2 and S3 and the three 
  2726 time components are represented by XX, YY and ZZ, then the separators are 
  2727 located: S0 XX S1 YY S2 ZZ S3.
  2728 	
  2729 @param aIndex An index indicating which of the four separators is being
  2730               accessed. This must be a value between zero and three inclusive.
  2731 
  2732 @return A time separator character as determined by the value of aIndex.
  2733 */
  2734 
  2735 	{return(iTimeSeparator[aIndex]);}
  2736 
  2737 
  2738 
  2739 
  2740 inline void TLocale::SetTimeSeparator(const TChar& aChar,TInt aIndex)
  2741 /**
  2742 Sets one of the four characters used to separate the hour, minute and second 
  2743 components of the date.
  2744 	
  2745 If the four separators are represented by S0, S1, S2 and S3 and the three 
  2746 time components are represented by XX, YY and ZZ, then the separators are 
  2747 located: S0 XX S1 YY S2 ZZ S3.
  2748 	
  2749 @param aChar  A time separator character to be used.
  2750 @param aIndex An index indicating which of the four separators is being accessed. 
  2751 	          This must be a value between zero and three inclusive.
  2752 */
  2753 	{__ASSERT_DEBUG(aIndex>=0 && aIndex<KMaxTimeSeparators,User::Invariant());
  2754 	iTimeSeparator[aIndex]=aChar;}
  2755 
  2756 
  2757 
  2758 
  2759 inline TLocalePos TLocale::AmPmSymbolPosition() const
  2760 /**
  2761 Gets the am/pm text position (before or after the time value).
  2762 
  2763 @return The am/pm text position (0 before, 1 after).
  2764 */
  2765 	{return(iAmPmSymbolPosition);}
  2766 
  2767 
  2768 
  2769 
  2770 inline void TLocale::SetAmPmSymbolPosition(TLocalePos aPos)
  2771 /**
  2772 Sets the am/pm text position (before or after the time value).
  2773 	
  2774 @param aSpace The am/pm text position (0 before, 1 after).
  2775 */
  2776 	{iAmPmSymbolPosition=aPos;}
  2777 
  2778 
  2779 
  2780 
  2781 inline TBool TLocale::AmPmSpaceBetween() const
  2782 /**
  2783 Tests whether or not a space is inserted between the time and the preceding 
  2784 or trailing am/pm text.
  2785 	
  2786 @return True if a space is inserted between the time and am/pm text; false 
  2787         if not.
  2788 */
  2789 	{return(iAmPmSpaceBetween);}
  2790 
  2791 
  2792 
  2793 
  2794 inline void TLocale::SetAmPmSpaceBetween(TBool aSpace)
  2795 /**
  2796 Sets whether a space is inserted between the time and the preceding or trailing 
  2797 am/pm text.
  2798 	
  2799 @param aPos ETrue if a space is inserted between the time and am/pm text; 
  2800             EFalse otherwise.
  2801 */
  2802 	{iAmPmSpaceBetween=aSpace;}
  2803 
  2804 
  2805 
  2806 
  2807 inline TUint TLocale::DaylightSaving() const
  2808 /**
  2809 Gets the zones in which daylight saving is in effect.
  2810 	
  2811 If daylight saving is in effect, one hour is added to the time.
  2812 	
  2813 Use TLocale::QueryHomeHasDaylightSavingOn() to find out whether daylight saving 
  2814 is in effect for the home city. This is because the daylight saving setting 
  2815 for the home city may differ from that of the zone in which home is located.
  2816 	
  2817 @return A bit mask in which the three least significant bits are defined, 
  2818         indicating which of the three daylight saving zones are adjusted for
  2819 		daylight saving. These bits represent:
  2820 		Northern (non-European countries in the northern hemisphere),
  2821 		Southern (southern hemisphere),
  2822 		and European.
  2823 
  2824 @see TLocale::QueryHomeHasDaylightSavingOn
  2825 @see TDaylightSavingZone
  2826 
  2827 @deprecated Use the timezone server to retrieve information on timezones and DST.
  2828 			This method will always indicate that DST is inactive, in order to
  2829 			preserve compatibility.
  2830 */
  2831 	{return(iDaylightSaving);} 
  2832 
  2833 
  2834 
  2835 
  2836 inline TBool TLocale::QueryHomeHasDaylightSavingOn() const
  2837 /**
  2838 Tests whether or not daylight saving is set for the home city.
  2839 	
  2840 @return True if home daylight saving is set; false if not.
  2841 
  2842 @deprecated Use the timezone server to retrieve information on timezones and DST.
  2843 			This method will always indicate that DST is inactive, in order to
  2844 			preserve compatibility.
  2845 */
  2846 	{return((iHomeDaylightSavingZone|EDstHome) & iDaylightSaving);}
  2847 
  2848 
  2849 
  2850 
  2851 inline TDaylightSavingZone TLocale::HomeDaylightSavingZone() const
  2852 /**
  2853 Gets the daylight saving zone in which the home city is located.
  2854 	
  2855 @return The daylight saving zone in which the home city is located.
  2856 
  2857 @deprecated Use the timezone server to retrieve information on timezones and DST.
  2858 */
  2859 	{return(iHomeDaylightSavingZone);}
  2860 
  2861 
  2862 
  2863 
  2864 inline TUint TLocale::WorkDays() const
  2865 /**
  2866 Gets a bit mask representing the days of the week which are considered as 
  2867 working days.
  2868 	
  2869 @return A bit mask of seven bits indicating (by being set) which days are 
  2870         workdays. The least significant bit corresponds to Monday, the next bit to 
  2871 	    Tuesday and so on.
  2872 */
  2873 	{return(iWorkDays);}
  2874 
  2875 
  2876 
  2877 
  2878 inline void TLocale::SetWorkDays(TUint aMask)
  2879 /**
  2880 Sets the days of the week which are considered as working days.
  2881 	
  2882 @param aMask A bit mask of seven bits indicating (by being set) which days 
  2883              are workdays. The least significant bit corresponds to Monday, the
  2884 			 next bit is Tuesday and so on.
  2885 */
  2886 	{iWorkDays=aMask;}
  2887 
  2888 
  2889 
  2890 
  2891 inline TDay TLocale::StartOfWeek() const
  2892 /**
  2893 Gets the day which is considered the first day of the week.
  2894 	
  2895 @return The first day of the week.
  2896 */
  2897 	{return(iStartOfWeek);}
  2898 
  2899 
  2900 
  2901 
  2902 inline void TLocale::SetStartOfWeek(TDay aDay)
  2903 /**
  2904 Sets the day which is considered to be the first day of the week.
  2905 	
  2906 @param aDay The first day of the week.
  2907 */
  2908 	{iStartOfWeek=aDay;}
  2909 
  2910 
  2911 
  2912 
  2913 inline TClockFormat TLocale::ClockFormat() const
  2914 /**
  2915 Gets the clock display format.
  2916 	
  2917 @return The clock display format.
  2918 */
  2919 	{return(iClockFormat);}
  2920 
  2921 
  2922 
  2923 
  2924 inline void TLocale::SetClockFormat(TClockFormat aFormat)
  2925 /**
  2926 Sets the clock display format.
  2927 	
  2928 @param aFormat The clock display format.
  2929 */
  2930 	{iClockFormat=aFormat;}
  2931 
  2932 
  2933 
  2934 
  2935 inline TUnitsFormat TLocale::UnitsGeneral() const
  2936 /**
  2937 Gets the general units of measurement.
  2938 
  2939 This function should be used when both short and long distances use the
  2940 same units of measurement.
  2941 	
  2942 @return General units of measurement.
  2943 */
  2944 	{return(iUnitsGeneral);}
  2945 
  2946 
  2947 
  2948 
  2949 inline void TLocale::SetUnitsGeneral(TUnitsFormat aFormat)
  2950 /**
  2951 Sets the general units of measurement.
  2952 This function should be used when both short and long distances use the
  2953 same units of measurement.
  2954 	
  2955 @param aFormat General units of measurement.
  2956 */
  2957 	{iUnitsGeneral=aFormat;}
  2958 
  2959 
  2960 
  2961 
  2962 inline TUnitsFormat TLocale::UnitsDistanceShort() const
  2963 /**
  2964 Gets the units of measurement for short distances.
  2965 
  2966 Short distances are those which would normally be represented by either
  2967 metres and centimetres or feet and inches.
  2968 	
  2969 @return Units of measurement for short distances.
  2970 */
  2971 	{return(iUnitsDistanceShort);}
  2972 
  2973 
  2974 
  2975 
  2976 inline void TLocale::SetUnitsDistanceShort(TUnitsFormat aFormat)
  2977 /**
  2978 Sets the units of measurement for short distances.
  2979 
  2980 Short distances are those which would normally be represented by either
  2981 metres and centimetres or feet and inches.
  2982 	
  2983 @param aFormat Units of measurement for short distances.
  2984 */
  2985 	{iUnitsDistanceShort=aFormat;}
  2986 
  2987 
  2988 
  2989 
  2990 inline TUnitsFormat TLocale::UnitsDistanceLong() const
  2991 /**
  2992 Gets the units of measurement for long distances.
  2993 
  2994 Long distances are those which would normally be represented by either
  2995 miles or kilometres.
  2996 	
  2997 @return Units of measurement for long distances.
  2998 */
  2999 	{return(iUnitsDistanceLong);}
  3000 
  3001 
  3002 
  3003 
  3004 inline void TLocale::SetUnitsDistanceLong(TUnitsFormat aFormat)
  3005 /**
  3006 Sets the units of measurement for long distances.
  3007 
  3008 Long distances are those which would normally be represented by either
  3009 miles or kilometres.
  3010 	
  3011 @param aFormat Units of measurement for long distances.
  3012 */
  3013 	{iUnitsDistanceLong=aFormat;}
  3014 
  3015 
  3016 
  3017 
  3018 inline void TLocale::SetNegativeCurrencyFormat(TLocale::TNegativeCurrencyFormat aNegativeCurrencyFormat)
  3019 /**
  3020 Sets the negative currency format.
  3021 	
  3022 @param aNegativeCurrencyFormat How negative currency values are formatted.
  3023 */
  3024 	{iNegativeCurrencyFormat = aNegativeCurrencyFormat;}
  3025 
  3026 
  3027 
  3028 
  3029 inline TLocale::TNegativeCurrencyFormat TLocale::NegativeCurrencyFormat() const
  3030 /**
  3031 Gets the negative currency format.
  3032 	
  3033 @return How negative currency values are formatted.
  3034 */
  3035 	{return(iNegativeCurrencyFormat);}
  3036 
  3037 
  3038 
  3039 
  3040 inline TBool TLocale::NegativeLoseSpace() const
  3041 /**
  3042 Gets whether negative currency values lose the space between the currency 
  3043 symbol and the value.
  3044 	
  3045 @return True, if negative currency values lose the space between the value 
  3046 	    and the symbol; false, if not.
  3047 */
  3048 	{ 
  3049 	if((iExtraNegativeCurrencyFormatFlags|EFlagNegativeLoseSpace)==iExtraNegativeCurrencyFormatFlags)
  3050 		return ETrue;
  3051 	else
  3052 		return EFalse;
  3053 	}
  3054 
  3055 
  3056 
  3057 
  3058 inline void TLocale::SetNegativeLoseSpace(TBool aBool)
  3059 /**
  3060 Sets whether negative currency values lose the space between the currency symbol 
  3061 and the value.
  3062 	
  3063 @param aBool ETrue to set a flag which indicates that negative currency values 
  3064 	         should lose the space between the value and the symbol. EFalse to unset it.
  3065 */
  3066 	{
  3067 	if(aBool)
  3068 		iExtraNegativeCurrencyFormatFlags |= EFlagNegativeLoseSpace;
  3069 	else
  3070 		iExtraNegativeCurrencyFormatFlags &= ~EFlagNegativeLoseSpace;
  3071 	}
  3072 
  3073 
  3074 
  3075 
  3076 inline TBool TLocale::NegativeCurrencySymbolOpposite() const
  3077 /**
  3078 Gets whether in negative currency values, the position of the currency symbol 
  3079 is set to be the opposite of the position used for non-negative values (before 
  3080 or after the value, as set by SetCurrencySymbolPosition()).
  3081 	
  3082 @return True, if the currency symbol position for negative currency values 
  3083 	    is the opposite of the position set by SetCurrencySymbolPosition();
  3084 		false, otherwise.
  3085 
  3086 @see TLocale::SetCurrencySymbolPosition
  3087 */
  3088 	{
  3089 	if((iExtraNegativeCurrencyFormatFlags|EFlagNegativeCurrencySymbolOpposite)==iExtraNegativeCurrencyFormatFlags)
  3090 		return ETrue;
  3091 	else
  3092 		return EFalse;
  3093 	}
  3094 
  3095 
  3096 
  3097 
  3098 inline void TLocale::SetNegativeCurrencySymbolOpposite(TBool aBool)
  3099 /**
  3100 Sets whether the position of the currency symbol for negative currency values 
  3101 should be the opposite of the position used for non-negative values (before 
  3102 or after the value, as set by SetCurrencySymbolPosition()).
  3103 	
  3104 @param aBool ETrue to set the position of the currency symbol in negative 
  3105              currency values to be the opposite of the position as set
  3106 			 using SetCurrencySymbolPosition(). EFalse to leave the
  3107 			 position unchanged.
  3108 
  3109 @see TLocale::SetCurrencySymbolPosition
  3110 */
  3111 	{
  3112 	if (aBool)
  3113 		iExtraNegativeCurrencyFormatFlags |= EFlagNegativeCurrencySymbolOpposite;
  3114 	else
  3115 		iExtraNegativeCurrencyFormatFlags &= ~EFlagNegativeCurrencySymbolOpposite;
  3116 	}
  3117 
  3118 
  3119 
  3120 
  3121 inline TLanguage TLocale::LanguageDowngrade(TInt aIndex) const
  3122 /**
  3123 Gets the language that is stored at the specified index into the customisable 
  3124 part of the language downgrade path.
  3125 	
  3126 The second, third and fourth languages in the language downgrade path can 
  3127 be customised. These can be enquired using this function. The first language 
  3128 in the path is always the language of the current locale, as returned by User::Language(). 
  3129 	
  3130 The languages in the downgrade path are used in turn by the BaflUtils::NearestLanguageFile() 
  3131 function to find the best matching language-specific version of a language-neutral 
  3132 filename.
  3133 	
  3134 The full language downgrade path can be retrieved using BaflUtils::GetDowngradePath().
  3135 	
  3136 @param aIndex An index into the customisable part of the language downgrade 
  3137               path. Between zero and two inclusive.
  3138 
  3139 @return The language at the specified index.
  3140 
  3141 @see BaflUtils::NearestLanguageFile
  3142 @see BaflUtils::GetDowngradePath
  3143 */
  3144 	{
  3145 	__ASSERT_DEBUG(0 <= aIndex && aIndex < 3, User::Invariant());
  3146 	return static_cast<TLanguage>(iLanguageDowngrade[aIndex]);
  3147 	}
  3148 
  3149 
  3150 
  3151 
  3152 inline void TLocale::SetLanguageDowngrade(TInt aIndex, TLanguage aLanguage)
  3153 /**
  3154 Sets a language in the customisable part of the language downgrade path.
  3155 	
  3156 @param aIndex    An index into the customisable part of the path at which to 
  3157 	             add the language, a value between zero and two.
  3158 @param aLanguage The language to add. ELangNone is considered to be the last 
  3159 	             language in the path, no more will be searched, so can be used
  3160 				 to specify that no language downgrade is required.
  3161 
  3162 @see BaflUtils::NearestLanguageFile
  3163 @see BaflUtils::GetDowngradePath
  3164 */
  3165 	{
  3166 	__ASSERT_DEBUG(0 <= aIndex && aIndex < 3, User::Invariant());
  3167 	iLanguageDowngrade[aIndex] = static_cast<TUint16>(aLanguage);
  3168 	}
  3169 
  3170 
  3171 
  3172 
  3173 /**
  3174 Gets the number mode stored in the locale.
  3175 
  3176 @return The number mode for the locale.
  3177 */
  3178 inline TDigitType TLocale::DigitType() const
  3179 	{ return iDigitType; }
  3180 
  3181 
  3182 
  3183 
  3184 /**
  3185 Sets the number mode for the locale. 
  3186 
  3187 @param aDigitType The number mode to be set.
  3188 */
  3189 inline void TLocale::SetDigitType(TDigitType aDigitType)
  3190 	{ iDigitType=aDigitType; }
  3191 
  3192 
  3193 
  3194 
  3195 /**
  3196 Sets the device time state.
  3197 
  3198 @param aState The device time state. 
  3199 
  3200 @deprecated Use the timezone server to coordinate automatic time adjustment.
  3201 */
  3202 inline void TLocale::SetDeviceTime(TDeviceTimeState aState)
  3203    	{
  3204    	iDeviceTimeState=aState;
  3205    	}
  3206    
  3207 
  3208 /**
  3209 Get the pointer to the TLocale object contained in this extended locale.
  3210 
  3211 @return Pointer to the TLocale object. 
  3212 */
  3213 inline TLocale*	TExtendedLocale::GetLocale()
  3214 	{ return &iLocale; }
  3215 
  3216 
  3217 /**
  3218 Gets the device time state.
  3219 
  3220 @return The device time state.
  3221 
  3222 @deprecated Use the timezone server to coordinate automatic time adjustment.
  3223 */
  3224 inline TLocale::TDeviceTimeState TLocale::DeviceTime() const
  3225    	{
  3226    	return iDeviceTimeState;
  3227    	}
  3228 
  3229 
  3230 // Class TFindSemaphore
  3231 inline TFindSemaphore::TFindSemaphore()
  3232     : TFindHandleBase()
  3233 /**
  3234 Constructs the object with a default match pattern.
  3235 
  3236 The default match pattern, as implemented by the base class, is the single 
  3237 character "*".
  3238 
  3239 A new match pattern can be set after construction by calling the Find() member 
  3240 function of the TFindHandleBase base class.
  3241 
  3242 @see TFindHandleBase::Find
  3243 */
  3244     {}
  3245 
  3246 
  3247 
  3248 
  3249 inline TFindSemaphore::TFindSemaphore(const TDesC &aMatch)
  3250     : TFindHandleBase(aMatch)
  3251 /**
  3252 Constructs this object with the specified match pattern.
  3253 
  3254 A new match pattern can be set after construction by
  3255 calling TFindHandleBase::Find().
  3256 
  3257 Note that after construction, the object contains a copy of the supplied
  3258 match pattern; the source descriptor can, therefore, be safely discarded.
  3259 
  3260 @param aMatch A reference to the descriptor containing the match pattern. 
  3261 
  3262 @see TFindHandleBase::Find
  3263 */
  3264     {}
  3265 
  3266 
  3267 
  3268 
  3269 // Class TFindMutex
  3270 inline TFindMutex::TFindMutex()
  3271     : TFindHandleBase()
  3272 /**
  3273 Constructs this object with a default match pattern.
  3274 
  3275 The default match pattern, as implemented by the base class, is the single 
  3276 character "*".
  3277 
  3278 A new match pattern can be set after construction by calling the Find() member 
  3279 function of the TFindHandleBase base class.
  3280 
  3281 @see TFindHandleBase::Find
  3282 */
  3283     {}
  3284 
  3285 
  3286 
  3287 
  3288 inline TFindMutex::TFindMutex(const TDesC &aMatch)
  3289     : TFindHandleBase(aMatch)
  3290 /**
  3291 Constructs this object with the specified match pattern.
  3292 
  3293 A new match pattern can be set after construction by calling the Find() member 
  3294 function of the TFindHandleBase base class.
  3295 
  3296 After construction, the object contains a copy of the supplied match pattern; 
  3297 the source descriptor can, therefore, be safely discarded.
  3298 
  3299 @param aMatch The match pattern.
  3300 
  3301 @see TFindHandleBase::Find
  3302 */
  3303     {}
  3304 
  3305 
  3306 
  3307 
  3308 // Class TFindChunk
  3309 inline TFindChunk::TFindChunk()
  3310     : TFindHandleBase()
  3311 /**
  3312 Constructs this object with a default match pattern.
  3313 
  3314 The default match pattern, as implemented by the base class, is
  3315 the single character "*".
  3316 
  3317 A new match pattern can be set after construction by
  3318 calling TFindHandleBase::Find().
  3319 
  3320 @see TFindHandleBase
  3321 */
  3322     {}
  3323 
  3324 
  3325 
  3326 
  3327 inline TFindChunk::TFindChunk(const TDesC &aMatch)
  3328     : TFindHandleBase(aMatch)
  3329 /**
  3330 Constructs the object with the specified match pattern.
  3331 
  3332 A new match pattern can be set after construction by
  3333 calling TFindHandleBase::Find().
  3334 
  3335 @param aMatch The match pattern.
  3336 
  3337 @see TFindHandleBase
  3338 */
  3339     {}
  3340 
  3341 
  3342 
  3343 
  3344 // Class TFindThread
  3345 inline TFindThread::TFindThread()
  3346     : TFindHandleBase()
  3347 /**
  3348 Constructs this object with a default match pattern.
  3349 
  3350 The default match pattern, as implemented by the base class,
  3351 is the single character *.
  3352 
  3353 A new match pattern can be set after construction
  3354 by calling TFindHandleBase::Find().
  3355 
  3356 @see TFindHandleBase::Find
  3357 */
  3358     {}
  3359 
  3360 
  3361 
  3362 
  3363 inline TFindThread::TFindThread(const TDesC &aMatch)
  3364     : TFindHandleBase(aMatch)
  3365 /**
  3366 Constructs this object with the specified match pattern.
  3367 
  3368 A new match pattern can be set after construction
  3369 by calling the TFindHandleBase::Find().
  3370 
  3371 @see TFindHandleBase::Find
  3372 */
  3373     {}
  3374 
  3375 
  3376 
  3377 
  3378 // Class TFindProcess
  3379 inline TFindProcess::TFindProcess()
  3380     : TFindHandleBase()
  3381 /**
  3382 Constructs this object with a default match pattern.
  3383 
  3384 The default match pattern, as implemented by the base class,
  3385 is the single character *.
  3386 
  3387 A new match pattern can be set after construction
  3388 by calling TFindHandleBase::Find().
  3389 
  3390 @see TFindHandleBase::Find
  3391 */
  3392     {}
  3393 
  3394 
  3395 
  3396 
  3397 inline TFindProcess::TFindProcess(const TDesC &aMatch)
  3398     : TFindHandleBase(aMatch)
  3399 /**
  3400 Constructs this object with the specified match pattern.
  3401 
  3402 A new match pattern can be set after construction
  3403 by calling the TFindHandleBase::Find().
  3404 
  3405 @see TFindHandleBase::Find
  3406 */
  3407     {}
  3408 
  3409 
  3410 
  3411 
  3412 // Class TFindLogicalDevice
  3413 /**
  3414 Constructs the LDD factory object with a default match pattern.
  3415 
  3416 The default match pattern, as implemented by the base class, is the single 
  3417 character "*".
  3418 
  3419 A new match pattern can be set after construction by calling the Find() member 
  3420 function of the TFindHandleBase base class.
  3421 
  3422 @see TFindHandleBase::Find
  3423 */
  3424 inline TFindLogicalDevice::TFindLogicalDevice()
  3425     : TFindHandleBase()
  3426     {}
  3427 
  3428 /**
  3429 Constructs the LDD factory object with a specified match pattern.
  3430 
  3431 A new match pattern can be set after construction by calling
  3432 TFindHandleBase::Find().
  3433 
  3434 @param aMatch The match pattern.
  3435 
  3436 @see TFindHandleBase::Find
  3437 */
  3438 inline TFindLogicalDevice::TFindLogicalDevice(const TDesC &aMatch)
  3439     : TFindHandleBase(aMatch)
  3440     {}
  3441 
  3442 // Class TFindPhysicalDevice
  3443 /**
  3444 Constructs the PDD factory object with a default match pattern.
  3445 
  3446 The default match pattern, as implemented by the base class, is the single 
  3447 character "*".
  3448 
  3449 A new match pattern can be set after construction by calling the Find() member 
  3450 function of the TFindHandleBase base class.
  3451 
  3452 @see TFindHandleBase::Find
  3453 */
  3454 inline TFindPhysicalDevice::TFindPhysicalDevice()
  3455     : TFindHandleBase()
  3456     {}
  3457 
  3458 /**
  3459 Constructs the PDD factory object with a specified match pattern.
  3460 
  3461 A new match pattern can be set after construction by calling
  3462 TFindHandleBase::Find().
  3463 
  3464 @param aMatch The match pattern.
  3465 
  3466 @see TFindHandleBase::Find
  3467 */
  3468 inline TFindPhysicalDevice::TFindPhysicalDevice(const TDesC &aMatch)
  3469     : TFindHandleBase(aMatch)
  3470     {}
  3471 
  3472 
  3473 
  3474 
  3475 
  3476 // Class TFindServer
  3477 inline TFindServer::TFindServer()
  3478     : TFindHandleBase()
  3479 /**
  3480 Constructs the object with a default match pattern.
  3481 
  3482 The default match pattern, as implemented by the base class, is the single 
  3483 character "*".
  3484 
  3485 A new match pattern can be set after construction by calling the Find() member 
  3486 function of the TFindHandleBase base class.
  3487 
  3488 @see TFindHandleBase::Find
  3489 */
  3490     {}
  3491 
  3492 
  3493 
  3494 
  3495 inline TFindServer::TFindServer(const TDesC &aMatch)
  3496     : TFindHandleBase(aMatch)
  3497 /**
  3498 Constructs the object with a specified match pattern.
  3499 
  3500 A new match pattern can be set after construction by calling
  3501 TFindHandleBase::Find().
  3502 
  3503 @param aMatch The match pattern.
  3504 
  3505 @see TFindHandleBase::Find
  3506 */
  3507     {}
  3508 
  3509 
  3510 
  3511 
  3512 // Class TFindLibrary
  3513 inline TFindLibrary::TFindLibrary()
  3514     : TFindHandleBase()
  3515 /**
  3516 Constructs this object with a default match pattern.
  3517 
  3518 The default match pattern is the single character ‘*’ and is implemented by
  3519 the base class TFindHandleBase.
  3520 */
  3521     {}
  3522 
  3523 
  3524 
  3525 
  3526 inline TFindLibrary::TFindLibrary(const TDesC &aMatch)
  3527     : TFindHandleBase(aMatch)
  3528 /**
  3529 Constructs this object with the specified match pattern.
  3530 
  3531 @param aMatch The descriptor containing the match pattern. 
  3532 */
  3533     {}
  3534 
  3535 
  3536 
  3537 
  3538 // Class RDevice
  3539 /**
  3540 Opens a handle to an LDD factory object found using a TFindLogicalDevice object.
  3541 
  3542 A TFindLogicalDevice object is used to find all LDD factory objects whose full names match 
  3543 a specified pattern.
  3544 
  3545 @param aFind A reference to the object which is used to find the LDD factory object.
  3546 @param aType An enumeration whose enumerators define the ownership of this 
  3547              LDD factory object handle. If not explicitly specified, EOwnerProcess is
  3548 			 taken as default.
  3549 
  3550 @return KErrNone if successful, otherwise one of the other system wide error 
  3551         codes.
  3552 */
  3553 inline TInt RDevice::Open(const TFindLogicalDevice& aFind,TOwnerType aType)
  3554 	{return(RHandleBase::Open(aFind,aType));}
  3555 
  3556 
  3557 
  3558 
  3559 // Class RCriticalSection
  3560 inline TBool RCriticalSection::IsBlocked() const
  3561 /**
  3562 Tests whether the critical section is occupied by any thread.
  3563 
  3564 @return True, if the critical section is occupied by another thread. False, 
  3565         otherwise.
  3566 */
  3567 	{return(iBlocked!=1);}
  3568 
  3569 
  3570 
  3571 
  3572 // Class RMutex
  3573 inline TInt RMutex::Open(const TFindMutex& aFind,TOwnerType aType)
  3574 /**
  3575 Opens a handle to the global mutex found using a TFindMutex object.
  3576 
  3577 A TFindMutex object is used to find all global mutexes whose full names match 
  3578 a specified pattern.
  3579 
  3580 By default, any thread in the process can use this instance of RMutex to access 
  3581 the mutex. However, specifying EOwnerThread as the second parameter to this 
  3582 function, means that only the opening thread can use this instance of RMutex 
  3583 to access the mutex; any other thread in this process that wants to access 
  3584 the mutex must either duplicate the handle or use OpenGlobal() again.
  3585 
  3586 @param aFind A reference to the object which is used to find the mutex.
  3587 @param aType An enumeration whose enumerators define the ownership of this 
  3588              mutex handle. If not explicitly specified, EOwnerProcess is
  3589 			 taken as default. 
  3590 
  3591 @return KErrNone if successful, otherwise one of the other system wide error 
  3592         codes.
  3593 */
  3594 	{return(RHandleBase::Open(aFind,aType));}
  3595 
  3596 
  3597 
  3598 
  3599 // Class RChunk
  3600 inline TInt RChunk::Open(const TFindChunk& aFind,TOwnerType aType)
  3601 /**
  3602 Opens a handle to the global chunk found using a TFindChunk object.
  3603 
  3604 A TFindChunk object is used to find all chunks whose full names match
  3605 a specified pattern. 
  3606 
  3607 By default, ownership of this chunk handle is vested in the current process, 
  3608 but can be vested in the current thread by passing EOwnerThread as the second 
  3609 parameter to this function.
  3610 
  3611 @param aFind A reference to the TFindChunk object used to find the chunk.
  3612 @param aType An enumeration whose enumerators define the ownership of this 
  3613              chunk handle. If not explicitly specified, EOwnerProcess is
  3614 			 taken as default.
  3615 
  3616 @return KErrNone if successful, otherwise another of the system error codes.
  3617 */
  3618 	{return(RHandleBase::Open(aFind,aType));}
  3619 
  3620 
  3621 
  3622 
  3623 inline TBool RChunk::IsReadable() const
  3624 /**
  3625 Tests whether the chunk is mapped into its process address space.
  3626 
  3627 @return True, if the chunk is readable; false, otherwise.
  3628 */
  3629 	{return (Attributes()&RHandleBase::EDirectReadAccess); }
  3630 
  3631 
  3632 
  3633 
  3634 inline TBool RChunk::IsWritable() const
  3635 /**
  3636 Tests whether the chunk mapped into its process address space and is writable.
  3637 
  3638 @return True, if the chunk is writable; false, otherwise.
  3639 */
  3640 	{return (Attributes()&RHandleBase::EDirectWriteAccess); }
  3641 
  3642 
  3643 
  3644 
  3645 // Class TObjectId
  3646 inline TObjectId::TObjectId()
  3647 /**
  3648 Default constructor.
  3649 */
  3650 	{}
  3651 
  3652 
  3653 
  3654 
  3655 inline TObjectId::TObjectId(TUint64 aId)
  3656 	: iId(aId)
  3657 /**
  3658 Constructor taking an unsigned integer value.
  3659 
  3660 @param aId The value of the object id.
  3661 */
  3662 	{}
  3663 
  3664 
  3665 
  3666 
  3667 inline TUint64 TObjectId::Id() const
  3668 /**
  3669 Return the ID as a 64 bit integer
  3670 */
  3671 	{ return iId; }
  3672 
  3673 
  3674 
  3675 
  3676 inline TObjectId::operator TUint() const
  3677 /**
  3678 Conversion operator invoked by the compiler when a TObjectId type is passed
  3679 to a function that is prototyped to take a TUint type.
  3680 
  3681 @see TUint
  3682 */
  3683 	{ return TUint(iId); }
  3684 
  3685 
  3686 
  3687 
  3688 inline TBool TObjectId::operator==(TObjectId aId) const
  3689 /**
  3690 Tests whether this thread Id is equal to the specified Id.
  3691 
  3692 @param aId The thread Id to be compared with this thread Id.
  3693 
  3694 @return True, if the thread Ids are equal; false otherwise.
  3695 */
  3696 	{return iId==aId.iId;}
  3697 
  3698 
  3699 
  3700 
  3701 inline TBool TObjectId::operator!=(TObjectId aId) const
  3702 /**
  3703 Tests whether this thread Id is unequal to the specified thread Id.
  3704 
  3705 @param aId The thread Id to be compared with this thread Id.
  3706 
  3707 @return True, if the thread Ids are unequal; false otherwise.
  3708 */
  3709 	{return iId!=aId.iId;}
  3710 
  3711 
  3712 
  3713 
  3714 // Class TThreadId
  3715 inline TThreadId::TThreadId()
  3716 	: TObjectId()
  3717 /**
  3718 Default constructor.
  3719 */
  3720 	{}
  3721 
  3722 
  3723 
  3724 
  3725 inline TThreadId::TThreadId(TUint64 aId)
  3726 	: TObjectId(aId)
  3727 /**
  3728 Constructor taking an unsigned integer value.
  3729 
  3730 @param aId The value of the thread id.
  3731 */
  3732 	{}
  3733 
  3734 
  3735 
  3736 
  3737 // Class RThread
  3738 inline RThread::RThread()
  3739 	: RHandleBase(KCurrentThreadHandle)
  3740 /**
  3741 Default constructor.
  3742 
  3743 The constructor exists to initialise private data within this handle; it does 
  3744 not create the thread object.
  3745 
  3746 Specifically, it sets the handle-number to the value KCurrentThreadHandle.
  3747 In effect, the constructor creates a default thread handle.
  3748 */
  3749 	{}
  3750 
  3751 
  3752 
  3753 
  3754 inline TInt RThread::Open(const TFindThread& aFind,TOwnerType aType)
  3755 /**
  3756 Opens a handle to the thread found by pattern matching a name.
  3757 
  3758 A TFindThread object is used to find all threads whose full names match a 
  3759 specified pattern. 
  3760 
  3761 By default, ownership of this thread handle is vested in the current process, 
  3762 but can be vested in the current thread by passing EOwnerThread as the second 
  3763 parameter to this function.
  3764 
  3765 @param aFind A reference to the TFindThread object used to find the thread.
  3766 @param aType An enumeration whose enumerators define the ownership of this 
  3767              thread handle. If not explicitly specified, EOwnerProcess is
  3768 			 taken as default.
  3769 
  3770 @return KErrNone if successful, otherwise one of the other system-wide error codes.
  3771 */
  3772 	{return(RHandleBase::Open(aFind,aType));}
  3773 
  3774 
  3775 
  3776 
  3777 #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3778 
  3779 inline TBool RThread::HasCapability(TCapability aCapability, const char* aDiagnostic) const
  3780 	{
  3781 	return DoHasCapability(aCapability, aDiagnostic);
  3782 	}
  3783 
  3784 inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
  3785 	{
  3786 	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
  3787 	}
  3788 
  3789 #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3790 
  3791 // Only available to NULL arguments
  3792 inline TBool RThread::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
  3793 	{
  3794 	return DoHasCapability(aCapability);
  3795 	}
  3796 
  3797 inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
  3798 	{
  3799 	return DoHasCapability(aCapability1, aCapability2);
  3800 	}
  3801 
  3802 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  3803 // For things using KSuppressPlatSecDiagnostic
  3804 inline TBool RThread::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  3805 	{
  3806 	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
  3807 	}
  3808 
  3809 inline TBool RThread::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  3810 	{
  3811 	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
  3812 	}
  3813 
  3814 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  3815 
  3816 #endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3817 
  3818 // Class TProcessId
  3819 inline TProcessId::TProcessId()
  3820 	: TObjectId()
  3821 /**
  3822 Default constructor.
  3823 */
  3824 	{}
  3825 
  3826 
  3827 
  3828 
  3829 inline TProcessId::TProcessId(TUint64 aId)
  3830 	: TObjectId(aId)
  3831 /**
  3832 Constructor taking an unsigned integer value.
  3833 
  3834 @param aId The value of the process id.
  3835 */
  3836 	{}
  3837 
  3838 
  3839 
  3840 
  3841 // Class RProcess
  3842 inline RProcess::RProcess()
  3843 	: RHandleBase(KCurrentProcessHandle)
  3844 /** 
  3845 Default constructor.
  3846 
  3847 The constructor exists to initialise private data within this handle; it does 
  3848 not create the process object.
  3849 
  3850 Specifically, it sets the handle-number to the value KCurrentProcessHandle.
  3851 In effect, the constructor creates a default process handle.
  3852 */
  3853 	{}
  3854 
  3855 
  3856 
  3857 
  3858 inline RProcess::RProcess(TInt aHandle)
  3859 	: RHandleBase(aHandle)
  3860 /**
  3861 Constructor taking a handle number.
  3862 
  3863 @param aHandle The handle number to be used to construct this RProcess handle.
  3864 */
  3865 	{}
  3866 
  3867 
  3868 
  3869 
  3870 inline TInt RProcess::Open(const TFindProcess& aFind,TOwnerType aType)
  3871 /**
  3872 Opens a handle to the process found by pattern matching a name.
  3873 
  3874 A TFindProcess object is used to find all processes whose full names match 
  3875 a specified pattern. 
  3876 
  3877 By default, ownership of this process handle is vested in the current process, 
  3878 but can be vested in the current thread by passing EOwnerThread as the second 
  3879 parameter to this function.
  3880 
  3881 @param aFind A reference to the TFindProcess object used to find the process.
  3882 @param aType An enumeration whose enumerators define the ownership of this 
  3883              process handle. If not explicitly specified, EOwnerProcess is taken
  3884 			 as default.
  3885 
  3886 @return KErrNone if successful, otherwise one of the other system-wide error codes.
  3887 */
  3888 	{return(RHandleBase::Open(aFind,aType));}
  3889 
  3890 
  3891 
  3892 
  3893 #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3894 
  3895 inline TBool RProcess::HasCapability(TCapability aCapability, const char* aDiagnostic) const
  3896 	{
  3897 	return DoHasCapability(aCapability, aDiagnostic);
  3898 	}
  3899 
  3900 inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
  3901 	{
  3902 	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
  3903 	}
  3904 
  3905 #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3906 
  3907 // Only available to NULL arguments
  3908 inline TBool RProcess::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
  3909 	{
  3910 	return DoHasCapability(aCapability);
  3911 	}
  3912 
  3913 inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
  3914 	{
  3915 	return DoHasCapability(aCapability1, aCapability2);
  3916 	}
  3917 
  3918 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  3919 // For things using KSuppressPlatSecDiagnostic
  3920 inline TBool RProcess::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  3921 	{
  3922 	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
  3923 	}
  3924 
  3925 inline TBool RProcess::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  3926 	{
  3927 	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
  3928 	}
  3929 
  3930 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  3931 
  3932 #endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  3933 
  3934 
  3935 
  3936 
  3937 
  3938 // Class RSessionBase
  3939 
  3940 
  3941 /**
  3942 Creates a session with a server, specifying no message slots.
  3943 
  3944 It should be called as part of session initialisation in the derived class.
  3945 
  3946 Message slots are not pre-allocated for the session but are taken from
  3947 a system-wide pool allowing up to 255 asynchronous messages to be outstanding.
  3948 This raises a risk of failure due to lack of memory and, therefore, this mode
  3949 of operation is not viable for sessions that make guarantees about the failure
  3950 modes of asynchonous services.
  3951 
  3952 @param aServer  The name of the server with which a session is to
  3953                 be established.
  3954 @param aVersion The lowest version of the server with which this client
  3955                 is compatible
  3956 
  3957 @return KErrNone if successful, otherwise one of the other system-wide error
  3958         codes.
  3959 */
  3960 inline TInt RSessionBase::CreateSession(const TDesC& aServer,const TVersion& aVersion)
  3961 	{return CreateSession(aServer,aVersion,-1,EIpcSession_Unsharable,NULL,0);}
  3962 
  3963 
  3964 
  3965 
  3966 /**
  3967 Creates a session with a server, specifying no message slots.
  3968 
  3969 It should be called as part of session initialisation in the derived class.
  3970 
  3971 Message slots are not pre-allocated for the session but are taken from
  3972 a system-wide pool allowing up to 255 asynchronous messages to be outstanding.
  3973 This raises a risk of failure due to lack of memory and, therefore, this mode
  3974 of operation is not viable for sessions that make guarantees about the failure
  3975 modes of asynchonous services.
  3976 
  3977 @param aServer  A handle to a server with which a session is to be established.
  3978 @param aVersion The lowest version of the server with which this client
  3979                 is compatible
  3980 
  3981 @return KErrNone if successful, otherwise one of the other system-wide error
  3982         codes.
  3983 */
  3984 inline TInt RSessionBase::CreateSession(RServer2 aServer,const TVersion& aVersion)
  3985 	{return CreateSession(aServer,aVersion,-1,EIpcSession_Unsharable,NULL,0);}
  3986 
  3987 
  3988 
  3989 
  3990 /**
  3991 Issues a blind request to the server with the specified function number,
  3992 and arguments.
  3993 
  3994 A blind request is one where the server does not issue a response
  3995 to the client.
  3996 
  3997 @param aFunction The function number identifying the request.
  3998 @param aArgs     A set of up to 4 arguments and their types to be passed
  3999                  to the server.
  4000 
  4001 @return KErrNone, if the send operation is successful;
  4002         KErrServerTerminated, if the server no longer present;
  4003         KErrServerBusy, if there are no message slots available;
  4004         KErrNoMemory, if there is insufficient memory available.
  4005 
  4006 @panic  USER 72 if the function number is negative.
  4007 */
  4008 inline TInt RSessionBase::Send(TInt aFunction,const TIpcArgs& aArgs) const
  4009 	{return DoSend(aFunction,&aArgs);}
  4010 
  4011 
  4012 
  4013 
  4014 /**
  4015 Issues an asynchronous request to the server with the specified function
  4016 number and arguments. 
  4017 
  4018 The completion status of the request is returned via the request
  4019 status object, aStatus. 
  4020 
  4021 @param aFunction The function number identifying the request.
  4022 @param aArgs     A set of up to 4 arguments and their types to be passed
  4023                  to the server.
  4024 @param aStatus   The request status object used to contain the completion status
  4025                  of the request.
  4026                  
  4027 @panic  USER 72  if the function number is negative.                 
  4028 */
  4029 inline void RSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs,TRequestStatus& aStatus) const
  4030 	{DoSendReceive(aFunction,&aArgs,aStatus);}
  4031 
  4032 
  4033 
  4034 
  4035 /**
  4036 Issues a synchronous request to the server with the specified function number
  4037 and arguments.
  4038 
  4039 @param aFunction The function number identifying the request.
  4040 @param aArgs     A set of up to 4 arguments and their types to be passed
  4041                  to the server.
  4042 
  4043 @return KErrNone, if the send operation is successful;
  4044         KErrServerTerminated, if the server no longer present;
  4045         KErrServerBusy, if there are no message slots available;
  4046         KErrNoMemory, if there is insufficient memory available.
  4047 
  4048 @panic  USER 72  if the function number is negative.
  4049 */
  4050 inline TInt RSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs) const
  4051 	{return DoSendReceive(aFunction,&aArgs);}
  4052 
  4053 
  4054 
  4055 
  4056 /**
  4057 Issues a blind request to the server with the specified function number,
  4058 but with no arguments.
  4059 
  4060 A blind request is one where the server does not issue a response
  4061 to the client.
  4062 
  4063 @param aFunction The function number identifying the request.
  4064 
  4065 @return KErrNone, if the send operation is successful;
  4066         KErrServerTerminated, if the server no longer present;
  4067         KErrServerBusy, if there are no message slots available;
  4068         KErrNoMemory, if there is insufficient memory available.
  4069 
  4070 @panic  USER 72 if the function number is negative.
  4071 */
  4072 inline TInt RSessionBase::Send(TInt aFunction) const
  4073 	{return DoSend(aFunction,NULL);}
  4074 
  4075 
  4076 
  4077 
  4078 /**
  4079 Issues an asynchronous request to the server with the specified function
  4080 number, but with no arguments.
  4081 
  4082 The completion status of the request is returned via the request
  4083 status object, aStatus. 
  4084 
  4085 @param aFunction The function number identifying the request.
  4086 @param aStatus   The request status object used to contain the completion
  4087                  status of the request.
  4088                  
  4089 @panic  USER 72  if the function number is negative.                 
  4090 */
  4091 inline void RSessionBase::SendReceive(TInt aFunction,TRequestStatus& aStatus) const
  4092 	{ DoSendReceive(aFunction,NULL,aStatus);}
  4093 
  4094 
  4095 
  4096 
  4097 /**
  4098 Sets the handle-number of this handle to the specified 
  4099 value.
  4100 
  4101 The function can take a (zero or positive) handle-number,
  4102 or a (negative) error number.
  4103 
  4104 If aHandleOrError represents a handle-number, then the handle-number of this handle
  4105 is set to that value.
  4106 If aHandleOrError represents an error number, then the handle-number of this handle is set to zero
  4107 and the negative value is returned.
  4108 
  4109 @param aHandleOrError A handle-number, if zero or positive; an error value, if negative.
  4110 
  4111 @return KErrNone, if aHandle is a handle-number; the value of aHandleOrError, otherwise.
  4112 */
  4113 inline TInt RSessionBase::SetReturnedHandle(TInt aHandleOrError)
  4114 	{ return RHandleBase::SetReturnedHandle(aHandleOrError);}
  4115 
  4116 
  4117 
  4118 
  4119 inline TInt RSessionBase::SetReturnedHandle(TInt aHandleOrError,RHandleBase& aHandle)
  4120 	{ return RHandleBase::SetReturnedHandle(aHandleOrError,aHandle);}
  4121 /**
  4122 Issues a synchronous request to the server with the specified function number,
  4123 but with no arguments.
  4124 
  4125 @param aFunction The function number identifying the request.
  4126 
  4127 @return KErrNone, if the send operation is successful;
  4128         KErrServerTerminated, if the server no longer present;
  4129         KErrServerBusy, if there are no message slots available;
  4130         KErrNoMemory, if there is insufficient memory available.
  4131 
  4132 @panic  USER 72  if the function number is negative.
  4133 */
  4134 inline TInt RSessionBase::SendReceive(TInt aFunction) const
  4135 	{return DoSendReceive(aFunction,NULL);}
  4136 
  4137 
  4138 
  4139 
  4140 // Class RSubSessionBase
  4141 inline RSubSessionBase::RSubSessionBase()
  4142 	: iSubSessionHandle(0)
  4143 /**
  4144 Default constructor
  4145 */
  4146 	{}
  4147 
  4148 
  4149 
  4150 
  4151 inline TInt RSubSessionBase::SubSessionHandle() const
  4152 /**
  4153 Gets the sub-session handle number.
  4154 
  4155 This number is automatically passed to the server when making requests and is
  4156 used to identify the appropriate server-side sub-session.
  4157 
  4158 @return The sub-session handle number.
  4159 */
  4160 	{return iSubSessionHandle;}
  4161 
  4162 
  4163 
  4164 
  4165 /**
  4166 Creates a new sub-session within an existing session.
  4167 
  4168 @param aSession    The session to which this sub-session will belong.
  4169 @param aFunction   The opcode specifying the requested service; the server should interpret this as a request to create a sub-session.
  4170 @param aArgs       The message arguments.   
  4171 
  4172 @return            KErrNone if successful, otherwise one of the system-wide error codes.
  4173 */
  4174 inline TInt RSubSessionBase::CreateSubSession(const RSessionBase& aSession,TInt aFunction,const TIpcArgs& aArgs)
  4175 	{ return DoCreateSubSession(aSession,aFunction,&aArgs); }
  4176 
  4177 
  4178 
  4179 	
  4180 /**
  4181 Creates a new sub-session within an existing session.
  4182 
  4183 This variant sends no message arguments to the server.
  4184 
  4185 @param aSession    The session to which this sub-session will belong.
  4186 @param aFunction   The opcode specifying the requested service; the server should interpret this as a request to create a sub-session.
  4187 
  4188 @return            KErrNone if successful, otherwise one of the system-wide error codes.
  4189 */
  4190 inline TInt RSubSessionBase::CreateSubSession(const RSessionBase& aSession,TInt aFunction)
  4191 	{ return DoCreateSubSession(aSession,aFunction,NULL); }
  4192 
  4193 
  4194 
  4195 	
  4196 /**
  4197 Sends a blind message to the server - no reply is expected.
  4198 
  4199 A set of message arguments is passed that can be used to specify client
  4200 addresses, which the server can use to read from and write to the client
  4201 address space.
  4202 
  4203 Note that this function can fail if there are no available message-slots, either
  4204 in the system wide pool (if this is being used), or in the session reserved pool
  4205 (if this is being used). If the client request is synchronous, then always use
  4206 the synchronous variant of SendReceive(); this is guaranteed to reach the server.
  4207 
  4208 @param aFunction	The opcode specifying the requested service.
  4209 @param aArgs		The message arguments.
  4210                     
  4211 @return				KErrNone if successful, otherwise one of the system-wide error codes.                    
  4212 */
  4213 inline TInt RSubSessionBase::Send(TInt aFunction,const TIpcArgs& aArgs) const
  4214 	{return DoSend(aFunction,&aArgs);}
  4215 
  4216 
  4217 
  4218 	
  4219 /**
  4220 Sends a message to the server and waits asynchronously for the reply.
  4221 
  4222 An opcode specifies the service required.
  4223 A set of message arguments is passed that can be used to specify client addresses,
  4224 which the server can use to read from and write to the client address space.
  4225 
  4226 Note that this function can fail if there are no available message-slots, 
  4227 either in the system wide pool (if this is being used), or in the session
  4228 reserved pool (if this is being used). If the client request is synchronous,
  4229 then always use the synchronous variant of SendReceive();
  4230 this is guaranteed to reach the server.
  4231 
  4232 @param aFunction	The opcode specifying the requested service.
  4233 @param aArgs		The message arguments.
  4234 @param aStatus	    A request status which indicates the completion status of the asynchronous request.
  4235 */
  4236 inline void RSubSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs,TRequestStatus& aStatus) const
  4237 	{DoSendReceive(aFunction,&aArgs,aStatus);}
  4238 
  4239 
  4240 
  4241 	
  4242 /**
  4243 Sends a message to the server and waits synchronously for a reply.
  4244 
  4245 An opcode specifies the service required.
  4246 A set of message arguments is passed that can be used to specify client addresses,
  4247 which the server can use to read from and write to the client address space.
  4248 
  4249 Note that this function will only fail if the server itself fails or environmental
  4250 errors occur in the server. All requests made using this function are guaranteed to
  4251 reach the server. This means that all synchronous client requests (typically those
  4252 that return void) should be routed through this synchronous variant of SendReceive().
  4253 
  4254 @param aFunction	The opcode specifying the requested service.
  4255 @param aArgs		The message arguments.
  4256 
  4257 @return				KErrNone if successful, otherwise one of the system-wide error codes. 
  4258 */
  4259 inline TInt RSubSessionBase::SendReceive(TInt aFunction,const TIpcArgs& aArgs) const
  4260 	{return DoSendReceive(aFunction,&aArgs);}
  4261 	
  4262 
  4263 
  4264 	
  4265 /**
  4266 Sends a blind message to the server - no reply is expected.
  4267 
  4268 This variant sends no message arguments to the server.
  4269 
  4270 @param aFunction	The opcode specifying the requested service.
  4271                     
  4272 @return				KErrNone if successful, otherwise one of the system-wide error codes. 
  4273 */
  4274 inline TInt RSubSessionBase::Send(TInt aFunction) const
  4275 	{return DoSend(aFunction,NULL);}
  4276 
  4277 
  4278 
  4279 	
  4280 /**
  4281 Sends a message to the server and waits asynchronously for the reply.
  4282 
  4283 An opcode specifies the service required.
  4284 This variant sends no message arguments to the server.
  4285 
  4286 @param aFunction	The opcode specifying the requested service.
  4287 @param aStatus	    A request status which indicates the completion status of the asynchronous request.
  4288 */
  4289 inline void RSubSessionBase::SendReceive(TInt aFunction,TRequestStatus& aStatus) const
  4290 	{ DoSendReceive(aFunction,NULL,aStatus);}
  4291 
  4292 
  4293 
  4294 	
  4295 /**
  4296 Sends a message to the server and waits synchronously for a reply.
  4297 
  4298 An opcode specifies the service required.
  4299 This variant sends no message arguments to the server.
  4300 
  4301 @param aFunction	The opcode specifying the requested service.
  4302 
  4303 @return				KErrNone if successful, otherwise one of the system-wide error codes. 
  4304 */
  4305 inline TInt RSubSessionBase::SendReceive(TInt aFunction) const
  4306 	{return DoSendReceive(aFunction,NULL);}
  4307 
  4308 
  4309 
  4310 
  4311 // Class RRefBase
  4312 
  4313 /**
  4314 Default constructor.
  4315 */
  4316 inline RRefBase::RRefBase()
  4317 	: iPtr(NULL)
  4318 	{}
  4319 
  4320 
  4321 
  4322 /**
  4323 Copy constructor.
  4324 
  4325 @param aRef A reference to the object to be copied.
  4326 */
  4327 inline RRefBase::RRefBase(const RRefBase &aRef)
  4328 	{Copy(aRef);}
  4329 
  4330 
  4331 
  4332 
  4333 // Class RRef
  4334 
  4335 
  4336 /**
  4337 Default constructor.
  4338 */
  4339 template <class T>
  4340 inline RRef<T>::RRef()
  4341 	{}
  4342 
  4343 
  4344 
  4345 /**
  4346 Copy constructor.
  4347 
  4348 The constructor frees any existing contained object, and takes ownership of
  4349 the object owned by anObject. 
  4350 
  4351 @param anObject A reference to another 'reference' object.
  4352                 On return from this constructor, anObject may be safely
  4353                 orphaned if it lives on the program stack.
  4354 */
  4355 template <class T>
  4356 inline RRef<T>::RRef(const RRef<T> &anObject)
  4357 	{Copy(anObject);}
  4358 
  4359 
  4360 
  4361 
  4362 /**
  4363 Assignment operator.
  4364 
  4365 The constructor frees any existing contained object, and takes ownership of
  4366 the object owned by anObject. 
  4367 
  4368 @param anObject A reference to another 'reference' object.
  4369                 On return from this constructor, anObject may be safely
  4370                 orphaned if it lives on the program stack.
  4371 */
  4372 template <class T>
  4373 inline void RRef<T>::operator=(const RRef<T> &anObject)
  4374 	{Copy(anObject);}
  4375 
  4376 
  4377 
  4378 
  4379 /**
  4380 Gets a pointer to the contained object.
  4381 
  4382 @return A pointer to the contained object
  4383 */
  4384 template <class T>
  4385 inline T *RRef<T>::operator->()
  4386 	{return((T *)iPtr);}
  4387 
  4388 
  4389 
  4390 
  4391 /**
  4392 Gets a pointer to the contained object.
  4393 
  4394 @return A pointer to the contained object
  4395 */
  4396 template <class T>
  4397 inline RRef<T>::operator T*()
  4398 	{return((T *)iPtr);}
  4399 
  4400 
  4401 
  4402 
  4403 /**
  4404 Creates a copy of the specified object, which is to be contained by
  4405 this reference object.
  4406 
  4407 The amount of memory set aside to contain the object is defined by the size
  4408 of the object
  4409 
  4410 @param anObject The object to be packaged up by this reference object.
  4411 */
  4412 template <class T>
  4413 void RRef<T>::Alloc(const T &anObject)
  4414 	{DoAlloc(&anObject,sizeof(T));}
  4415 
  4416 
  4417 
  4418 
  4419 /**
  4420 Creates a copy of the specified object, which is to be contained by
  4421 this reference object.
  4422 
  4423 The amount of memory set aside to contain the object is defined by aSize.
  4424 
  4425 @param anObject The object to be packaged up by this reference object.
  4426 @param aSize    The amount of memory to be set aside to contain the object.
  4427                 You must make sure that this is big enough.
  4428 */
  4429 template <class T>
  4430 void RRef<T>::Alloc(const T &anObject,TInt aSize)
  4431 	{DoAlloc(&anObject,aSize);}
  4432 
  4433 
  4434 
  4435 
  4436 /**
  4437 Creates a copy of the specified object, which is to be contained by
  4438 this reference object, and leaves on failure.
  4439 
  4440 The amount of memory set aside to contain the object is defined by the size
  4441 of the object
  4442 
  4443 @param anObject The object to be packaged up by this reference object.
  4444 */
  4445 template <class T>
  4446 void RRef<T>::AllocL(const T &anObject)
  4447 	{DoAllocL(&anObject,sizeof(T));}
  4448 
  4449 
  4450 
  4451 
  4452 /**
  4453 Creates a copy of the specified object, which is to be contained by
  4454 this reference object, and leaves on failure.
  4455 
  4456 The amount of memory set aside to contain the object is defined by aSize.
  4457 
  4458 @param anObject The object to be packaged up by this reference object.
  4459 @param aSize    The amount of memory to be set aside to contain the object.
  4460                 You must make sure that this is big enough.
  4461 */
  4462 template <class T>
  4463 void RRef<T>::AllocL(const T &anObject,TInt aSize)
  4464 	{DoAllocL(&anObject,aSize);}
  4465 
  4466 
  4467 
  4468 
  4469 // Class TRegion
  4470 inline TBool TRegion::CheckError() const
  4471 /** 
  4472 Tests whether the region's error flag is set.
  4473 
  4474 The error flag may be set:
  4475 
  4476 1. when an attempt to allocate more memory for the region fails
  4477 
  4478 2. if an attempt is made to expand a fixed size region beyond its allocated
  4479    size
  4480 
  4481 3. if ForceError() has been called.
  4482 
  4483 Use Clear() to unset the error flag, clear the region and free all allocated 
  4484 memory.
  4485 
  4486 @return True, if the error flag is set; false, otherwise. 
  4487 
  4488 @see TRegion::ForceError
  4489 @see TRegion::Clear
  4490 */
  4491 	{return(iError);}
  4492 
  4493 
  4494 
  4495 
  4496 inline TInt TRegion::Count() const
  4497 /**
  4498 Gets the number of rectangles in this region.
  4499 
  4500 @return The number of rectangles.
  4501 */
  4502 	{return(iCount);}
  4503 
  4504 
  4505 
  4506 
  4507 inline const TRect *TRegion::RectangleList() const
  4508 /**
  4509 Gets a pointer to the array of rectangles defining this region.
  4510 
  4511 @return Pointer to the array of rectangles. Note that array is a standard 
  4512         C++ array, i.e. a concatenated set of TRect objects. Use Count() to
  4513 		get the number of rectangles.
  4514 
  4515 @see TRegion::Count
  4516 */
  4517 	{return(((TRegion *)this)->RectangleListW());}
  4518 
  4519 
  4520 
  4521 
  4522 inline TRegion::TRegion()
  4523 	{}
  4524 
  4525 
  4526 
  4527 
  4528 // Class RRegion
  4529 inline TInt RRegion::CheckSpare() const
  4530 /**
  4531 Gets the number of free memory slots in the region.
  4532 
  4533 This is the number of slots which have been allocated, minus the number in 
  4534 use.
  4535 
  4536 @return The number of free memory slots in the region.
  4537 */
  4538 	{return(iAllocedRects-iCount);}
  4539 
  4540 
  4541 
  4542 
  4543 // Class TRegionFix
  4544 template <TInt S>
  4545 inline TRegionFix<S>::TRegionFix() : TRegion(-S)
  4546 /**
  4547 Constructs a default fixed size region.
  4548 */
  4549 	{}
  4550 
  4551 
  4552 
  4553 
  4554 template <TInt S>
  4555 inline TRegionFix<S>::TRegionFix(const TRect &aRect) : TRegion(-S)
  4556 /**
  4557 Constructs a fixed size region with a TRect.
  4558 
  4559 @param aRect Rectangle to be added to the newly constructed region.
  4560 */
  4561 	{AddRect(aRect);}
  4562 
  4563 
  4564 
  4565 
  4566 template <TInt S>
  4567 inline TRegionFix<S>::TRegionFix(const TRegionFix<S> &aRegion)
  4568 /**
  4569 Copy constructor.
  4570 
  4571 @param aRegion The TRegionFix object to be copied.
  4572 */
  4573 	{*this=aRegion;}
  4574 
  4575 
  4576 
  4577 
  4578 template <TInt S>
  4579 inline RRegionBuf<S>::RRegionBuf() : RRegion(-S&(~ERRegionBuf),S)
  4580 /**
  4581 Constructs a default object.
  4582 
  4583 The granularity is the value of the template parameter.
  4584 */
  4585 	{}
  4586 
  4587 
  4588 
  4589 template <TInt S>
  4590 inline RRegionBuf<S>::RRegionBuf(const RRegion &aRegion) 
  4591 /**
  4592 Constructs this object from the specified RRegion.
  4593 
  4594 @param aRegion The region to assign to this RRegionBuf.
  4595 */
  4596 	{*this=aRegion;}
  4597 
  4598 
  4599 
  4600 
  4601 template <TInt S>
  4602 inline RRegionBuf<S>::RRegionBuf(const TRect &aRect) : RRegion(-S&(~ERRegionBuf),S)
  4603 /**
  4604 Constructs an RRegionBuf with a TRect.
  4605 
  4606 Its granularity is initialised to the value contained in the template argument.
  4607 The resulting region consists of the specified single rectangle.
  4608 
  4609 @param aRect The single rectangle with which to initialise the region.
  4610 */
  4611 	{AddRect(aRect);}
  4612 
  4613 
  4614 
  4615 
  4616 template <TInt S>
  4617 inline RRegionBuf<S>::RRegionBuf(const RRegionBuf<S> &aRegion)
  4618 /**
  4619 Copy constructs from an existing RRegionBuf object.
  4620 
  4621 @param aRegion The RRegionBuf to be copied.
  4622 */
  4623     {*this=aRegion;}
  4624 
  4625 
  4626 
  4627 
  4628 // enum TTimerLockSpec
  4629 inline TTimerLockSpec &operator++(TTimerLockSpec &aLock)
  4630 	{
  4631 	return aLock=((aLock==ETwelveOClock) ? EOneOClock : (TTimerLockSpec)((TInt)aLock+1));
  4632 	}
  4633 inline TTimerLockSpec operator++(TTimerLockSpec &aLock, TInt)
  4634 	{
  4635 	TTimerLockSpec l=aLock;
  4636 	aLock=((aLock==ETwelveOClock) ? EOneOClock : (TTimerLockSpec)((TInt)aLock+1));
  4637 	return l;
  4638 	}
  4639 
  4640 
  4641 
  4642 
  4643 // Class TCheckedUid
  4644 inline const TUidType& TCheckedUid::UidType() const
  4645 /**
  4646 Gets the Uid type contained in this object.
  4647 
  4648 @return The Uid type.
  4649 */
  4650     {return(iType);}
  4651 
  4652 
  4653 
  4654 
  4655 // Array deletion support, uses CBase deletion (virtual d'tor) for all C-classes
  4656 template <class T>
  4657 /**	@internalComponent
  4658 */
  4659 void _DeleteArray(T** aBegin,T** aEnd)
  4660 	{for (;;) if (aBegin<aEnd) delete *aBegin++; else return;}
  4661 
  4662 template <class T>
  4663 /**	@internalComponent
  4664 */
  4665 struct _ArrayUtil
  4666 	{
  4667 	static inline void Delete(T* aBegin,T* aEnd,CBase*)
  4668 		{::_DeleteArray((CBase**)aBegin,(CBase**)aEnd);}
  4669 	static inline void Delete(T* aBegin,T* aEnd,TAny*)
  4670 		{::_DeleteArray(aBegin,aEnd);}
  4671 	static inline void Delete(T* aArray,TInt aCount)
  4672 		{Delete(aArray,aArray+aCount,*aArray);}
  4673 	};
  4674 
  4675 
  4676 
  4677 
  4678 #ifndef __TOOLS__
  4679 // Template class TFixedArray
  4680 IMPORT_C void PanicTFixedArray();
  4681 
  4682 
  4683 
  4684 
  4685 template <class T,TInt S>
  4686 inline TFixedArray<T,S>::TFixedArray()
  4687 /**
  4688 Default constructor.
  4689 
  4690 Constructs an uninitialised C++ array.
  4691 */
  4692 	{}
  4693 
  4694 
  4695 
  4696 
  4697 template <class T,TInt S>
  4698 inline void TFixedArray<T,S>::Copy(const T* aList,TInt aLength)
  4699 /**
  4700 Copies the specified set of contiguous objects into the C++ array.
  4701 
  4702 The copy operation starts at the beginning of the array, replacing
  4703 any existing data.
  4704 
  4705 @param aList   A pointer to a set of contiguous objects. 
  4706 @param aLength The number of contiguous objects to be copied. This value must
  4707                not be negative and must not be greater than the size of the
  4708 			   array as defined by the integer template parameter.
  4709 
  4710 @panic USER 133, in a debug build only, if aLength is negative or is greater
  4711        than the size of the array as defined by the integer template parameter.
  4712 */
  4713 	{__ASSERT_DEBUG(TUint(aLength)<=TUint(S),PanicTFixedArray());Mem::Copy(iRep,aList,aLength*sizeof(T));}
  4714 
  4715 
  4716 
  4717 
  4718 template <class T,TInt S>
  4719 inline TFixedArray<T,S>::TFixedArray(const T* aList,TInt aLength)
  4720 /**
  4721 Constructs a C++ array initialised with the specified objects.
  4722 
  4723 @param aList   A pointer to a set of contiguous objects. 
  4724 @param aLength The number of contiguous objects to be copied. This value must
  4725                not be negative and must not be greater than the size of the
  4726 			   array as defined by the integer template parameter.
  4727 
  4728 @panic USER 133, in a debug build only, if aLength is negative or is greater
  4729        than the size of the array as defined by the integer template parameter.
  4730 */
  4731 	{Copy(aList,aLength);}
  4732 
  4733 
  4734 
  4735 
  4736 template <class T,TInt S>
  4737 inline void TFixedArray<T,S>::Reset()
  4738 /**
  4739 Fills every element of the array with binary zeroes.
  4740 */
  4741 	{Mem::FillZ(iRep,sizeof(iRep));}
  4742 
  4743 
  4744 
  4745 
  4746 template <class T,TInt S>
  4747 inline TInt TFixedArray<T,S>::Count() const
  4748 /**
  4749 Gets the size of the array.
  4750 
  4751 For any instance of this class, the array size 
  4752 is fixed and has the same value as the integer template parameter.
  4753 
  4754 @return The size of the array.
  4755 */
  4756 	{return S;}
  4757 
  4758 
  4759 
  4760 
  4761 template <class T,TInt S>
  4762 inline TInt TFixedArray<T,S>::Length() const
  4763 /**
  4764 Gets the size of an array element, in bytes.
  4765 
  4766 @return The size of an array element, in bytes.
  4767 */
  4768 	{return sizeof(T);}
  4769 
  4770 
  4771 
  4772 
  4773 template <class T,TInt S>
  4774 inline TBool TFixedArray<T,S>::InRange(TInt aIndex)
  4775 	{return TUint(aIndex)<S;}
  4776 
  4777 
  4778 
  4779 
  4780 template <class T,TInt S>
  4781 inline T& TFixedArray<T,S>::operator[](TInt aIndex)
  4782 /**
  4783 Gets a reference to the specified element within the C++ array.
  4784 
  4785 @param aIndex The position of the element within the array. This is an offset value; 
  4786               a zero value refers to the first element in the array. This value must be 
  4787               greater than or equal to zero and less than the size of the array.
  4788 
  4789 @return A reference to an element of the array.
  4790 
  4791 @panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
  4792        of the array as defined by the integer template parameter.
  4793 */
  4794 	{__ASSERT_DEBUG(InRange(aIndex),PanicTFixedArray());return iRep[aIndex];}
  4795 
  4796 
  4797 
  4798 
  4799 template <class T,TInt S>
  4800 inline const T& TFixedArray<T,S>::operator[](TInt aIndex) const
  4801 /**
  4802 Gets a const reference to the specified element within the C++ array.
  4803 
  4804 @param aIndex The position of the element within the array. This is an offset value; 
  4805               a zero value refers to the first element in the array. This value must be 
  4806               greater than or equal to zero and less than the size of the array.
  4807 
  4808 @return A const reference to an element of the array; the element cannot be 
  4809         changed through this reference.
  4810 
  4811 @panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
  4812        of the array as defined by the integer template parameter.
  4813 */
  4814 	{return CONST_CAST(ThisClass&,*this)[aIndex];}
  4815 
  4816 
  4817 
  4818 
  4819 template <class T,TInt S>
  4820 inline T& TFixedArray<T,S>::At(TInt aIndex)
  4821 /**
  4822 Gets a reference to the specified element within the C++ array.
  4823 
  4824 @param aIndex The position of the element within the array. This is an offset value; 
  4825               a zero value refers to the first element in the array. This value must be 
  4826               greater than or equal to zero and less than the size of the array.
  4827 
  4828 @return A reference to an element of the array.
  4829 
  4830 @panic USER 133, if aIndex is negative or greater than or equal to the size
  4831        of the array as defined by the integer template parameter.
  4832 */
  4833 	{__ASSERT_ALWAYS(InRange(aIndex),PanicTFixedArray());return iRep[aIndex];}
  4834 
  4835 
  4836 
  4837 
  4838 template <class T,TInt S>
  4839 inline const T& TFixedArray<T,S>::At(TInt aIndex) const
  4840 /**
  4841 Gets a const reference to the specified element within the C++ array.
  4842 
  4843 @param aIndex The position of the element within the array. This is an offset value; 
  4844               a zero value refers to the first element in the array. This value must be 
  4845               greater than or equal to zero and less than the size of the array.
  4846 
  4847 @return A const reference to an element of the array; the element cannot be 
  4848         changed through this reference.
  4849 
  4850 @panic USER 133, in a debug build only, if aIndex is negative or greater than or equal to the size
  4851        of the array as defined by the integer template parameter.
  4852 */
  4853 	{return CONST_CAST(ThisClass&,*this).At(aIndex);}
  4854 
  4855 
  4856 
  4857 
  4858 template <class T,TInt S>
  4859 inline T* TFixedArray<T,S>::Begin()
  4860 /**
  4861 Gets a pointer to the first element of the array.
  4862 
  4863 @return A pointer to the first element of the array.
  4864 */
  4865 	{return &iRep[0];}
  4866 
  4867 
  4868 
  4869 
  4870 template <class T,TInt S>
  4871 inline T* TFixedArray<T,S>::End()
  4872 /**
  4873 Gets a pointer to the first byte following the end of the array.
  4874 
  4875 @return A pointer to the first byte following the end of the array.
  4876 */
  4877 	{return &iRep[S];}
  4878 
  4879 
  4880 
  4881 
  4882 template <class T,TInt S>
  4883 inline const T* TFixedArray<T,S>::Begin() const
  4884 /**
  4885 Gets a pointer to the first element of the array.
  4886 
  4887 @return A pointer to a const element of the array. 
  4888 */
  4889 	{return &iRep[0];}
  4890 
  4891 
  4892 
  4893 
  4894 template <class T,TInt S>
  4895 inline const T* TFixedArray<T,S>::End() const
  4896 /**
  4897 Gets a pointer to the first byte following the end of the array.
  4898 
  4899 @return A pointer to the const first byte following the end of the array.
  4900 */
  4901 	{return &iRep[S];}
  4902 
  4903 
  4904 
  4905 
  4906 template <class T,TInt S>
  4907 inline TInt TFixedArray<T,S>::CountFunctionR(const CBase*)
  4908 	{return S;}
  4909 
  4910 
  4911 
  4912 
  4913 template <class T,TInt S>
  4914 inline const TAny* TFixedArray<T,S>::AtFunctionR(const CBase* aThis,TInt aIndex)
  4915 	{return &REINTERPRET_CAST(const ThisClass&,*aThis)[aIndex];}
  4916 
  4917 
  4918 
  4919 
  4920 template <class T,TInt S>
  4921 inline TArray<T> TFixedArray<T,S>::Array() const
  4922 /**
  4923 Creates and returns a generic array for this C++ array.
  4924 
  4925 @return A generic array for this C++ array.
  4926 */
  4927 	{return TArray<T>(CountFunctionR,AtFunctionR,REINTERPRET_CAST(const CBase*,this));}
  4928 
  4929 
  4930 
  4931 
  4932 template <class T,TInt S>
  4933 inline void TFixedArray<T,S>::DeleteAll()
  4934 /**
  4935 Invokes the delete operator on every member of the array.
  4936 
  4937 The function can only be used for arrays of pointers to CBase derived objects.
  4938 
  4939 If the array is to be used after a call to this function, it is good practice 
  4940 to call TFixedArray<class T,TInt S>::Reset() to set all array elements to 
  4941 NULL.
  4942 */
  4943 	{_ArrayUtil<T>::Delete(iRep,S);}
  4944 #endif
  4945 
  4946 
  4947 
  4948 
  4949 // class User
  4950 
  4951 inline RHeap* User::SwitchHeap(RAllocator* aHeap)
  4952 /**
  4953 Changes the current thread's heap.
  4954 	
  4955 @param aHeap A pointer to the new heap handle.
  4956 
  4957 @return A pointer to the old heap handle.
  4958 */
  4959 	{ return (RHeap*)SwitchAllocator(aHeap); }
  4960 
  4961 
  4962 
  4963 
  4964 inline RHeap& User::Heap()
  4965 /**
  4966 Gets a reference to the handle to the current thread's heap.
  4967 	
  4968 @return A reference to the handle to the current thread's heap.
  4969 */
  4970 	{ return (RHeap&)Allocator(); }
  4971 
  4972 
  4973 
  4974 
  4975 #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  4976 
  4977 inline TBool User::CreatorHasCapability(TCapability aCapability, const char* aDiagnostic)
  4978 	{
  4979 	return DoCreatorHasCapability(aCapability, aDiagnostic);
  4980 	}
  4981 
  4982 inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic)
  4983 	{
  4984 	return DoCreatorHasCapability(aCapability1, aCapability2, aDiagnostic);
  4985 	}
  4986 
  4987 #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  4988 
  4989 // Only available to NULL arguments
  4990 inline TBool User::CreatorHasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/)
  4991 	{
  4992 	return DoCreatorHasCapability(aCapability);
  4993 	}
  4994 
  4995 inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/)
  4996 	{
  4997 	return DoCreatorHasCapability(aCapability1, aCapability2);
  4998 	}
  4999 
  5000 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  5001 // For things using KSuppressPlatSecDiagnostic
  5002 inline TBool User::CreatorHasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/)
  5003 	{
  5004 	return DoCreatorHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
  5005 	}
  5006 
  5007 inline TBool User::CreatorHasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/)
  5008 	{
  5009 	return DoCreatorHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
  5010 	}
  5011 
  5012 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  5013 
  5014 #endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  5015 
  5016 
  5017 inline const TAny* User::LeaveIfNull(const TAny* aPtr)
  5018 /**
  5019 Leaves with the reason code KErrNoMemory, if the specified pointer is NULL. 
  5020 
  5021 If the pointer is not NULL, the function simply returns with the value of 
  5022 the pointer.
  5023 
  5024 Used to check pointers to const objects.
  5025 
  5026 @param aPtr The pointer to be tested.
  5027 
  5028 @return If the function returns, the value of aPtr.
  5029 */
  5030 	{ return (const TAny*)LeaveIfNull((TAny*)aPtr); }
  5031 
  5032 /** Sets this TSecurityInfo to the security attributes of this process. */
  5033 inline void TSecurityInfo::SetToCurrentInfo()
  5034 	{ new (this) TSecurityInfo(RProcess()); }
  5035 
  5036 /** Constructs a TSecurityInfo using the security attributes of aProcess */
  5037 inline void TSecurityInfo::Set(RProcess aProcess)
  5038 	{ new (this) TSecurityInfo(aProcess); }
  5039 
  5040 /** Constructs a TSecurityInfo using the security attributes of the process
  5041 owning aThread 
  5042 */
  5043 inline void TSecurityInfo::Set(RThread aThread)
  5044 	{ new (this) TSecurityInfo(aThread); }
  5045 
  5046 /** Constructs a TSecurityInfo using the security attributes of the process
  5047 which sent the message aMsgPtr */
  5048 inline void TSecurityInfo::Set(RMessagePtr2 aMsgPtr)
  5049 	{ new (this) TSecurityInfo(aMsgPtr); }
  5050 
  5051 #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  5052 
  5053 /** Checks this policy against the platform security attributes of aProcess.
  5054 
  5055 	When a check fails the action taken is determined by the system wide Platform Security
  5056 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5057 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5058 	check failed.
  5059 
  5060 @param aProcess The RProcess object to check against this TSecurityPolicy.
  5061 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5062 							that may be issued if the policy check fails.
  5063 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5064 							which enables it to be easily removed from the system.
  5065 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5066 platform security attributes of aProcess, EFalse otherwise.
  5067 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5068 */
  5069 inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic) const
  5070 	{
  5071 	return DoCheckPolicy(aProcess, aDiagnostic);
  5072 	}
  5073 
  5074 /** Checks this policy against the platform security attributes of the process
  5075 owning aThread.
  5076 
  5077 	When a check fails the action taken is determined by the system wide Platform Security
  5078 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5079 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5080 	check failed.
  5081 
  5082 @param aThread The thread whose owning process' platform security attributes
  5083 are to be checked against this TSecurityPolicy.
  5084 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5085 							that may be issued if the policy check fails.
  5086 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5087 							which enables it to be easily removed from the system.
  5088 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5089 platform security parameters of the owning process of aThread, EFalse otherwise.
  5090 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5091 */
  5092 inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic) const
  5093 	{
  5094 	return DoCheckPolicy(aThread, aDiagnostic);
  5095 	}
  5096 
  5097 /** Checks this policy against the platform security attributes of the process which sent
  5098 the given message.
  5099 
  5100 	When a check fails the action taken is determined by the system wide Platform Security
  5101 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5102 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5103 	check failed.
  5104 
  5105 @param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
  5106 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5107 							that may be issued if the policy check fails.
  5108 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5109 							which enables it to be easily removed from the system.
  5110 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5111 platform security attributes of aMsg, EFalse otherwise.
  5112 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5113 */
  5114 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic) const
  5115 	{
  5116 	return DoCheckPolicy(aMsgPtr, aDiagnostic);
  5117 	}
  5118 
  5119 /** Checks this policy against the platform security attributes of the process which sent
  5120 the given message.
  5121 
  5122 	When a check fails the action taken is determined by the system wide Platform Security
  5123 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5124 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5125 	check failed.
  5126 
  5127 @param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
  5128 @param aMissing A TSecurityInfo object which this method fills with any capabilities or IDs
  5129 				it finds to be missing. 
  5130 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5131 							that may be issued if the policy check fails.
  5132 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5133 							which enables it to be easily removed from the system.
  5134 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5135 platform security attributes of aMsg, EFalse otherwise.
  5136 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5137 
  5138 @internalComponent
  5139 */
  5140 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic) const
  5141 	{
  5142 	return DoCheckPolicy(aMsgPtr, aMissing, aDiagnostic);
  5143 	}
  5144 
  5145 /** Checks this policy against the platform security attributes of this process' creator.
  5146 
  5147 	When a check fails the action taken is determined by the system wide Platform Security
  5148 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5149 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5150 	check failed.
  5151 
  5152 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5153 							that may be issued if the policy check fails.
  5154 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5155 							which enables it to be easily removed from the system.
  5156 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5157 platform security attributes of this process' creator, EFalse otherwise.
  5158 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5159 */
  5160 inline TBool TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic) const
  5161 	{
  5162 	return DoCheckPolicyCreator(aDiagnostic);
  5163 	}
  5164 
  5165 /**
  5166 @see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
  5167 */
  5168 inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic) const
  5169 	{
  5170 	return (&(*this))->CheckPolicy(aProcess, aDiagnostic);
  5171 	}
  5172 
  5173 /**
  5174 @see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
  5175 */
  5176 inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic) const
  5177 	{
  5178 	return (&(*this))->CheckPolicy(aThread, aDiagnostic);
  5179 	}
  5180 
  5181 /**
  5182 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
  5183 */
  5184 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic) const
  5185 	{
  5186 	return (&(*this))->CheckPolicy(aMsgPtr, aDiagnostic);
  5187 	}
  5188 
  5189 /**
  5190 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
  5191 @internalComponent
  5192 */
  5193 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic) const
  5194 	{
  5195 	return (&(*this))->CheckPolicy(aMsgPtr, aMissing, aDiagnostic);
  5196 	}
  5197 
  5198 /**
  5199 @see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
  5200 */
  5201 inline TBool TStaticSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic) const
  5202 	{
  5203 	return (&(*this))->CheckPolicyCreator(aDiagnostic);
  5204 	}
  5205 
  5206 #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  5207 
  5208 /** Checks this policy against the platform security attributes of aProcess.
  5209 
  5210 	When a check fails the action taken is determined by the system wide Platform Security
  5211 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5212 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5213 	check failed.
  5214 
  5215 @param aProcess The RProcess object to check against this TSecurityPolicy.
  5216 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5217 							that may be issued if the policy check fails.
  5218 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5219 							which enables it to be easily removed from the system.
  5220 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5221 platform security attributes of aProcess, EFalse otherwise.
  5222 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5223 */
  5224 inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/) const
  5225 	{
  5226 	return DoCheckPolicy(aProcess);
  5227 	}
  5228 
  5229 /** Checks this policy against the platform security attributes of the process
  5230 owning aThread.
  5231 
  5232 	When a check fails the action taken is determined by the system wide Platform Security
  5233 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5234 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5235 	check failed.
  5236 
  5237 @param aThread The thread whose owning process' platform security attributes
  5238 are to be checked against this TSecurityPolicy.
  5239 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5240 							that may be issued if the policy check fails.
  5241 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5242 							which enables it to be easily removed from the system.
  5243 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5244 platform security parameters of the owning process of aThread, EFalse otherwise.
  5245 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5246 */
  5247 inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/) const
  5248 	{
  5249 	return DoCheckPolicy(aThread);
  5250 	}
  5251 
  5252 /** Checks this policy against the platform security attributes of the process which sent
  5253 the given message.
  5254 
  5255 	When a check fails the action taken is determined by the system wide Platform Security
  5256 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5257 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5258 	check failed.
  5259 
  5260 @param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
  5261 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5262 							that may be issued if the policy check fails.
  5263 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5264 							which enables it to be easily removed from the system.
  5265 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5266 platform security attributes of aMsg, EFalse otherwise.
  5267 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5268 */
  5269 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/) const
  5270 	{
  5271 	return DoCheckPolicy(aMsgPtr);
  5272 	}
  5273 
  5274 /** Checks this policy against the platform security attributes of the process which sent
  5275 the given message.
  5276 
  5277 	When a check fails the action taken is determined by the system wide Platform Security
  5278 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5279 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5280 	check failed.
  5281 
  5282 @param aMsgPtr The RMessagePtr2 object to check against this TSecurityPolicy.
  5283 @param aMissing A TSecurityInfo object which this method fills with any capabilities or IDs
  5284 				it finds to be missing. 
  5285 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5286 							that may be issued if the policy check fails.
  5287 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5288 							which enables it to be easily removed from the system.
  5289 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5290 platform security attributes of aMsg, EFalse otherwise.
  5291 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5292 
  5293 @internalComponent
  5294 */
  5295 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/) const
  5296 	{
  5297 	return DoCheckPolicy(aMsgPtr, aMissing);
  5298 	}
  5299 
  5300 /** Checks this policy against the platform security attributes of this process' creator.
  5301 
  5302 	When a check fails the action taken is determined by the system wide Platform Security
  5303 	configuration. If PlatSecDiagnostics is ON, then a diagnostic message is emitted.
  5304 	If PlatSecEnforcement is OFF, then this function will return ETrue even though the
  5305 	check failed.
  5306 
  5307 @param aDiagnostic A string that will be emitted along with any diagnostic message
  5308 							that may be issued if the policy check fails.
  5309 							This string must be enclosed in the __PLATSEC_DIAGNOSTIC_STRING macro
  5310 							which enables it to be easily removed from the system.
  5311 @return ETrue if all the requirements of this TSecurityPolicy are met by the
  5312 platform security attributes of this process' creator, EFalse otherwise.
  5313 @panic USER 190 if 'this' is an invalid SSecurityInfo object
  5314 */
  5315 inline TBool TSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/) const
  5316 	{
  5317 	return DoCheckPolicyCreator();
  5318 	}
  5319 
  5320 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  5321 inline TBool TSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5322 	{
  5323 	return DoCheckPolicy(aProcess, KSuppressPlatSecDiagnosticMagicValue);
  5324 	}
  5325 
  5326 inline TBool TSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5327 	{
  5328 	return DoCheckPolicy(aThread, KSuppressPlatSecDiagnosticMagicValue);
  5329 	}
  5330 
  5331 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5332 	{
  5333 	return DoCheckPolicy(aMsgPtr, KSuppressPlatSecDiagnosticMagicValue);
  5334 	}
  5335 
  5336 inline TBool TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5337 	{
  5338 	return DoCheckPolicy(aMsgPtr, aMissing, KSuppressPlatSecDiagnosticMagicValue);
  5339 	}
  5340 
  5341 inline TBool TSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5342 	{
  5343 	return DoCheckPolicyCreator(KSuppressPlatSecDiagnosticMagicValue);
  5344 	}
  5345 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  5346 
  5347 /**
  5348 @see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
  5349 */
  5350 inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/) const
  5351 	{
  5352 	return (&(*this))->CheckPolicy(aProcess);
  5353 	}
  5354 
  5355 /**
  5356 @see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
  5357 */
  5358 inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/) const
  5359 	{
  5360 	return (&(*this))->CheckPolicy(aThread);
  5361 	}
  5362 
  5363 /**
  5364 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
  5365 */
  5366 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/) const
  5367 	{
  5368 	return (&(*this))->CheckPolicy(aMsgPtr);
  5369 	}
  5370 
  5371 /**
  5372 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
  5373 @internalComponent
  5374 */
  5375 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/) const
  5376 	{
  5377 	return (&(*this))->CheckPolicy(aMsgPtr, aMissing);
  5378 	}
  5379 
  5380 /**
  5381 @see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
  5382 */
  5383 inline TBool TStaticSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/) const
  5384 	{
  5385 	return (&(*this))->CheckPolicyCreator();
  5386 	}
  5387 
  5388 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  5389 /**
  5390 @see TSecurityPolicy::CheckPolicy(RProcess aProcess, const char* aDiagnostic)
  5391 */
  5392 inline TBool TStaticSecurityPolicy::CheckPolicy(RProcess aProcess, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5393 	{
  5394 	return (&(*this))->CheckPolicy(aProcess, KSuppressPlatSecDiagnostic);
  5395 	}
  5396 
  5397 /**
  5398 @see TSecurityPolicy::CheckPolicy(RThread aThread, const char* aDiagnostic)
  5399 */
  5400 inline TBool TStaticSecurityPolicy::CheckPolicy(RThread aThread, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5401 	{
  5402 	return (&(*this))->CheckPolicy(aThread, KSuppressPlatSecDiagnostic);
  5403 	}
  5404 
  5405 /**
  5406 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, const char* aDiagnostic)
  5407 */
  5408 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5409 	{
  5410 	return (&(*this))->CheckPolicy(aMsgPtr, KSuppressPlatSecDiagnostic);
  5411 	}
  5412 
  5413 /**
  5414 @see TSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, const char* aDiagnostic)
  5415 @internalComponent
  5416 */
  5417 inline TBool TStaticSecurityPolicy::CheckPolicy(RMessagePtr2 aMsgPtr, TSecurityInfo& aMissing, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5418 	{
  5419 	return (&(*this))->CheckPolicy(aMsgPtr, aMissing, KSuppressPlatSecDiagnostic);
  5420 	}
  5421 
  5422 /**
  5423 @see TSecurityPolicy::CheckPolicyCreator(const char* aDiagnostic)
  5424 */
  5425 inline TBool TStaticSecurityPolicy::CheckPolicyCreator(OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  5426 	{
  5427 	return (&(*this))->CheckPolicyCreator(KSuppressPlatSecDiagnostic);
  5428 	}
  5429 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  5430 
  5431 #endif //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  5432 
  5433 
  5434 
  5435 #ifndef __KERNEL_MODE__
  5436 
  5437 /**
  5438 Appends an object pointer onto the array.
  5439 
  5440 The function leaves with one of the system wide error codes, if the operation fails.
  5441 
  5442 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5443 
  5444 @param anEntry The object pointer to be appended.
  5445 */
  5446 template <class T>
  5447 inline void RPointerArray<T>::AppendL(const T* anEntry)
  5448 	{ User::LeaveIfError(Append(anEntry));}
  5449 
  5450 
  5451 /**
  5452 Inserts an object pointer into the array at the specified position.
  5453 
  5454 The function leaves with one of the system wide error codes, if
  5455 the operation fails.
  5456 
  5457 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5458 
  5459 @param anEntry The object pointer to be inserted.
  5460 @param aPos    The position within the array where the object pointer is to be 
  5461                inserted. The position is relative to zero, i.e. zero implies
  5462 			   that a pointer is inserted at the beginning of the array.
  5463 
  5464 @panic USER 131, if aPos is negative, or is greater than the number of object
  5465        pointers currently in the array.
  5466 */
  5467 template <class T>
  5468 inline void RPointerArray<T>::InsertL(const T* anEntry, TInt aPos)
  5469 	{ User::LeaveIfError(Insert(anEntry,aPos)); }
  5470 
  5471 
  5472 /**
  5473 Finds the first object pointer in the array which matches the specified object 
  5474 pointer, using a sequential search.
  5475 
  5476 Matching is based on the comparison of pointers.
  5477 
  5478 The find operation always starts at the low index end of the array. There 
  5479 is no assumption about the order of objects in the array.
  5480 
  5481 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5482 
  5483 @param anEntry The object pointer to be found.
  5484 @return The index of the first matching object pointer within the array.
  5485 @leave KErrNotFound, if no matching object pointer can be found.
  5486 */
  5487 template <class T>
  5488 inline TInt RPointerArray<T>::FindL(const T* anEntry) const
  5489 	{ return User::LeaveIfError(Find(anEntry));}
  5490 
  5491 
  5492 /**
  5493 Finds the first object pointer in the array whose object matches the specified 
  5494 object, using a sequential search and a matching algorithm.
  5495 
  5496 The algorithm for determining whether two class T objects match is provided 
  5497 by a function supplied by the caller.
  5498 
  5499 The find operation always starts at the low index end of the array. There 
  5500 is no assumption about the order of objects in the array.
  5501 
  5502 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5503 
  5504 @param anEntry    The object pointer to be found.
  5505 @param anIdentity A package encapsulating the function which determines whether 
  5506                   two class T objects match.
  5507 
  5508 @return The index of the first matching object pointer within the array.
  5509 @leave  KErrNotFound, if no suitable object pointer can be found.
  5510 */
  5511 template <class T>
  5512 inline TInt RPointerArray<T>::FindL(const T* anEntry, TIdentityRelation<T> anIdentity) const
  5513 	{ return User::LeaveIfError(Find(anEntry, anIdentity));}
  5514 
  5515 
  5516 /**
  5517 Finds the last object pointer in the array which matches the specified object 
  5518 pointer, using a sequential search.
  5519 
  5520 Matching is based on the comparison of pointers.
  5521 
  5522 The find operation always starts at the high index end of the array. There 
  5523 is no assumption about the order of objects in the array.
  5524 
  5525 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5526 
  5527 @param anEntry The object pointer to be found.
  5528 @return The index of the last matching object pointer within the array.
  5529 @leave KErrNotFound, if no matching object pointer can be found.
  5530 */
  5531 template <class T>
  5532 inline TInt RPointerArray<T>::FindReverseL(const T* anEntry) const
  5533 	{ return User::LeaveIfError(FindReverse(anEntry));}
  5534 
  5535 
  5536 /**
  5537 Finds the last object pointer in the array whose object matches the specified 
  5538 object, using a sequential search and a matching algorithm.
  5539 
  5540 The algorithm for determining whether two class T objects match is provided 
  5541 by a function supplied by the caller.
  5542 
  5543 The find operation always starts at the high index end of the array. There 
  5544 is no assumption about the order of objects in the array.
  5545 
  5546 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5547 
  5548 @param anEntry    The object pointer to be found.
  5549 @param anIdentity A package encapsulating the function which determines whether 
  5550                   two class T objects match.
  5551 
  5552 @return The index of the last matching object pointer within the array.
  5553 @leave  KErrNotFound, if no suitable object pointer can be found.
  5554 */
  5555 template <class T>
  5556 inline TInt RPointerArray<T>::FindReverseL(const T* anEntry, TIdentityRelation<T> anIdentity) const
  5557 	{ return User::LeaveIfError(FindReverse(anEntry, anIdentity));}
  5558 
  5559 
  5560 /**
  5561 Finds the object pointer in the array that matches the specified object
  5562 pointer, using a binary search technique.
  5563 
  5564 The function assumes that object pointers in the array are in address order.
  5565 
  5566 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5567 
  5568 @param anEntry The object pointer to be found.
  5569 
  5570 @return The index of the matching object pointer within the array
  5571 @leave KErrNotFound, if no suitable object pointer can be found.
  5572 */
  5573 template <class T>
  5574 inline TInt RPointerArray<T>::FindInAddressOrderL(const T* anEntry) const
  5575 	{ return User::LeaveIfError(FindInAddressOrder(anEntry));}
  5576 
  5577 
  5578 /**
  5579 Finds the object pointer in the array whose object matches the specified
  5580 object, using a binary search technique and an ordering algorithm.
  5581 
  5582 The function assumes that existing object pointers in the array are ordered 
  5583 so that the objects themselves are in object order as determined by an algorithm 
  5584 supplied by the caller and packaged as a TLinearOrder<T>.
  5585 
  5586 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5587 
  5588 @param anEntry The object pointer to be found.
  5589 @param anOrder A package encapsulating the function which determines the order 
  5590                of two class T objects.
  5591 
  5592 @return The index of the matching object pointer within the array.
  5593 
  5594 @leave KErrNotFound, if no suitable object pointer can be found.
  5595 */
  5596 template <class T>
  5597 inline TInt RPointerArray<T>::FindInOrderL(const T* anEntry, TLinearOrder<T> anOrder) const
  5598 	{ return User::LeaveIfError(FindInOrder(anEntry, anOrder));}
  5599 
  5600 
  5601 /**
  5602 Finds the object pointer in the array that matches the specified object
  5603 pointer, using a binary search technique.
  5604 
  5605 The function assumes that object pointers in the array are in address order.
  5606 
  5607 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5608 
  5609 @param anEntry The object pointer to be found.
  5610 @param anIndex A reference to a TInt into which the
  5611                function puts an index value: If the function does not leave,
  5612                this is the index of the matching object pointer within the
  5613                array. If the function leaves with KErrNotFound, this is the
  5614                index of the first object pointer within the array which
  5615                logically follows after anEntry.
  5616 
  5617 @leave KErrNotFound, if no suitable object pointer can be found.
  5618 */
  5619 template <class T>
  5620 inline void RPointerArray<T>::FindInAddressOrderL(const T* anEntry, TInt& anIndex) const
  5621 	{ User::LeaveIfError(FindInAddressOrder(anEntry, anIndex)); }
  5622 
  5623 
  5624 /**
  5625 Finds the object pointer in the array whose object matches the specified
  5626 object, using a binary search technique and an ordering algorithm.
  5627 
  5628 The function assumes that existing object pointers in the array are ordered 
  5629 so that the objects themselves are in object order as determined by an
  5630 algorithm supplied by the caller and packaged as a TLinearOrder<T>.
  5631 
  5632 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5633 
  5634 @param anEntry The object pointer to be found.
  5635 @param anIndex A TInt supplied by the caller. On return, contains an
  5636                index value:
  5637                If the function does not leave, this is the index of the
  5638                matching object pointer within the array. 
  5639                If the function leaves with KErrNotFound, this is the index of
  5640                the first object pointer in the array whose object is bigger
  5641                than the entry being searched for - if no objects pointed to in
  5642                the array are bigger, then the index value is the same as the
  5643                total number of object pointers in the array.
  5644 
  5645 @param anOrder A package encapsulating the function which determines the order 
  5646                of two class T objects.
  5647 
  5648 @leave         KErrNotFound, if no suitable object pointer can be found.
  5649 */
  5650 template <class T>
  5651 inline void RPointerArray<T>::FindInOrderL(const T* anEntry, TInt& anIndex, TLinearOrder<T> anOrder) const
  5652 	{ User::LeaveIfError(FindInOrder(anEntry, anIndex, anOrder)); }
  5653 
  5654 
  5655 /**
  5656 Finds the object pointer in the array that matches the specified object
  5657 pointer, using a binary search technique.
  5658 
  5659 Where there is more than one matching element, it finds the first, the last
  5660 or any matching element as specified by the value of aMode.
  5661 
  5662 The function assumes that object pointers in the array are in address order.
  5663 
  5664 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5665 
  5666 @param	anEntry The object pointer to be found.
  5667 @param	aMode   Specifies whether to find the first match, the last match or
  5668                 any match, as defined by one of the TArrayFindMode enum values.
  5669 
  5670 @return If there is a matching element, the array index of a matching element -  what
  5671         the index refers to depends on the value of aMode:
  5672         if this is EArrayFindMode_First, then the index refers to the first matching element;
  5673         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  5674         if this is EArrayFindMode_Last, then the index refers to first element that follows the
  5675         last matching element - if the last matching element is also the last element of the array,
  5676         then the index value is the same as the total number of elements in the array.
  5677         
  5678 @leave  KErrNotFound if no matching entry exists.
  5679 
  5680 @see TArrayFindMode
  5681 */
  5682 template <class T>
  5683 inline TInt RPointerArray<T>::SpecificFindInAddressOrderL(const T* anEntry, TInt aMode) const
  5684 	{ return User::LeaveIfError(SpecificFindInAddressOrder(anEntry, aMode));}
  5685 
  5686 
  5687 /**
  5688 Finds the object pointer in the array whose object matches the specified
  5689 object, using a binary search technique and an ordering algorithm.
  5690 
  5691 In the case that there is more than one matching element finds the first, last
  5692 or any match as specified by the value of aMode.
  5693 
  5694 The function assumes that existing object pointers in the array are ordered 
  5695 so that the objects themselves are in object order as determined by an algorithm 
  5696 supplied by the caller and packaged as a TLinearOrder<T> type.
  5697 
  5698 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5699 
  5700 @param anEntry The object pointer to be found.
  5701 @param anOrder A package encapsulating the function which determines the order 
  5702                of two class T objects.
  5703 @param	aMode  Specifies whether to find the first match, the last match or any match,
  5704                as defined by one of the TArrayFindMode enum values.
  5705 
  5706 @return If there is a matching element, the array index of a matching
  5707         element -  what the index refers to depends on the value of aMode:
  5708         if this is EArrayFindMode_First, then the index refers to the first matching element;
  5709         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  5710         if this is EArrayFindMode_Last, then the index refers to first element that follows
  5711         the last matching element - if the last matching element is also the last element of the array, then
  5712         the index value is the same as the total number of elements in the array.
  5713 
  5714 @leave  KErrNotFound if no matching entry exists.
  5715 
  5716 @see TArrayFindMode
  5717 */
  5718 template <class T>
  5719 inline TInt RPointerArray<T>::SpecificFindInOrderL(const T* anEntry, TLinearOrder<T> anOrder, TInt aMode) const
  5720 	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, anOrder, aMode));}
  5721 
  5722 
  5723 /**
  5724 Finds the object pointer in the array that matches the specified object
  5725 pointer, using a binary search technique.
  5726 
  5727 Where there is more than one matching element, it finds the first, the last or
  5728 any matching element as specified by the value of aMode.
  5729 
  5730 The function assumes that object pointers in the array are in address order.
  5731 
  5732 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5733 
  5734 @param anEntry The object pointer to be found.
  5735 @param anIndex A TInt type supplied by the caller. On return, it contains an index
  5736                value depending on whether a match is found and on the value of aMode.
  5737                If there is no matching element in the array, then this is the  index
  5738                of the first element in the array that is bigger than the element being
  5739                searched for - if no elements in the array are bigger, then the index
  5740                value is the same as the total number of elements in the array.
  5741                If there is a matching element, then what the index refers to depends
  5742                on the value of aMode:
  5743                if this is EArrayFindMode_First, then the index refers to the first matching element;
  5744                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  5745                if this is EArrayFindMode_Last, then the index refers to first element that follows
  5746                the last matching element - if the last matching element is also the last element
  5747                of the array, then the index value is the same as the total number of elements in the array.
  5748                
  5749 @param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
  5750                one of the TArrayFindMode enum values.
  5751 
  5752 @leave  KErrNotFound, if no suitable object pointer can be found.
  5753 
  5754 @see TArrayFindMode
  5755 */
  5756 template <class T>
  5757 inline void RPointerArray<T>::SpecificFindInAddressOrderL(const T* anEntry, TInt& anIndex, TInt aMode) const
  5758 	{ User::LeaveIfError(SpecificFindInAddressOrder(anEntry, anIndex, aMode)); }
  5759 
  5760 
  5761 /**
  5762 Finds the object pointer in the array whose object matches the specified
  5763 object, using a binary search technique and an ordering algorithm.
  5764 
  5765 Where there is more than one matching element, it finds the first, the last or any
  5766 matching element as specified by the value of aMode.
  5767 
  5768 The function assumes that existing object pointers in the array are ordered 
  5769 so that the objects themselves are in object order as determined by an
  5770 algorithm supplied by the caller and packaged as a TLinearOrder<T>.
  5771 
  5772 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5773 
  5774 @param anEntry The object pointer to be found.
  5775 @param anIndex A TInt type supplied by the caller. On return, it contains an index
  5776                value depending on whether a match is found and on the value of aMode.
  5777                If there is no matching element in the array, then this is
  5778                the index of the first element in the array that is bigger than
  5779                the element being searched for - if no elements in the array are bigger,
  5780                then the index value is the same as the total number of elements in the array.
  5781                If there is a matching element, then what the index refers to depends
  5782                on the value of aMode:
  5783                if this is EArrayFindMode_First, then the index refers to the first matching element;
  5784                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  5785                if this is EArrayFindMode_Last, then the index refers to first element that follows
  5786                the last matching element - if the last matching element is also the last element of
  5787                the array, then the index value is the same as the total number of elements in the array.
  5788 
  5789 @param anOrder A package encapsulating the function which determines the order 
  5790                of two class T objects.
  5791 @param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
  5792                one of the TArrayFindModeenum values.
  5793 
  5794 @leave  KErrNotFound, if no suitable object pointer can be found.
  5795 
  5796 @see TArrayFindMode
  5797 */
  5798 template <class T>
  5799 inline void RPointerArray<T>::SpecificFindInOrderL(const T* anEntry, TInt& anIndex, TLinearOrder<T> anOrder, TInt aMode) const
  5800 	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, anOrder, aMode)); }
  5801 
  5802 
  5803 /**
  5804 Inserts an object pointer into the array in address order.
  5805 
  5806 No duplicate entries are permitted.
  5807 The function assumes that existing object pointers within the array are in 
  5808 address order.
  5809 
  5810 The function leaves with one of the system wide error codes, if the operation fails.
  5811 
  5812 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5813 
  5814 @param anEntry The object pointer to be inserted.
  5815 */
  5816 template <class T>
  5817 inline void RPointerArray<T>::InsertInAddressOrderL(const T* anEntry)
  5818 	{ User::LeaveIfError(InsertInAddressOrder(anEntry)); }
  5819 
  5820 
  5821 /**
  5822 Inserts an object pointer into the array so that the object itself is in object 
  5823 order.
  5824 
  5825 The algorithm for determining the order of two class T objects is provided 
  5826 by a function supplied by the caller.
  5827 
  5828 No duplicate entries are permitted.
  5829 
  5830 The function assumes that the array is ordered so that the referenced objects 
  5831 are in object order.
  5832 
  5833 The function leaves with one of the system wide error codes, if the operation fails.
  5834 
  5835 Note that the array remains unchanged following an attempt to insert a duplicate
  5836 entry.
  5837 
  5838 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5839 
  5840 @param anEntry The object pointer to be inserted.
  5841 @param anOrder A package encapsulating the function which determines the order 
  5842                of two class T objects.
  5843 */
  5844 template <class T>
  5845 inline void RPointerArray<T>::InsertInOrderL(const T* anEntry, TLinearOrder<T> anOrder)
  5846 	{ User::LeaveIfError(InsertInOrder(anEntry, anOrder)); }
  5847 
  5848 
  5849 /**
  5850 Inserts an object pointer into the array in address order, allowing duplicates.
  5851 
  5852 If the new object pointer is a duplicate of an existing object pointer in 
  5853 the array, then the new pointer is inserted after the existing one. If more 
  5854 than one duplicate object pointer already exists in the array, then any new 
  5855 duplicate pointer is inserted after the last one.
  5856 
  5857 The function assumes that existing object pointers within the array are in 
  5858 address order.
  5859 
  5860 The function leaves with one of the system wide error codes, if the operation fails.
  5861 
  5862 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5863 
  5864 @param anEntry The object pointer to be inserted.
  5865 */
  5866 template <class T>
  5867 inline void RPointerArray<T>::InsertInAddressOrderAllowRepeatsL(const T* anEntry)
  5868 	{ User::LeaveIfError(InsertInAddressOrderAllowRepeats(anEntry)); }
  5869 
  5870 
  5871 /**
  5872 Inserts an object pointer into the array so that the object itself is in object 
  5873 order, allowing duplicates
  5874 
  5875 The algorithm for determining the order of two class T objects is provided 
  5876 by a function supplied by the caller.
  5877 
  5878 If the specified object is a duplicate of an existing object, then the new 
  5879 pointer is inserted after the pointer to the existing object. If more than 
  5880 one duplicate object already exists, then the new pointer is inserted after 
  5881 the pointer to the last one.
  5882 
  5883 The function leaves with one of the system wide error codes, if the operation fails.
  5884 
  5885 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5886 
  5887 @param anEntry The object pointer to be inserted. 
  5888 @param anOrder A package encapsulating the function which determines the order 
  5889                of two class T objects.
  5890 */
  5891 template <class T>
  5892 inline void RPointerArray<T>::InsertInOrderAllowRepeatsL(const T* anEntry, TLinearOrder<T> anOrder)
  5893 	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry, anOrder)); }
  5894 
  5895 
  5896 
  5897 /**
  5898 Reserves space for the specified number of elements.
  5899 
  5900 After a call to this function, the memory allocated to the array is sufficient 
  5901 to hold the number of object pointers specified. Adding new object pointers to the array 
  5902 does not result in a re-allocation of memory until the the total number of 
  5903 pointers exceeds the specified count.
  5904 
  5905 @param	aCount	The number of object pointers for which space should be reserved
  5906 @leave KErrNoMemory	If the requested amount of memory could not be allocated
  5907 */
  5908 template <class T>
  5909 inline void RPointerArray<T>::ReserveL(TInt aCount)
  5910 	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
  5911 
  5912 
  5913 
  5914 // Specialization for RPointerArray<TAny>
  5915 
  5916 /**
  5917 Appends an pointer onto the array.
  5918 
  5919 The function leaves with one of the system wide error codes, if the operation fails.
  5920 
  5921 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5922 
  5923 @param anEntry The pointer to be appended.
  5924 */
  5925 inline void RPointerArray<TAny>::AppendL(const TAny* anEntry)
  5926 	{ User::LeaveIfError(Append(anEntry));}
  5927 
  5928 
  5929 /**
  5930 Inserts an pointer into the array at the specified position.
  5931 
  5932 The function leaves with one of the system wide error codes, if
  5933 the operation fails.
  5934 
  5935 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5936 
  5937 @param anEntry The pointer to be inserted.
  5938 @param aPos    The position within the array where the pointer is to be 
  5939                inserted. The position is relative to zero, i.e. zero implies
  5940 			   that a pointer is inserted at the beginning of the array.
  5941 
  5942 @panic USER 131, if aPos is negative, or is greater than the number of object
  5943        pointers currently in the array.
  5944 */
  5945 inline void RPointerArray<TAny>::InsertL(const TAny* anEntry, TInt aPos)
  5946 	{ User::LeaveIfError(Insert(anEntry,aPos)); }
  5947 
  5948 
  5949 /**
  5950 Finds the first pointer in the array which matches the specified pointer, using
  5951 a sequential search.
  5952 
  5953 Matching is based on the comparison of pointers.
  5954 
  5955 The find operation always starts at the low index end of the array. There 
  5956 is no assumption about the order of objects in the array.
  5957 
  5958 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5959 
  5960 @param anEntry The pointer to be found.
  5961 @return The index of the first matching pointer within the array.
  5962 @leave KErrNotFound, if no matching pointer can be found.
  5963 */
  5964 inline TInt RPointerArray<TAny>::FindL(const TAny* anEntry) const
  5965 	{ return User::LeaveIfError(Find(anEntry));}
  5966 
  5967 
  5968 /**
  5969 Finds the last pointer in the array which matches the specified pointer, using
  5970 a sequential search.
  5971 
  5972 Matching is based on the comparison of pointers.
  5973 
  5974 The find operation always starts at the high index end of the array. There 
  5975 is no assumption about the order of objects in the array.
  5976 
  5977 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5978 
  5979 @param anEntry The pointer to be found.
  5980 @return The index of the last matching pointer within the array.
  5981 @leave KErrNotFound, if no matching pointer can be found.
  5982 */
  5983 inline TInt RPointerArray<TAny>::FindReverseL(const TAny* anEntry) const
  5984 	{ return User::LeaveIfError(FindReverse(anEntry));}
  5985 
  5986 
  5987 /**
  5988 Finds the pointer in the array that matches the specified pointer, using a
  5989 binary search technique.
  5990 
  5991 The function assumes that pointers in the array are in address order.
  5992 
  5993 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  5994 
  5995 @param anEntry The pointer to be found.
  5996 
  5997 @return The index of the matching pointer within the array
  5998 @leave KErrNotFound, if no suitable pointer can be found.
  5999 */
  6000 inline TInt RPointerArray<TAny>::FindInAddressOrderL(const TAny* anEntry) const
  6001 	{ return User::LeaveIfError(FindInAddressOrder(anEntry));}
  6002 
  6003 
  6004 /**
  6005 Finds the pointer in the array that matches the specified pointer, using a
  6006 binary search technique.
  6007 
  6008 The function assumes that pointers in the array are in address order.
  6009 
  6010 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6011 
  6012 @param anEntry The pointer to be found.
  6013 @param anIndex A reference to a TInt into which the
  6014                function puts an index value: If the function does not leave,
  6015 			   this is the index of the matching pointer within the array. If the
  6016 			   function leaves with KErrNotFound, this is the index of the last
  6017 			   pointer within the array which logically precedes
  6018 			   anEntry.
  6019 
  6020 @leave KErrNotFound, if no suitable pointer can be found.
  6021 */
  6022 inline void RPointerArray<TAny>::FindInAddressOrderL(const TAny* anEntry, TInt& anIndex) const
  6023 	{ User::LeaveIfError(FindInAddressOrder(anEntry, anIndex)); }
  6024 
  6025 
  6026 /**
  6027 Finds the pointer in the array that matches the specified pointer, using a
  6028 binary search technique.
  6029 
  6030 Where there is more than one matching element, it finds the first, the last
  6031 or any matching element as specified by the value of aMode.
  6032 
  6033 The function assumes that pointers in the array are in address order.
  6034 
  6035 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6036 
  6037 @param	anEntry The pointer to be found.
  6038 @param	aMode   Specifies whether to find the first match, the last match or
  6039                 any match, as defined by one of the TArrayFindMode enum values.
  6040 
  6041 @return If there is a matching element, the array index of a matching element -  what
  6042         the index refers to depends on the value of aMode:
  6043         if this is EArrayFindMode_First, then the index refers to the first matching element;
  6044         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6045         if this is EArrayFindMode_Last, then the index refers to first element that follows the
  6046         last matching element - if the last matching element is also the last element of the array,
  6047         then the index value is the same as the total number of elements in the array.
  6048         
  6049 @leave  KErrNotFound if no matching entry exists.
  6050 
  6051 @see TArrayFindMode
  6052 */
  6053 inline TInt RPointerArray<TAny>::SpecificFindInAddressOrderL(const TAny* anEntry, TInt aMode) const
  6054 	{ return User::LeaveIfError(SpecificFindInAddressOrder(anEntry, aMode));}
  6055 
  6056 
  6057 /**
  6058 Finds the pointer in the array that matches the specified pointer, using a
  6059 binary search technique.
  6060 
  6061 Where there is more than one matching element, it finds the first, the last or
  6062 any matching element as specified by the value of aMode.
  6063 
  6064 The function assumes that pointers in the array are in address order.
  6065 
  6066 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6067 
  6068 @param anEntry The pointer to be found.
  6069 @param anIndex A TInt type supplied by the caller. On return, it contains an index
  6070                value depending on whether a match is found and on the value of aMode.
  6071                If there is no matching element in the array, then this is the  index
  6072                of the first element in the array that is bigger than the element being
  6073                searched for - if no elements in the array are bigger, then the index
  6074                value is the same as the total number of elements in the array.
  6075                If there is a matching element, then what the index refers to depends
  6076                on the value of aMode:
  6077                if this is EArrayFindMode_First, then the index refers to the first matching element;
  6078                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6079                if this is EArrayFindMode_Last, then the index refers to first element that follows
  6080                the last matching element - if the last matching element is also the last element
  6081                of the array, then the index value is the same as the total number of elements in the array.
  6082                
  6083 @param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
  6084                one of the TArrayFindMode enum values.
  6085 
  6086 @leave  KErrNotFound, if no suitable pointer can be found.
  6087 
  6088 @see TArrayFindMode
  6089 */
  6090 inline void RPointerArray<TAny>::SpecificFindInAddressOrderL(const TAny* anEntry, TInt& anIndex, TInt aMode) const
  6091 	{ User::LeaveIfError(SpecificFindInAddressOrder(anEntry, anIndex, aMode)); }
  6092 
  6093 
  6094 /**
  6095 Inserts an pointer into the array in address order.
  6096 
  6097 No duplicate entries are permitted.  The function assumes that existing pointers
  6098 within the array are in address order.
  6099 
  6100 The function leaves with one of the system wide error codes, if the operation fails.
  6101 
  6102 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6103 
  6104 @param anEntry The pointer to be inserted.
  6105 */
  6106 inline void RPointerArray<TAny>::InsertInAddressOrderL(const TAny* anEntry)
  6107 	{ User::LeaveIfError(InsertInAddressOrder(anEntry)); }
  6108 
  6109 
  6110 /**
  6111 Inserts an pointer into the array in address order, allowing duplicates.
  6112 
  6113 If the new pointer is a duplicate of an existing pointer in the array, then the
  6114 new pointer is inserted after the existing one. If more than one duplicate
  6115 pointer already exists in the array, then any new duplicate pointer is inserted
  6116 after the last one.
  6117 
  6118 The function assumes that existing pointers within the array are in address
  6119 order.
  6120 
  6121 The function leaves with one of the system wide error codes, if the operation fails.
  6122 
  6123 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6124 
  6125 @param anEntry The pointer to be inserted.
  6126 */
  6127 inline void RPointerArray<TAny>::InsertInAddressOrderAllowRepeatsL(const TAny* anEntry)
  6128 	{ User::LeaveIfError(InsertInAddressOrderAllowRepeats(anEntry)); }
  6129 
  6130 
  6131 /**
  6132 Apends an object onto the array.
  6133 
  6134 The function leaves with one of the system wide error codes, if the operation fails.
  6135 
  6136 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6137 
  6138 @param anEntry    A reference to the object of type class T to be appended.
  6139 */
  6140 template <class T>
  6141 inline void RArray<T>::AppendL(const T& anEntry)
  6142 	{ User::LeaveIfError(Append(anEntry));}
  6143 
  6144 
  6145 /**
  6146 Inserts an object into the array at a specified position.
  6147 
  6148 The function leaves with one of the system wide error codes, if the operation fails.
  6149 
  6150 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6151 
  6152 @param anEntry The class T object to be inserted.
  6153 @param aPos    The position within the array where the object is to
  6154                be inserted. The position is relative to zero, i.e. zero
  6155 			   implies that an object is inserted at the beginning of
  6156 			   the array.
  6157 			   
  6158 @panic USER 131, if aPos is negative or is greater than the number of objects
  6159        currently in the array.
  6160 */
  6161 template <class T>
  6162 inline void RArray<T>::InsertL(const T& anEntry, TInt aPos)
  6163 	{ User::LeaveIfError(Insert(anEntry, aPos));}
  6164 
  6165 
  6166 /**
  6167 Finds the first object in the array which matches the specified object using 
  6168 a sequential search.
  6169 
  6170 Matching is based on the comparison of a TInt value at the key offset position 
  6171 within the objects.
  6172 
  6173 For classes which define their own equality operator (==), the alternative method
  6174 FindL(const T& anEntry, TIdentityRelation<T> anIdentity) is recommended.
  6175 
  6176 The find operation always starts at the low index end of the array. There 
  6177 is no assumption about the order of objects in the array.
  6178 
  6179 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6180 
  6181 @param anEntry A reference to an object of type class T to be used for matching.
  6182 
  6183 @return The index of the first matching object within the array. 
  6184 @leave  KErrNotFound, if no matching object can be found.
  6185 */
  6186 template <class T>
  6187 inline TInt RArray<T>::FindL(const T& anEntry) const
  6188 	{ return User::LeaveIfError(Find(anEntry));}
  6189 
  6190 
  6191 /**
  6192 Finds the first object in the array which matches the specified object using 
  6193 a sequential search and a matching algorithm.
  6194 
  6195 The algorithm for determining whether two class T type objects match is provided 
  6196 by a function supplied by the caller.
  6197 
  6198 Such a function need not be supplied if an equality operator (==) is defined for class T. 
  6199 In this case, default construction of anIdentity provides matching.
  6200 
  6201 See Find(const T& anEntry, TIdentityRelation<T> anIdentity) for more details.
  6202 
  6203 The find operation always starts at the low index end of the array. There 
  6204 is no assumption about the order of objects in the array.
  6205 
  6206 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6207 
  6208 @param anEntry    A reference to an object of type class T to be used
  6209                   for matching.
  6210 @param anIdentity A package encapsulating the function which determines whether 
  6211                   two class T type objects match.
  6212 
  6213 @return The index of the first matching object within the array.
  6214 @leave  KErrNotFound, if no matching object can be found.
  6215 */
  6216 template <class T>
  6217 inline TInt RArray<T>::FindL(const T& anEntry, TIdentityRelation<T> anIdentity) const
  6218 	{ return User::LeaveIfError(Find(anEntry, anIdentity));}
  6219 
  6220 
  6221 /**
  6222 Finds the last object in the array which matches the specified object using 
  6223 a sequential search.
  6224 
  6225 Matching is based on the comparison of a TInt value at the key offset position 
  6226 within the objects.
  6227 
  6228 For classes which define their own equality operator (==), the alternative method
  6229 FindReverseL(const T& anEntry, TIdentityRelation<T> anIdentity) is recommended.
  6230 
  6231 The find operation always starts at the high index end of the array. There 
  6232 is no assumption about the order of objects in the array.
  6233 
  6234 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6235 
  6236 @param anEntry A reference to an object of type class T to be used for matching.
  6237 
  6238 @return The index of the last matching object within the array. 
  6239 @leave  KErrNotFound, if no matching object can be found.
  6240 */
  6241 template <class T>
  6242 inline TInt RArray<T>::FindReverseL(const T& anEntry) const
  6243 	{ return User::LeaveIfError(FindReverse(anEntry));}
  6244 
  6245 
  6246 /**
  6247 Finds the last object in the array which matches the specified object using 
  6248 a sequential search and a matching algorithm.
  6249 
  6250 The algorithm for determining whether two class T type objects match is provided 
  6251 by a function supplied by the caller.
  6252 
  6253 Such a function need not be supplied if an equality operator (==) is defined for class T. 
  6254 In this case, default construction of anIdentity provides matching.
  6255 
  6256 See Find(const T& anEntry, TIdentityRelation<T> anIdentity) for more details.
  6257 
  6258 The find operation always starts at the high index end of the array. There 
  6259 is no assumption about the order of objects in the array.
  6260 
  6261 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6262 
  6263 @param anEntry    A reference to an object of type class T to be used
  6264                   for matching.
  6265 @param anIdentity A package encapsulating the function which determines whether 
  6266                   two class T type objects match.
  6267 
  6268 @return The index of the last matching object within the array.
  6269 @leave  KErrNotFound, if no matching object can be found.
  6270 */
  6271 template <class T>
  6272 inline TInt RArray<T>::FindReverseL(const T& anEntry, TIdentityRelation<T> anIdentity) const
  6273 	{ return User::LeaveIfError(FindReverse(anEntry, anIdentity));}
  6274 
  6275 
  6276 /**
  6277 Finds the object in the array which matches the specified object using a binary 
  6278 search technique.
  6279 
  6280 The function assumes that existing objects within the array are in signed 
  6281 key order.
  6282 
  6283 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6284 
  6285 @param anEntry A reference to an object of type class T to be used for matching.
  6286 
  6287 @return The index of the matching object within the array.
  6288 @leave  KErrNotFound, if no matching object can be found.
  6289 */
  6290 template <class T>
  6291 inline TInt RArray<T>::FindInSignedKeyOrderL(const T& anEntry) const
  6292 	{ return User::LeaveIfError(FindInSignedKeyOrder(anEntry));}
  6293 
  6294 
  6295 /**
  6296 Finds the object in the array which matches the specified object using a binary 
  6297 search technique.
  6298 
  6299 The function assumes that existing objects within the array are in unsigned 
  6300 key order.
  6301 
  6302 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6303 
  6304 @param anEntry A reference to an object of type class T to be used for matching.
  6305 
  6306 @return The index of the matching object within the array.
  6307 @leave  KErrNotFound, if no matching object can be found.
  6308 */
  6309 template <class T>
  6310 inline TInt RArray<T>::FindInUnsignedKeyOrderL(const T& anEntry) const
  6311 	{ return User::LeaveIfError(FindInUnsignedKeyOrder(anEntry));}
  6312 
  6313 
  6314 /**
  6315 Finds the object in the array which matches the specified object using a binary 
  6316 search technique and an ordering algorithm.
  6317 
  6318 The function assumes that existing objects within the array are in object 
  6319 order as determined by an algorithm supplied by the caller and packaged as 
  6320 a TLinearOrder<T>.
  6321 
  6322 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6323 
  6324 @param anEntry A reference to an object of type class T to be used for matching.
  6325 @param anOrder A package encapsulating the function which determines the order 
  6326                of two class T objects.
  6327 
  6328 @return The index of the matching object within the array.
  6329 @leave  KErrNotFound if no matching object can be found.
  6330 */
  6331 template <class T>
  6332 inline TInt RArray<T>::FindInOrderL(const T& anEntry, TLinearOrder<T> anOrder) const
  6333 { return User::LeaveIfError(FindInOrder(anEntry, anOrder));}
  6334 
  6335 
  6336 /**
  6337 Finds the object in the array which matches the specified object using a binary 
  6338 search technique.
  6339 
  6340 The function assumes that existing objects within the array are in signed 
  6341 key order.
  6342 
  6343 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6344 
  6345 @param anEntry A reference to an object of type class T to be used for matching.
  6346 @param anIndex On return contains an index value of the matching object within the array.
  6347                If the function leaves with KErrNotFound,this is the index of the
  6348                first element in the array whose key is bigger than the key of the
  6349                element being sought. If there are no elements in the array with
  6350                a bigger key, then the index value is the same as the total 
  6351                number of elements in the array.
  6352 @leave KErrNotFound, if no matching object can be found.
  6353 */
  6354 template <class T>
  6355 inline void RArray<T>::FindInSignedKeyOrderL(const T& anEntry, TInt& anIndex) const
  6356 	{ User::LeaveIfError(FindInSignedKeyOrder(anEntry, anIndex));}
  6357 
  6358 
  6359 /**
  6360 Finds the object in the array which matches the specified object using a binary 
  6361 search technique.
  6362 
  6363 The function assumes that existing objects within the array are in unsigned 
  6364 key order.
  6365 
  6366 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6367 
  6368 @param anEntry A reference to an object of type class T to be used for matching.
  6369 @param anIndex On return contains an index value of the matching object within the array. 
  6370                If the function leaves with KErrNotFound,  this is the index of the
  6371                first element in the array whose key is bigger than the key of the
  6372                element being sought. If there are no elements in the array with
  6373                a bigger key, then the index value is the same as the total 
  6374                number of elements in the array.
  6375 @leave  KErrNotFound, if no matching object can be found.
  6376 */
  6377 template <class T>
  6378 inline void RArray<T>::FindInUnsignedKeyOrderL(const T& anEntry, TInt& anIndex) const
  6379 	{ User::LeaveIfError(FindInUnsignedKeyOrder(anEntry, anIndex));}
  6380 
  6381 
  6382 /**
  6383 Finds the object in the array which matches the specified object using a binary 
  6384 search technique and an ordering algorithm.
  6385 
  6386 The function assumes that existing objects within the array are in object 
  6387 order as determined by an algorithm supplied by the caller and packaged as 
  6388 a TLinearOrder<T>.
  6389 
  6390 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6391 
  6392 @param anEntry A reference to an object of type class T to be used for matching.
  6393 @param anIndex On return contains the index value of the matching object within the array
  6394                If the function leaves with KErrNotFound, this is the index of
  6395                the first element in the array that is bigger than the element
  6396                being searched for - if no elements in the array are bigger,
  6397                then the index value is the same as the total number of elements
  6398                in the array.
  6399 @param anOrder A package encapsulating the function which determines the order 
  6400                of two class T objects.
  6401 
  6402 @leave  KErrNotFound if no matching object can be found.
  6403 */
  6404 template <class T>
  6405 inline void RArray<T>::FindInOrderL(const T& anEntry, TInt& anIndex, TLinearOrder<T> anOrder) const
  6406 	{ User::LeaveIfError(FindInOrder(anEntry, anIndex, anOrder));}
  6407 
  6408 
  6409 /**
  6410 Finds the object in the array which matches the specified object using a binary 
  6411 search technique.
  6412 
  6413 The element ordering is determined by a signed 32-bit word
  6414 (the key) embedded in each array element. In the case that there is more than
  6415 one matching element, finds the first, last or any match as specified.
  6416 
  6417 The function assumes that existing objects within the array are in signed 
  6418 key order.
  6419 
  6420 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6421 
  6422 @param anEntry A reference to an object of type class T to be used for matching.
  6423 @param	aMode  Specifies whether to find the first match, the last match or
  6424                any match, as defined by one of the TArrayFindMode enum values.
  6425 
  6426 @return The array index of a matching element - what the index refers to
  6427         depends on the value of aMode:
  6428         if this is EArrayFindMode_First, then the index refers to the first matching element;
  6429         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6430         if this is EArrayFindMode_Last, then the index refers to first element that follows
  6431         the last matching element - if the last matching element is also the last element of
  6432         the array, then the index value is the same as the total number of elements in the array.
  6433 @leave  KErrNotFound if no matching entry exists.
  6434 
  6435 @see TArrayFindMode
  6436 */
  6437 template <class T>
  6438 inline TInt RArray<T>::SpecificFindInSignedKeyOrderL(const T& anEntry, TInt aMode) const
  6439 { return User::LeaveIfError(SpecificFindInSignedKeyOrder(anEntry, aMode));}
  6440 
  6441 
  6442 /**
  6443 Finds the object in the array which matches the specified object using a binary 
  6444 search technique.
  6445 
  6446 The element ordering is determined by an unsigned 32-bit word
  6447 (the key) embedded in each array element. In the case that there is more than
  6448 one matching element, finds the first, last or any match as specified.
  6449 
  6450 The function assumes that existing objects within the array are in unsigned 
  6451 key order.
  6452 
  6453 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6454 
  6455 @param anEntry A reference to an object of type class T to be used for matching.
  6456 @param	aMode  Specifies whether to find the first match, the last match or any
  6457         match, as defined by one of the TArrayFindMode enum values.
  6458 
  6459 @return The array index of a matching element -  what the index refers to
  6460         depends on the value of aMode:
  6461         if this is EArrayFindMode_First, then the index refers to the first matching element;
  6462         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6463         if this is EArrayFindMode_Last, then the index refers to first element that follows
  6464         the last matching element - if the last matching element is also the last element
  6465         of the array, then the index value is the same as the total number of elements in the array.
  6466         
  6467 @leave  KErrNotFound if no matching entry exists.
  6468 
  6469 @see TArrayFindMode
  6470 */
  6471 template <class T>
  6472 inline TInt RArray<T>::SpecificFindInUnsignedKeyOrderL(const T& anEntry, TInt aMode) const
  6473 	{ return User::LeaveIfError(SpecificFindInUnsignedKeyOrder(anEntry, aMode));}
  6474 
  6475 
  6476 /**
  6477 Finds the object in the array which matches the specified object using a binary 
  6478 search technique and an ordering algorithm.
  6479 
  6480 Where there is more than one matching element, it finds the first, the last or
  6481 any matching element as specified by the value of aMode.
  6482 
  6483 The function assumes that existing objects within the array are in object 
  6484 order as determined by an algorithm supplied by the caller and packaged as 
  6485 a TLinearOrder<T> type.
  6486 
  6487 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6488 
  6489 @param anEntry A reference to an object of type class T to be used for matching.
  6490 @param anOrder A package encapsulating the function which determines the order 
  6491                of two class T objects.
  6492 @param	aMode  Specifies whether to find the first match, the last match or any match,
  6493                as defined by one of the TArrayFindMode enum values.
  6494 
  6495 @return The array index of a matching element -  what the index refers to
  6496         depends on the value of aMode:
  6497         if this is EArrayFindMode_First, then the index refers to the first matching element;
  6498         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6499         if this is EArrayFindMode_Last, then the index refers to first element that follows
  6500         the last matching element - if the last matching element is also the last element
  6501         of the array, then the index value is the same as the total number of elements in the array.
  6502         
  6503 @leave KErrNotFound if no matching entry exists.
  6504 
  6505 @see TArrayFindMode
  6506 */
  6507 template <class T>
  6508 inline TInt RArray<T>::SpecificFindInOrderL(const T& anEntry, TLinearOrder<T> anOrder, TInt aMode) const
  6509 { return User::LeaveIfError(SpecificFindInOrder(anEntry, anOrder, aMode));}
  6510 
  6511 
  6512 /**
  6513 Finds the object in the array which matches the specified object using a binary 
  6514 search technique.
  6515 
  6516 The element ordering is determined by a signed 32-bit word
  6517 (the key) embedded in each array element. In the case that there is more than
  6518 one matching element, finds the first, last or any match as specified.
  6519 
  6520 The function assumes that existing objects within the array are in signed 
  6521 key order.
  6522 
  6523 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6524 
  6525 @param anEntry A reference to an object of type class T to be used for matching.
  6526 @param anIndex A TInt type supplied by the caller. On return, it contains an
  6527                index value depending on whether a match is found and on the
  6528                value of aMode. If there is no matching element in the array,
  6529                then this is the index of the first element in the array that
  6530                is bigger than the element being searched for - if no elements
  6531                in the array are bigger, then the index value is the same as
  6532                the total number of elements in the array.
  6533                If there is a matching element, then what the index refers to
  6534                depends on the value of aMode:
  6535                if this is EArrayFindMode_First, then the index refers to the first matching element;
  6536                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6537                if this is EArrayFindMode_Last, then the index refers to first element that follows
  6538                the last matching element - if the last matching element is also the last element
  6539                of the array, then the index value is the same as the total number of elements
  6540                in the array.
  6541 @param aMode   Specifies whether to find the first match, the last match or any match,
  6542                as defined by one of the TArrayFindMode enum values.
  6543                
  6544 @leave KErrNotFound if no matching entry exists.
  6545 
  6546 @see TArrayFindMode
  6547 */
  6548 template <class T>
  6549 inline void RArray<T>::SpecificFindInSignedKeyOrderL(const T& anEntry, TInt& anIndex, TInt aMode) const
  6550 	{ User::LeaveIfError(SpecificFindInSignedKeyOrder(anEntry, anIndex, aMode));}
  6551 
  6552 
  6553 /**
  6554 Finds the object in the array which matches the specified object using a binary 
  6555 search technique.
  6556 
  6557 The element ordering is determined by an unsigned 32-bit word
  6558 (the key) embedded in each array element. In the case that there is more than
  6559 one matching element, finds the first, last or any match as specified.
  6560 
  6561 The function assumes that existing objects within the array are in unsigned 
  6562 key order.
  6563 
  6564 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6565 
  6566 @param anEntry A reference to an object of type class T to be used for matching.
  6567 @param anIndex A TInt type supplied by the caller. On return, it contains an
  6568                index value depending on whether a match is found and on the
  6569                value of aMode. If there is no matching element in the array,
  6570                then this is the index of the first element in the array that
  6571                is bigger than the element being searched for - if no elements
  6572                in the array are bigger, then the index value is the same as
  6573                the total number of elements in the array. If there is a matching
  6574                element, then what the index refers to depends on the value of aMode:
  6575                if this is EArrayFindMode_First, then the index refers to the first matching element;
  6576                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6577                if this is EArrayFindMode_Last, then the index refers to first element that follows
  6578                the last matching element - if the last matching element is also the last element
  6579                of the array, then the index value is the same as the total number of elements in the array.
  6580 @param aMode   Specifies whether to find the first match, the last match or any match,
  6581                as defined by one of the  TArrayFindMode enum values.
  6582                
  6583 @leave KErrNotFound if no matching entry exists.
  6584 
  6585 @see TArrayFindMode
  6586 */
  6587 template <class T>
  6588 inline void RArray<T>::SpecificFindInUnsignedKeyOrderL(const T& anEntry, TInt& anIndex, TInt aMode) const
  6589 	{ User::LeaveIfError(SpecificFindInUnsignedKeyOrder(anEntry, anIndex, aMode));}
  6590 
  6591 
  6592 /**
  6593 Finds the object in the array which matches the specified object using a binary 
  6594 search technique and a specified ordering algorithm.
  6595 
  6596 Where there is more than one matching element, it finds the first, the last or
  6597 any matching element as specified by the value of aMode.
  6598 
  6599 The function assumes that existing objects within the array are in object 
  6600 order as determined by an algorithm supplied by the caller and packaged as 
  6601 a TLinearOrder<T> type.
  6602 
  6603 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6604 
  6605 @param anEntry A reference to an object of type class T to be used for matching.
  6606 @param anIndex A TInt type supplied by the caller. On return, it contains an
  6607                index value depending on whether a match is found and on the value
  6608                of aMode. If there is no matching element in the array, then this is
  6609                the  index of the first element in the array that is bigger than the
  6610                element being searched for - if no elements in the array are bigger,
  6611                then the index value is the same as the total number of elements
  6612                in the array. If there is a matching element, then what the index
  6613                refers to depends on the value of aMode:
  6614                if this is EArrayFindMode_First, then the index refers to the first matching element;
  6615                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6616                if this is EArrayFindMode_Last, then the index refers to first element that follows
  6617                the last matching element - if the last matching element is also the last element
  6618                of the array, then the index value is the same as the total number of elements in the array.
  6619                
  6620 @param anOrder A package encapsulating the function which determines the order 
  6621                of two class T objects.
  6622 @param aMode   Specifies whether to find the first match, the last match or any match,
  6623                as defined by one of the TArrayFindMode enum values.
  6624                
  6625 @leave KErrNotFound if no matching entry exists.
  6626 
  6627 @see TArrayFindMode
  6628 */
  6629 template <class T>
  6630 inline void RArray<T>::SpecificFindInOrderL(const T& anEntry, TInt& anIndex, TLinearOrder<T> anOrder, TInt aMode) const
  6631 	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, anOrder, aMode));}
  6632 
  6633 
  6634 /**
  6635 Inserts an object into the array in ascending signed key order.
  6636 
  6637 The order of two class T type objects is based on comparing a TInt value
  6638 located at the key offset position within the class T object.
  6639 
  6640 No duplicate entries are permitted.
  6641 
  6642 The function leaves with one of the system wide error codes, if the operation fails.
  6643 
  6644 Note that the array remains unchanged following an attempt to insert a duplicate entry.
  6645 
  6646 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6647 
  6648 @param anEntry A reference to the object of type class T to be inserted.
  6649 */
  6650 template <class T>
  6651 inline void RArray<T>::InsertInSignedKeyOrderL(const T& anEntry)
  6652 	{ User::LeaveIfError(InsertInSignedKeyOrder(anEntry));}
  6653 
  6654 
  6655 /**
  6656 Inserts an object into the array in ascending unsigned key order, not allowing 
  6657 duplicate entries.
  6658 
  6659 The order of two class T type objects is based on comparing a TUint value 
  6660 located at the key offset position within the class T object. 
  6661 
  6662 The function leaves with one of the system wide error codes, if the operation fails.
  6663 
  6664 Note that the array remains unchanged following an attempt to insert a duplicate entry.
  6665 
  6666 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6667 
  6668 @param anEntry A reference to the object of type class T to be inserted.
  6669 */
  6670 template <class T>
  6671 inline void RArray<T>::InsertInUnsignedKeyOrderL(const T& anEntry)
  6672 	{ User::LeaveIfError(InsertInUnsignedKeyOrder(anEntry));}
  6673 
  6674 
  6675 /**
  6676 Inserts an object of into the array in object order.
  6677 
  6678 The algorithm for determining the order of two class T type objects is provided 
  6679 by a function supplied by the caller.
  6680 
  6681 No duplicate entries are permitted.
  6682 
  6683 The function assumes that existing objects within the array are in object 
  6684 order.
  6685 
  6686 The function leaves with one of the system wide error codes, if the operation fails.
  6687 
  6688 Note that the array remains unchanged following an attempt to insert a duplicate entry.
  6689 
  6690 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6691 
  6692 @param anEntry A reference to the object of type class T to be inserted.
  6693 @param anOrder A package encapsulating the function which determines the order 
  6694                of two class T objects.
  6695 */
  6696 template <class T>
  6697 inline void RArray<T>::InsertInOrderL(const T& anEntry, TLinearOrder<T> anOrder)
  6698 	{ User::LeaveIfError(InsertInOrder(anEntry, anOrder));}
  6699 
  6700 
  6701 /**
  6702 Inserts an object into the array in ascending signed key order,
  6703 allowing duplicates.
  6704 
  6705 The order of two class T type objects is based on comparing a TInt value
  6706 located at the key offset position within the class T object. 
  6707 
  6708 If anEntry is a duplicate of an existing object in the array, then the new 
  6709 object is inserted after the existing object. If more than one duplicate object 
  6710 already exists in the array, then any new duplicate object is inserted after 
  6711 the last one.
  6712 
  6713 The function leaves with one of the system wide error codes, if the operation fails.
  6714 
  6715 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6716 
  6717 @param anEntry A reference to the object of type class T to be inserted.
  6718 */
  6719 template <class T>
  6720 inline void RArray<T>::InsertInSignedKeyOrderAllowRepeatsL(const T& anEntry)
  6721 	{ User::LeaveIfError(InsertInSignedKeyOrderAllowRepeats(anEntry));}
  6722 
  6723 
  6724 /**
  6725 Inserts an object into the array in ascending unsigned key order, allowing 
  6726 duplicates.
  6727 
  6728 The order of two class T type objects is based on comparing a TUint value 
  6729 located at the key offset position within the class T object. 
  6730 
  6731 If anEntry is a duplicate of an existing object in the array, then the new 
  6732 object is inserted after the existing object. If more than one duplicate object 
  6733 already exists in the array, then any new duplicate object is inserted after 
  6734 the last one.
  6735 
  6736 The function leaves with one of the system wide error codes, if the operation fails.
  6737 
  6738 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6739 
  6740 @param anEntry A reference to the object of type class T to be inserted.
  6741 */
  6742 template <class T>
  6743 inline void RArray<T>::InsertInUnsignedKeyOrderAllowRepeatsL(const T& anEntry)
  6744 	{ User::LeaveIfError(InsertInUnsignedKeyOrderAllowRepeats(anEntry));}
  6745 
  6746 
  6747 /**
  6748 Inserts an object into the array in object order, allowing duplicates.
  6749 
  6750 The algorithm for determining the order of two class T type objects is provided 
  6751 by a function supplied by the caller.
  6752 
  6753 If anEntry is a duplicate of an existing object in the array, then the new 
  6754 object is inserted after the existing object. If more than one duplicate object 
  6755 already exists in the array, then anEntry is inserted after the last one.
  6756 
  6757 The function assumes that existing objects within the array are in object 
  6758 order.
  6759 
  6760 The function leaves with one of the system wide error codes, if the operation fails.
  6761 
  6762 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6763 
  6764 @param anEntry A reference to the object of type class T to be inserted.
  6765 @param anOrder A package encapsulating the function which determines the order 
  6766                of two class T objects.
  6767 */
  6768 template <class T>
  6769 inline void RArray<T>::InsertInOrderAllowRepeatsL(const T& anEntry, TLinearOrder<T> anOrder)
  6770 	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry, anOrder));}
  6771 
  6772 
  6773 
  6774 /**
  6775 Reserves space for the specified number of elements.
  6776 
  6777 After a call to this function, the memory allocated to the array is sufficient 
  6778 to hold the number of objects specified. Adding new objects to the array 
  6779 does not result in a re-allocation of memory until the the total number of 
  6780 objects exceeds the specified count.
  6781 
  6782 @param	aCount	The number of objects for which space should be reserved
  6783 @leave KErrNoMemory	If the requested amount of memory could not be allocated
  6784 */
  6785 template <class T>
  6786 inline void RArray<T>::ReserveL(TInt aCount)
  6787 	{ User::LeaveIfError(RArrayBase::DoReserve(aCount)); }
  6788 
  6789 
  6790 
  6791 
  6792 /**
  6793 Appends a signed integer onto the array.
  6794 
  6795 The function leaves with one of the system wide error codes, if the operation fails.
  6796 	
  6797 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  6798 	
  6799 @param anEntry The signed integer to be appended.
  6800 */
  6801 inline void RArray<TInt>::AppendL(TInt anEntry)
  6802 	{ User::LeaveIfError(Append(anEntry));}
  6803 
  6804 
  6805 /**
  6806 Inserts a signed integer into the array at the specified position.
  6807 	
  6808 The function leaves with one of the system wide error codes, if the operation fails.
  6809 	
  6810 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  6811 	
  6812 @param anEntry The signed integer to be inserted.
  6813 @param aPos    The position within the array where the signed integer is to be 
  6814 	           inserted. The position is relative to zero, i.e. zero implies
  6815 			   that an entry is inserted at the beginning of the array.
  6816 		   
  6817 @panic USER 131, if aPos is negative, or is greater than the number of entries
  6818        currently in the array.
  6819 */
  6820 inline void RArray<TInt>::InsertL(TInt anEntry, TInt aPos)
  6821 	{ User::LeaveIfError(Insert(anEntry, aPos));}
  6822 
  6823 
  6824 /**
  6825 Finds the first signed integer in the array which matches the specified signed 
  6826 integer using a sequential search.
  6827 
  6828 The find operation always starts at the low index end of the array. There 
  6829 is no assumption about the order of entries in the array.
  6830 
  6831 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6832 	
  6833 @param anEntry The signed integer to be found.
  6834 
  6835 @return The index of the first matching signed integer within the array.
  6836 @leave  KErrNotFound, if no matching entry can be found.
  6837 */
  6838 inline TInt RArray<TInt>::FindL(TInt anEntry) const
  6839 	{ return User::LeaveIfError(Find(anEntry));}
  6840 
  6841 
  6842 /**
  6843 Finds the last signed integer in the array which matches the specified signed 
  6844 integer using a sequential search.
  6845 
  6846 The find operation always starts at the high index end of the array. There 
  6847 is no assumption about the order of entries in the array.
  6848 
  6849 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6850 	
  6851 @param anEntry The signed integer to be found.
  6852 
  6853 @return The index of the last matching signed integer within the array.
  6854 @leave  KErrNotFound, if no matching entry can be found.
  6855 */
  6856 inline TInt RArray<TInt>::FindReverseL(TInt anEntry) const
  6857 	{ return User::LeaveIfError(FindReverse(anEntry));}
  6858 
  6859 
  6860 /**
  6861 Finds the signed integer in the array that matches the specified signed integer 
  6862 using a binary search technique.
  6863 
  6864 The function assumes that the array is in signed integer order.
  6865 	
  6866 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  6867 	
  6868 @param anEntry The signed integer to be found.
  6869 
  6870 @return The index of the matching signed integer within the array.
  6871 @leave  KErrNotFound, if no match can be found.
  6872 */
  6873 inline TInt RArray<TInt>::FindInOrderL(TInt anEntry) const
  6874 	{ return User::LeaveIfError(FindInOrder(anEntry));}
  6875 
  6876 
  6877 /**
  6878 Finds the signed integer in the array that matches the specified signed integer
  6879 using a binary search technique.
  6880 	
  6881 The function assumes that the array is in signed integer order.
  6882 	
  6883 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  6884 	
  6885 @param anEntry The signed integer to be found.
  6886 @param anIndex A reference to a signed integer into which the
  6887                function puts an index value: If the function returns ,
  6888                this is the index of the matching signed integer within the
  6889                array. If the function leaves with KErrNotFound, this is the
  6890                index of the first signed integer within the array that is
  6891                bigger than the signed integer being searched for - if no
  6892                signed integers within the array are bigger, then the index
  6893                value is the same as the total number of signed integers
  6894                within the array.
  6895 @leave  KErrNotFound if no  match can be found.
  6896 */
  6897 inline void RArray<TInt>::FindInOrderL(TInt anEntry, TInt& anIndex) const
  6898 	{ User::LeaveIfError(FindInOrder(anEntry, anIndex));}
  6899 
  6900 
  6901 /**
  6902 Finds the signed integer in the array that matches the specified signed integer 
  6903 using a binary search technique.
  6904 
  6905 Where there is more than one matching element, it finds the first, last or any
  6906 matching element  as specified by the value of aMode.
  6907 	
  6908 The function assumes that the array is in signed integer order.
  6909 	
  6910 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  6911 	
  6912 @param anEntry The signed integer to be found.
  6913 @param aMode   Specifies whether to find the first match, the last match or
  6914                any match, as defined by one of the TArrayFindMode enum values.
  6915 
  6916 @return The array index of a matching element - what the index refers to
  6917         depends on the value of aMode:
  6918         if this is EArrayFindMode_First, then the index refers to the first matching element;
  6919         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6920         if this is EArrayFindMode_Last, then the index refers to first element that follows
  6921         the last matching element - if the last matching element is also the last element
  6922         of the array, then the index value is the same as the total number of elements in the array.
  6923         
  6924 @leave  KErrNotFound if no matching entry exists.
  6925 
  6926 @see TArrayFindMode
  6927 */
  6928 inline TInt RArray<TInt>::SpecificFindInOrderL(TInt anEntry, TInt aMode) const
  6929 	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, aMode));}
  6930 
  6931 
  6932 /**
  6933 Finds the signed integer in the array that matches the specified signed integer
  6934 using a binary search technique.
  6935 
  6936 Where there is more than one matching element, it finds the first, last or any
  6937 matching element  as specified by the value of aMode.
  6938 
  6939 The function assumes that the array is in signed integer order.
  6940 
  6941 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6942 	
  6943 @param anEntry The signed integer to be found.
  6944 @param anIndex A TInt type supplied by the caller. On return, it contains an
  6945                index value depending on whether a match is found and on the value of aMode.
  6946                If there is no matching element in the array, then this is
  6947                the  index of the first element in the array that is bigger
  6948                than the element being searched for - if no elements in the
  6949                array are bigger, then the index value is the same as the total
  6950                number of elements in the array. If there is a matching element,
  6951                then what the index refers to depends on the value of aMode:
  6952                if this is EArrayFindMode_First, then the index refers to the first matching element;
  6953                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  6954                if this is EArrayFindMode_Last, then the index refers to first element that follows
  6955                the last matching element - if the last matching element is also the last element
  6956                of the array, then the index value is the same as the total number of elements in the array.
  6957                
  6958 @param	aMode  Specifies whether to find the first match, the last match or any match, as defined
  6959                by one of the TArrayFindMode enum values.
  6960                
  6961 @leave KErrNotFound if no matching entry exists.
  6962 
  6963 @see TArrayFindMode
  6964 */
  6965 inline void RArray<TInt>::SpecificFindInOrderL(TInt anEntry, TInt& anIndex, TInt aMode) const
  6966 	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, aMode));}
  6967 
  6968 
  6969 /**
  6970 Inserts a signed integer into the array in signed integer order.
  6971 
  6972 No duplicate entries are permitted.
  6973 
  6974 The function assumes that existing entries within the array are in signed 
  6975 integer order.
  6976 
  6977 The function leaves with one of the system wide error codes, if the operation fails.
  6978 
  6979 Note that the array remains unchanged following an attempt to insert a duplicate entry. 
  6980 
  6981 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  6982 
  6983 @param anEntry The signed integer to be inserted.
  6984 */
  6985 inline void RArray<TInt>::InsertInOrderL(TInt anEntry)
  6986 	{ User::LeaveIfError(InsertInOrder(anEntry));}
  6987 
  6988 
  6989 /**
  6990 Inserts a signed integer into the array in signed integer order,
  6991 allowing duplicates.
  6992 
  6993 If anEntry is a duplicate of an existing entry in the array, then the new 
  6994 signed integer is inserted after the existing one. If more than one duplicate 
  6995 entry already exists in the array, then any new duplicate signed integer is 
  6996 inserted after the last one.
  6997 
  6998 The function assumes that existing entries within the array are in signed 
  6999 integer order.
  7000 
  7001 The function leaves with one of the system wide error codes, if the operation fails.
  7002 	
  7003 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  7004 	
  7005 @param anEntry The signed integer to be inserted.
  7006 */
  7007 inline void RArray<TInt>::InsertInOrderAllowRepeatsL(TInt anEntry)
  7008 	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry));}
  7009 
  7010 
  7011 
  7012 /**
  7013 Reserves space for the specified number of elements.
  7014 
  7015 After a call to this function, the memory allocated to the array is sufficient 
  7016 to hold the number of integers specified. Adding new integers to the array 
  7017 does not result in a re-allocation of memory until the the total number of 
  7018 integers exceeds the specified count.
  7019 
  7020 @param	aCount	The number of integers for which space should be reserved
  7021 @leave KErrNoMemory	If the requested amount of memory could not be allocated
  7022 */
  7023 inline void RArray<TInt>::ReserveL(TInt aCount)
  7024 	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
  7025 
  7026 
  7027 
  7028 
  7029 /**
  7030 Appends an unsigned integer onto the array.
  7031 	
  7032 The function leaves with one of the system wide error codes, if the operation fails.
  7033 	
  7034 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7035 	
  7036 @param anEntry The unsigned integer to be appended.
  7037 */
  7038 inline void RArray<TUint>::AppendL(TUint anEntry)
  7039 	{ User::LeaveIfError(Append(anEntry));}
  7040 
  7041 
  7042 /**
  7043 Inserts an unsigned integer into the array at the specified position.
  7044 	
  7045 The function leaves with one of the system wide error codes, if the operation fails.
  7046 	
  7047 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7048 	
  7049 @param anEntry  The unsigned integer to be inserted.
  7050 @param aPos     The position within the array where the unsigned integer is to 
  7051 	            be inserted. The position is relative to zero, i.e. zero
  7052 				implies that an entry is inserted at the beginning of
  7053 				the array.
  7054 			
  7055 @panic USER 131, if aPos is negative, or is greater than the number of entries
  7056        currently in the array.
  7057 */
  7058 inline void RArray<TUint>::InsertL(TUint anEntry, TInt aPos)
  7059 	{ User::LeaveIfError(Insert(anEntry, aPos));}
  7060 
  7061 
  7062 /**
  7063 Finds the first unsigned integer in the array which matches the specified
  7064 value, using a sequential search.
  7065 
  7066 The find operation always starts at the low index end of the array. There 
  7067 is no assumption about the order of entries in the array.
  7068 	
  7069 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7070 	
  7071 @param anEntry The unsigned integer to be found.
  7072 @return The index of the first matching unsigned integer within the array.
  7073 @leave  KErrNotFound, if no matching entry can be found.
  7074 */
  7075 inline TInt RArray<TUint>::FindL(TUint anEntry) const
  7076 	{ return User::LeaveIfError(Find(anEntry));}
  7077 
  7078 
  7079 /**
  7080 Finds the last unsigned integer in the array which matches the specified
  7081 value, using a sequential search.
  7082 
  7083 The find operation always starts at the high index end of the array. There 
  7084 is no assumption about the order of entries in the array.
  7085 	
  7086 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7087 	
  7088 @param anEntry The unsigned integer to be found.
  7089 @return The index of the last matching unsigned integer within the array.
  7090 @leave  KErrNotFound, if no matching entry can be found.
  7091 */
  7092 inline TInt RArray<TUint>::FindReverseL(TUint anEntry) const
  7093 	{ return User::LeaveIfError(FindReverse(anEntry));}
  7094 
  7095 
  7096 /**
  7097 Finds the unsigned integer in the array which matches the specified value, 
  7098 using a binary search technique.
  7099 	
  7100 The functions assume that existing entries within the array are in unsigned 
  7101 integer order.
  7102 
  7103 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  7104 	
  7105 @param anEntry The unsigned integer to be found.
  7106 
  7107 @return The index of the matching unsigned integer within the array;
  7108 @leave  KErrNotFound, if no matching entry can be found.
  7109 */
  7110 inline TInt RArray<TUint>::FindInOrderL(TUint anEntry) const
  7111 	{ return User::LeaveIfError(FindInOrder(anEntry));}
  7112 
  7113 
  7114 /**
  7115 Finds the unsigned integer in the array which matches the specified value, 
  7116 using a binary search technique.
  7117 
  7118 If the index cannot be found, the function returns the index of the last
  7119 unsigned integer within the array which logically precedes anEntry.
  7120 The functions assume that existing entries within the array are in unsigned 
  7121 integer order.
  7122 	
  7123 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  7124 	
  7125 @param anEntry The unsigned integer to be found.
  7126 @param anIndex A TInt supplied by the caller. On return, contains an index
  7127                value of the matching unsigned integer within the array. 
  7128                If the function leaves with KErrNotFound, this is the index of the
  7129                first unsigned integer within the array that is bigger than the
  7130                unsigned integer being searched for - if no unsigned integers within
  7131                the array are bigger, then the index value is the same as the
  7132                total number of unsigned integers within the array.
  7133 
  7134 @leave  KErrNotFound, if no matching entry can be found.
  7135 */
  7136 inline void RArray<TUint>::FindInOrderL(TUint anEntry, TInt& anIndex) const
  7137 	{ User::LeaveIfError(FindInOrder(anEntry, anIndex));}
  7138 
  7139 
  7140 /**
  7141 Finds the unsigned integer in the array that matches the specified unsigned integer 
  7142 using a binary search technique.
  7143 
  7144 In the case that there is more than one matching element, finds the first, last or any
  7145 match as specified.
  7146 	
  7147 The function assumes that the array is in unsigned integer order.
  7148 
  7149 NOTE: This function is NOT AVAILABLE to code running on the kernel side.
  7150 	
  7151 @param anEntry The unsigned integer to be found.
  7152 @param aMode   Specifies whether to find the first match, the last match or 
  7153                any match, as defined by one of the TArrayFindMode enum values.
  7154 
  7155 @return The array index of a matching element - what the index refers to depends
  7156         on the value of aMode:
  7157         if this is EArrayFindMode_First, then the index refers to the first matching element;
  7158         if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  7159         if this is EArrayFindMode_Last, then the index refers to first element that follows
  7160         the last matching element - if the last matching element is also the last element
  7161         of the array, then the index value is the same as the total number of elements in the array.
  7162         
  7163 @leave KErrNotFound if no matching entry exists.
  7164 
  7165 @see TArrayFindMode
  7166 */
  7167 inline TInt RArray<TUint>::SpecificFindInOrderL(TUint anEntry, TInt aMode) const
  7168 	{ return User::LeaveIfError(SpecificFindInOrder(anEntry, aMode));}
  7169 
  7170 
  7171 /**
  7172 Finds the unsigned integer in the array that matches the specified unsigned integer
  7173 using a binary search technique.
  7174 
  7175 Where there is more than one matching element, it finds the first, last or
  7176 any matching element as specified by the value of aMode.
  7177 
  7178 The function assumes that the array is in unsigned integer order.
  7179 	
  7180 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7181 	
  7182 @param anEntry The unsigned integer to be found.
  7183 @param anIndex A TInt type supplied by the caller. On return, it contains an index
  7184                value depending on whether a match is found and on the value of aMode.
  7185                If there is no matching element in the array, then this is the
  7186                index of the first element in the array that is bigger than the element
  7187                being searched for - if no elements in the array are bigger, then
  7188                the index value is the same as the total number of elements in the array.
  7189                If there is a matching element, then what the index refers to depends on
  7190                the value of aMode:
  7191                if this is EArrayFindMode_First, then the index refers to the first matching element;
  7192                if this is EArrayFindMode_Any, then the index can refer to any of the matching elements;
  7193                if this is EArrayFindMode_Last, then the index refers to first element that follows
  7194                the last matching element - if the last matching element is also the last element of the array,
  7195                then the index value is the same as the total number of elements in the array.
  7196                
  7197 @param	aMode  Specifies whether to find the first match, the last match or any match, as defined by
  7198                one of the TArrayFindMode enum values.
  7199 @leave KErrNotFound if no matching entry exists.
  7200 
  7201 @see TArrayFindMode
  7202 */
  7203 inline void RArray<TUint>::SpecificFindInOrderL(TUint anEntry, TInt& anIndex, TInt aMode) const
  7204 	{ User::LeaveIfError(SpecificFindInOrder(anEntry, anIndex, aMode));}
  7205 
  7206 
  7207 /**
  7208 Inserts an unsigned integer into the array in unsigned integer order.
  7209 
  7210 No duplicate entries are permitted.
  7211 
  7212 The function assumes that existing entries within the array are in unsigned 
  7213 integer order.
  7214 
  7215 The function leaves with one of the system wide error codes, if the operation fails.
  7216 	
  7217 Note that the array remains unchanged following an attempt to insert a duplicate entry.
  7218 	
  7219 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7220 	
  7221 @param anEntry The unsigned integer to be inserted.
  7222 */
  7223 inline void RArray<TUint>::InsertInOrderL(TUint anEntry)
  7224 	{ User::LeaveIfError(InsertInOrder(anEntry));}
  7225 
  7226 
  7227 /**
  7228 Inserts an unsigned integer into the array in unsigned integer order, allowing 
  7229 duplicates.
  7230 
  7231 If the new integer is a duplicate of an existing entry in the array, then 
  7232 the new unsigned integer is inserted after the existing one. If more than 
  7233 one duplicate entry already exists in the array, then any new duplicate
  7234 unsigned integer is inserted after the last one.
  7235 	
  7236 The function assumes that existing entries within the array are in unsigned 
  7237 integer order.
  7238 
  7239 The function leaves with one of the system wide error codes, if the operation fails.
  7240 	
  7241 NOTE: This function is NOT AVAILABLE to code running on the kernel side.	
  7242 	
  7243 @param anEntry The unsigned integer to be inserted.
  7244 */
  7245 inline void RArray<TUint>::InsertInOrderAllowRepeatsL(TUint anEntry)
  7246 	{ User::LeaveIfError(InsertInOrderAllowRepeats(anEntry));}
  7247 
  7248 
  7249 
  7250 /**
  7251 Reserves space for the specified number of elements.
  7252 
  7253 After a call to this function, the memory allocated to the array is sufficient 
  7254 to hold the number of integers specified. Adding new integers to the array 
  7255 does not result in a re-allocation of memory until the the total number of 
  7256 integers exceeds the specified count.
  7257 
  7258 @param	aCount	The number of integers for which space should be reserved
  7259 @leave KErrNoMemory	If the requested amount of memory could not be allocated
  7260 */
  7261 inline void RArray<TUint>::ReserveL(TInt aCount)
  7262 	{ User::LeaveIfError(RPointerArrayBase::DoReserve(aCount)); }
  7263 
  7264 
  7265 
  7266 // class TChunkHeapCreateInfo
  7267 /**
  7268 Sets single thread property of the chunk heap.
  7269 
  7270 This overrides any previous call to TChunkHeapCreateInfo::SetSingleThread()
  7271 for this TChunkHeapCreateInfo object.
  7272 
  7273 @param aSingleThread	ETrue when the chunk heap is to be single threaded,
  7274 						EFalse otherwise.
  7275 */
  7276 inline void TChunkHeapCreateInfo::SetSingleThread(const TBool aSingleThread)
  7277 	{
  7278 	iSingleThread = aSingleThread;
  7279 	}
  7280 
  7281 
  7282 /**
  7283 Sets alignment of the cells of the chunk heap to be created.
  7284 
  7285 This overrides any previous call to TChunkHeapCreateInfo::SetAlignment()
  7286 for this TChunkHeapCreateInfo object.
  7287 
  7288 @param aAlignment	The alignment of the heap cells.
  7289 */
  7290 inline void TChunkHeapCreateInfo::SetAlignment(TInt aAlign)
  7291 	{
  7292 	iAlign = aAlign;
  7293 	}
  7294 
  7295 
  7296 /**
  7297 Sets the increments to the size of the host chunk.  If the supplied value is 
  7298 less than KMinHeapGrowBy, it is discarded and the value KMinHeapGrowBy is 
  7299 used instead.
  7300 
  7301 This overrides any previous call to TChunkHeapCreateInfo::SetGrowBy()
  7302 for this TChunkHeapCreateInfo object.
  7303 
  7304 @param aGrowBy	The increment to the size of the host chunk.
  7305 */
  7306 inline void TChunkHeapCreateInfo::SetGrowBy(TInt aGrowBy)
  7307 	{
  7308 	iGrowBy = aGrowBy;
  7309 	}
  7310 
  7311 
  7312 /**
  7313 Sets the offset from the base of the host chunk to the start of the heap.
  7314 
  7315 This overrides any previous call to TChunkHeapCreateInfo::SetOffset()
  7316 for this TChunkHeapCreateInfo object.
  7317 
  7318 @param aOffset	The offset in bytes.
  7319 */
  7320 inline void TChunkHeapCreateInfo::SetOffset(TInt aOffset)
  7321 	{
  7322 	iOffset = aOffset;
  7323 	}
  7324 
  7325 
  7326 /**
  7327 Sets the mode flags of the chunk heap.
  7328 
  7329 This overrides any previous call to TChunkHeapCreateInfo::SetMode()
  7330 for this TChunkHeapCreateInfo object.
  7331 
  7332 @param aMode	The mode flags for the chunk heap to be created, this should be
  7333 				one or more of the values from TChunkHeapCreateMode.
  7334 */
  7335 inline void TChunkHeapCreateInfo::SetMode(TUint aMode)
  7336 	{
  7337 	iMode = aMode;
  7338 	}
  7339 
  7340 
  7341 /**
  7342 Sets the paging attribute of the chunk heap to be created.
  7343 
  7344 This overrides any previous call to TChunkHeapCreateInfo::SetPaging()
  7345 for this TChunkHeapCreateInfo object.
  7346 
  7347 @param aPaging	The paging attribute for the chunk heap to be created.
  7348 */
  7349 inline void TChunkHeapCreateInfo::SetPaging(const TChunkHeapPagingAtt aPaging)
  7350 	{
  7351 	iPaging = aPaging;
  7352 	}
  7353 
  7354 
  7355 /**
  7356 Sets the priority of the client's process.
  7357 
  7358 @param aPriority The priority value.
  7359 */
  7360 inline void RMessagePtr2::SetProcessPriorityL(TProcessPriority aPriority) const
  7361 	{ User::LeaveIfError(SetProcessPriority(aPriority));}
  7362 
  7363 
  7364 /**
  7365 Opens a handle on the client thread.
  7366 
  7367 @param aClient    On successful return, the handle to the client thread.
  7368 @param aOwnerType An enumeration whose enumerators define the ownership of
  7369                   the handle. If not explicitly specified,
  7370                   EOwnerProcess is taken as default.
  7371 */
  7372 inline void RMessagePtr2::ClientL(RThread& aClient, TOwnerType aOwnerType) const
  7373 	{ User::LeaveIfError(Client(aClient, aOwnerType));}
  7374 
  7375 
  7376 #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  7377 
  7378 inline TBool RMessagePtr2::HasCapability(TCapability aCapability, const char* aDiagnostic) const
  7379 	{
  7380 	return DoHasCapability(aCapability, aDiagnostic);
  7381 	}
  7382 
  7383 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, const char* aDiagnosticMessage) const
  7384 	{
  7385 	if (!HasCapability(aCapability, aDiagnosticMessage))
  7386 		{
  7387 		User::Leave(KErrPermissionDenied);
  7388 		}
  7389 	}
  7390 
  7391 inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, const char* aDiagnostic) const
  7392 	{
  7393 	return DoHasCapability(aCapability1, aCapability2, aDiagnostic);
  7394 	}
  7395 
  7396 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, const char* aDiagnosticMessage) const
  7397 	{
  7398 	if (!HasCapability(aCapability1, aCapability2, aDiagnosticMessage))
  7399 		{
  7400 		User::Leave(KErrPermissionDenied);
  7401 		}
  7402 	}
  7403 
  7404 #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  7405 
  7406 // Only available to NULL arguments
  7407 inline TBool RMessagePtr2::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/) const
  7408 	{
  7409 	return DoHasCapability(aCapability);
  7410 	}
  7411 
  7412 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, OnlyCreateWithNull /*aDiagnosticMessage*/) const
  7413 	{
  7414 	if (!DoHasCapability(aCapability))
  7415 		{
  7416 		User::Leave(KErrPermissionDenied);
  7417 		}
  7418 	}
  7419 
  7420 inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/) const
  7421 	{
  7422 	return DoHasCapability(aCapability1, aCapability2);
  7423 	}
  7424 
  7425 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnosticMessage*/) const
  7426 	{
  7427 	if (!DoHasCapability(aCapability1, aCapability2))
  7428 		{
  7429 		User::Leave(KErrPermissionDenied);
  7430 		}
  7431 	}
  7432 
  7433 #ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
  7434 // For things using KSuppressPlatSecDiagnostic
  7435 inline TBool RMessagePtr2::HasCapability(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  7436 	{
  7437 	return DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue);
  7438 	}
  7439 
  7440 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  7441 	{
  7442 	if (!DoHasCapability(aCapability, KSuppressPlatSecDiagnosticMagicValue))
  7443 		{
  7444 		User::Leave(KErrPermissionDenied);
  7445 		}
  7446 	}
  7447 
  7448 inline TBool RMessagePtr2::HasCapability(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  7449 	{
  7450 	return DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue);
  7451 	}
  7452 
  7453 inline void RMessagePtr2::HasCapabilityL(TCapability aCapability1, TCapability aCapability2, OnlyCreateWithNull /*aDiagnostic*/, OnlyCreateWithNull /*aSuppress*/) const
  7454 	{
  7455 	if (!DoHasCapability(aCapability1, aCapability2, KSuppressPlatSecDiagnosticMagicValue))
  7456 		{
  7457 		User::Leave(KErrPermissionDenied);
  7458 		}
  7459 	}
  7460 #endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
  7461 
  7462 #endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
  7463 
  7464 inline TInt RThread::RenameMe(const TDesC& aName)
  7465 	{ return User::RenameThread(aName); }
  7466 inline TInt RProcess::RenameMe(const TDesC& aName)
  7467 	{ return User::RenameProcess(aName); }
  7468 
  7469 
  7470 #endif // !__KERNEL_MODE__
  7471 
  7472 #ifdef __SUPPORT_CPP_EXCEPTIONS__
  7473 // The standard header file <exception> defines the following guard macro for EDG and CW, VC++, GCC respectively.
  7474 // The guard below is ugly. It will surely come back and bite us unless we resolve the whole issue of standard headers
  7475 // when we move to supporting Standard C++.
  7476 
  7477 // The macro __SYMBIAN_STDCPP_SUPPORT__ is defined when building a StdC++ target.
  7478 // In this case, we wish to avoid defining uncaught_exception below since it clashes with the StdC++ specification 
  7479 #if !defined(_EXCEPTION) && !defined(_EXCEPTION_) && !defined(__EXCEPTION__) && !defined(__SYMBIAN_STDCPP_SUPPORT__)
  7480 
  7481 #if defined(__VC32__) && !defined(_CRTIMP_PURE)
  7482 
  7483 	// Declare MS EH runtime functions
  7484 	bool __uncaught_exception(void);
  7485 
  7486 #if _MSC_VER >= 1200
  7487 	__declspec(noreturn) void terminate(void);
  7488 	__declspec(noreturn) void unexpected(void);
  7489 #else
  7490 	void terminate(void);
  7491 	void unexpected(void);
  7492 #endif
  7493 
  7494 	typedef void (*terminate_handler)();
  7495 	terminate_handler set_terminate(terminate_handler h) throw();
  7496 	typedef void (*unexpected_handler)();
  7497 	unexpected_handler set_unexpected(unexpected_handler h) throw();
  7498 
  7499 namespace std {
  7500 #ifdef __MSVCDOTNET__
  7501 	inline bool uncaught_exception(void) { return ::__uncaught_exception(); }
  7502 #else // !__MSVCDOTNET__
  7503 	// MS KB242192: BUG: uncaught_exception() Always Returns False
  7504 	inline bool uncaught_exception(void) { return false; }
  7505 #endif //__MSVCDOTNET__
  7506 	inline void terminate(void) { ::terminate(); }
  7507 	inline void unexpected(void) { ::unexpected(); }
  7508 	inline terminate_handler set_terminate(terminate_handler h) throw() { return ::set_terminate(h); }
  7509 	inline unexpected_handler set_unexpected(unexpected_handler h) throw() { return ::set_unexpected(h); }
  7510 }
  7511 
  7512 #endif // extract from MSVC headers
  7513 
  7514 #ifdef __CW32__
  7515 
  7516 	extern "C" bool __uncaught_exception(void);
  7517 
  7518 namespace std {
  7519 #if __MWERKS__ > 0x3200
  7520 	inline bool uncaught_exception(void) { return ::__uncaught_exception(); }
  7521 #else
  7522 	// no uncaught_exception() implementation on CW 2.4.7
  7523 	inline bool uncaught_exception(void) { return false; }
  7524 #endif
  7525 }
  7526 
  7527 #endif // extract from CW headers
  7528 
  7529 #endif // <exception> header guard
  7530 
  7531 #endif //__SUPPORT_CPP_EXCEPTIONS__