textandlocutils/nearestlangutils/tsrc/T_LangUtilsTestShareFunc.cpp
author hgs
Tue, 07 Sep 2010 16:39:34 +0800
changeset 59 7d891bb52a7d
permissions -rw-r--r--
201033_04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     2
// All rights reserved.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     7
//
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     8
// Initial Contributors:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    10
//
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    11
// Contributors:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    12
//
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    13
// Description:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    14
//
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    15
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    16
#include <langutil.h>
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    17
#include "T_LangUtilsTestShareFunc.h"
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    18
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    19
void DoCopyFileL(RFs& aFs, const TDesC& aSourceFullName, const TDesC& aTargetFullName, TUint aSwitch)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    20
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    21
    CFileMan* fileMan=CFileMan::NewL(aFs);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    22
    CleanupStack::PushL(fileMan);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    23
    User::LeaveIfError(fileMan->Copy(aSourceFullName,aTargetFullName,aSwitch));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    24
    CleanupStack::PopAndDestroy(); // fileMan
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    25
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    26
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    27
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    28
TInt LangUtilsTest::CopyFile(RFs& aFs, const TDesC& aSourceFullName, const TDesC& aTargetFullName, TUint aSwitch)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    29
/** Copies one or more files.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    30
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    31
For more details, 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    32
@see CFileMan::Copy()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    33
@since     5.1
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    34
@param     aFs File server session
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    35
@param     aSourceFullName Path indicating the file(s) to be copied. Any path
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    36
components that are not specified here will be taken from the session path.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    37
@param     aTargetFullName Path indicating the directory into which the file(s)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    38
are to be copied
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    39
@param     aSwitch=CFileMan::EOverWrite Set this to zero for no overwriting and 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    40
no recursion; CFileMan::EOverWrite to overwrite files with the same name; or 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    41
CFileMan::ERecurse for recursion.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    42
@return   KErrNone if successful, otherwise another of the system-wide error 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    43
codes.*/
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    44
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    45
    TRAPD(err,DoCopyFileL(aFs,aSourceFullName,aTargetFullName,aSwitch));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    46
    return err;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    47
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    48
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    49
TBool LangUtilsTest::FileExists(const RFs& aFileSession,const TDesC& aFileName)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    50
/** Checks if the specified file exists.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    51
    
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    52
@param aFs File server session
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    53
@param aFileName File to check
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    54
@return ETrue if the file exists, otherwise EFalse */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    55
    { // static
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    56
    TEntry entry;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    57
    return(aFileSession.Entry(aFileName,entry)==KErrNone);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    58
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    59
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    60
void DoDeleteFileL(RFs& aFs, const TDesC& aSourceFullName, TUint aSwitch)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    61
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    62
    CFileMan* fileMan=CFileMan::NewL(aFs);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    63
    CleanupStack::PushL(fileMan);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    64
    User::LeaveIfError(fileMan->Delete(aSourceFullName,aSwitch));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    65
    CleanupStack::PopAndDestroy(); // fileMan
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    66
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    67
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    68
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    69
EXPORT_C TInt LangUtilsTest::DeleteFile(RFs& aFs, const TDesC& aSourceFullName, TUint aSwitch)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    70
/** Deletes one or more files.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    71
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    72
For more details,
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    73
@see CFileMan::Delete().
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    74
@since 5.1
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    75
@param aFs File server session
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    76
@param aSourceFullName Path indicating the file(s) to be deleted. May either
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    77
be a full path, or relative to the session path. Use wildcards to specify 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    78
more than one file.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    79
@param aSwitch=0  Specify CFileMan::ERecurse for recursion,
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    80
zero for no recursion.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    81
@return KErrNone if successful, otherwise another of the system-wide error 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    82
codes. */   
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    83
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    84
    TRAPD(err,DoDeleteFileL(aFs,aSourceFullName,aSwitch));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    85
    return err;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    86
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    87
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    88
NONSHARABLE_CLASS(TKeyDesC16Array) : public TKeyArrayFix
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    89
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    90
public:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    91
    TKeyDesC16Array(TKeyCmpText aType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    92
private: // from TKey
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    93
    TInt Compare(TInt aLeft,TInt aRight) const;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    94
    };
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    95
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    96
TKeyDesC16Array::TKeyDesC16Array(TKeyCmpText aType)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    97
    : TKeyArrayFix(0,aType,0)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    98
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
    99
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   100
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   101
TInt TKeyDesC16Array::Compare(TInt aLeft,TInt aRight) const
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   102
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   103
    TDesC16* left=(*(TDesC16**)At(aLeft));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   104
    TDesC16* right=(*(TDesC16**)At(aRight));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   105
    switch (iCmpType)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   106
        {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   107
    case ECmpFolded:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   108
        return(left->CompareF(*right));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   109
    case ECmpCollated:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   110
        return(left->CompareC(*right));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   111
    default:
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   112
        break;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   113
        }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   114
    return(left->Compare(*right));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   115
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   116
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   117
EXPORT_C CDesC16Array::CDesC16Array(TBufRep aRep,TInt aGranularity)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   118
    : CArrayFixBase(aRep,sizeof(HBufC16*),aGranularity)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   119
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   120
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   121
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   122
EXPORT_C CDesC16Array::~CDesC16Array()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   123
/** Frees all resources owned by the object, prior to its destruction. In particular, 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   124
it deletes all descriptors from the array and frees the memory allocated to 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   125
the array buffer. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   126
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   127
    Reset();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   128
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   129
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   130
EXPORT_C void CDesC16Array::Reset()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   131
/** Deletes all descriptors from the array and frees the memory allocated to the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   132
array buffer.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   133
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   134
@see CDesC16Array::Delete() */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   135
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   136
    Delete(0,Count());
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   137
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   138
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   139
EXPORT_C void CDesC16Array::Delete(TInt aIndex)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   140
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   141
    Delete(aIndex,1);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   142
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   143
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   144
/**
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   145
 *
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   146
 * Deletes one or more logically contiguous descriptor elements from the
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   147
 * array.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   148
 *
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   149
 * The deletion starts at the specified position.Deleting descriptor
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   150
 * elements from the array frees the memory occupied by the associated
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   151
 * heap descriptors and removes their pointers from the array buffer but
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   152
 * does not cause the array buffer to be automatically compressed. Call
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   153
 * the Compress() function to return excess space in the array buffer to
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   154
 * the heap.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   155
 *
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   156
 * @param     " TInt aPos "
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   157
 *            The starting position in the array from which
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   158
 *            descriptor elements are to be deleted. The position is
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   159
 *            relative to zero, i.e. zero implies the first
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   160
 *            descriptor element. This value must not be negative
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   161
 *            and must not be greater than the number of descriptor
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   162
 *            elements currently in the array, otherwise the
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   163
 *            functions raise an E32USER-CBase 21 panic.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   164
 * @param     " TInt aCount "
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   165
 *            If specified, the number of contiguous descriptor
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   166
 *            elements to be deleted from the array. This value must
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   167
 *            not be negative otherwise the function raises an
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   168
 *            E32USER-CBase 22 panic. This value must not be
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   169
 *            negative otherwise the function raises an
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   170
 *            E32USER-CBase 22 panic. This value must not be
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   171
 *            negative otherwise the function raises an
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   172
 *            E32USER-CBase 22 panic. This value plus the value of
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   173
 *            the starting position must not be greater than the
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   174
 *            number of descriptor elements in the array, otherwise
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   175
 *            the function raises an E32USER-CBase 29 panic. If not
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   176
 *            specified, one element is assumed.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   177
 */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   178
EXPORT_C void CDesC16Array::Delete(TInt aIndex,TInt aCount)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   179
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   180
    TInt count=aCount;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   181
    for (TInt ii=aIndex; count--; ii++)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   182
        User::Free(*(HBufC16**)At(ii));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   183
    CArrayFixBase::Delete(aIndex,aCount);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   184
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   185
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   186
EXPORT_C TInt CDesC16Array::MdcaCount() const
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   187
/** Returns the number of descriptor elements in the array. The function implements 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   188
the function interface MDesC16Array::MdcaCount().
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   189
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   190
@return The number of descriptor elements. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   191
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   192
    return Count();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   193
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   194
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   195
EXPORT_C TPtrC16 CDesC16Array::MdcaPoint(TInt anIndex) const
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   196
/** Indexes into a descriptor array. The function implements the interface MDesC16Array::MdcaPoint().
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   197
    
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   198
    @param aIndex The position of the descriptor element within the array. The 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   199
    position is relative to zero; i.e. zero implies the first descriptor element 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   200
    in the array. This value must be non-negative and less than the number of 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   201
    descriptors currently within the array otherwise the operator panics with 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   202
    EArrayIndexOutOfRange. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   203
    @return A non-modifiable pointer descriptor representing the descriptor element 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   204
    located at position aIndex within the array. */ 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   205
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   206
    HBufC16* temp=(*(HBufC16**)At(anIndex));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   207
    return (TPtrC16)(*temp);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   208
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   209
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   210
EXPORT_C void CDesC16Array::AppendL(const TDesC16& aPtr)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   211
/** Appends a descriptor onto the end of any existing descriptor elements in the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   212
array.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   213
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   214
@param aPtr A reference to the descriptor to be appended to the array. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   215
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   216
    InsertL(Count(),aPtr);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   217
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   218
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   219
EXPORT_C void CDesC16Array::InsertL(TInt aPos,const TDesC16& aPtr)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   220
/** Inserts a descriptor into the array at the specified position. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   221
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   222
If the specified position is the same as the current number of descriptor 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   223
elements in the array, this has the effect of appending the element.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   224
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   225
@param aPos The position within the array where the descriptor element is 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   226
to be inserted. The position is relative to zero, i.e. zero implies the first 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   227
descriptor element. This value must not be negative and must not be greater 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   228
than the number of descriptor elements currently in the array, otherwise the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   229
function raises an E32USER-CBase 21 panic. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   230
@param aPtr The descriptor to be inserted into the array. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   231
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   232
    HBufC16* bufPtr=aPtr.AllocLC();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   233
    CArrayFixBase::InsertL(aPos,&bufPtr);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   234
    CleanupStack::Pop();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   235
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   236
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   237
EXPORT_C TInt CDesC16Array::InsertIsqL(const TDesC16& aPtr,TKeyCmpText aTextComparisonType)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   238
/** Inserts a descriptor into the array at a position which maintains the sequence 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   239
of the descriptors.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   240
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   241
The sequence is determined by comparing descriptors using one of the TDesC 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   242
comparison functions. The enumeration aTextComparisonType governs how the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   243
descriptors are to be compared.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   244
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   245
The array should already be in sequence, otherwise the position of the new 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   246
descriptor element is unpredictable. Descriptor elements which are the same 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   247
are not permitted.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   248
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   249
@param aPtr A reference to the descriptor to be inserted into the array. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   250
@param aTextComparisonType An enumeration which determines the type of comparison 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   251
to be made between descriptors for the purpose of choosing the insertion position. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   252
If no parameter is explicitly passed, ECmpFolded is used by default.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   253
@return The position within the array of the inserted descriptor. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   254
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   255
    HBufC16* bufPtr=aPtr.AllocLC();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   256
    TKeyDesC16Array key(aTextComparisonType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   257
    TInt found=CArrayFixBase::InsertIsqL(&bufPtr,key);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   258
    CleanupStack::Pop();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   259
    return(found);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   260
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   261
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   262
EXPORT_C TInt CDesC16Array::InsertIsqAllowDuplicatesL(const TDesC16& aPtr,TKeyCmpText aTextComparisonType)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   263
/** Inserts a descriptor into the array at a position which maintains the sequence 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   264
of the descriptors; allows duplicates.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   265
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   266
The sequence is determined by comparing descriptors using one of the TDesC 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   267
comparison functions. The enumeration aTextComparisonType governs how the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   268
descriptors are to be compared.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   269
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   270
The array should already be in sequence, otherwise the position of the new 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   271
descriptor element is unpredictable. Descriptor elements which are the same 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   272
are permitted; if the descriptor aPtr is a duplicate of an existing descriptor 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   273
within the array, then the new descriptor element is positioned after the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   274
existing descriptor element.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   275
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   276
@param aPtr A reference to the descriptor to be inserted into the array. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   277
@param aTextComparisonType An enumeration which determines the type of comparison 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   278
to be made between descriptors for the purpose of choosing the insertion position. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   279
If no parameter is explicitly passed, ECmpFolded is used by default.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   280
@return The position within the array of the inserted descriptor. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   281
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   282
    HBufC16* bufPtr=aPtr.AllocLC();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   283
    TKeyDesC16Array key(aTextComparisonType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   284
    TInt found=CArrayFixBase::InsertIsqAllowDuplicatesL(&bufPtr,key);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   285
    CleanupStack::Pop();
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   286
    return(found);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   287
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   288
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   289
EXPORT_C void CDesC16Array::Sort(TKeyCmpText aTextComparisonType)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   290
/** Sorts the descriptor elements into sequence.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   291
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   292
The sequence is determined by comparing descriptors using one of the member 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   293
functions of the descriptor base class TDesC.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   294
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   295
@param aTextComparisonType An enumeration which defines the type of comparison 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   296
to be made between descriptors. By default the comparison type is ECmpFolded. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   297
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   298
    TKeyDesC16Array key(aTextComparisonType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   299
    CArrayFixBase::Sort(key);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   300
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   301
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   302
EXPORT_C TInt CDesC16Array::Find(const TDesC16& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType) const
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   303
/** Finds the position of a descriptor element within the array which matches the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   304
specified descriptor, using a sequential search.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   305
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   306
The array is searched sequentially for a matching descriptor element, starting 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   307
with the first descriptor element in the array. Descriptors are compared using 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   308
one of the TDesC comparison functions. The enumeration aTextComparisonType 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   309
governs how the descriptors are to be compared.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   310
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   311
Where an array has duplicate descriptor elements, the function only supplies 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   312
the position of the first descriptor element.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   313
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   314
@param aPtr A reference to a descriptor to be used for comparison. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   315
@param aPos If the descriptor element is found, this reference is set to the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   316
position of that descriptor element within the array. The position is relative 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   317
to zero, (i.e. the first descriptor element in the array is at position 0). 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   318
If the descriptor element is not found and the array is not empty, then the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   319
value of the reference is set to the number of descriptor elements in the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   320
array. If the descriptor element is not found and the array is empty, then 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   321
the reference is set to zero. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   322
@param aTextComparisonType An enumeration which determines the type of comparison 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   323
to be made between descriptors. If no parameter is explicitly passed,ECmpFolded 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   324
is used by default. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   325
@return Zero, if a matching descriptor element is found. Non-zero, if no matching 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   326
descriptor element can be found. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   327
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   328
    TKeyDesC16Array key(aTextComparisonType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   329
    const TDesC16* tmp=(&aPtr);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   330
    return(CArrayFixBase::Find(&tmp,key,aPos));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   331
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   332
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   333
EXPORT_C TInt CDesC16Array::FindIsq(const TDesC16& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType) const
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   334
/** Finds the position of a descriptor element within the array which matches the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   335
specified descriptor, using a binary search technique. The array must 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   336
be in sequence, otherwise the outcome is unpredictable.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   337
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   338
Descriptors are compared using one of the TDesC comparison functions. The 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   339
enumeration aTextComparisonType governs how the descriptors are to be compared.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   340
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   341
Where an array has duplicate descriptor elements, the function cannot guarantee 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   342
which matching descriptor element it will return; except that it will find 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   343
one of them.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   344
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   345
@param aPtr A reference to a descriptor to be used for comparison. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   346
@param aPos If the descriptor element is found, the reference is set to the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   347
position of that descriptor element within the array. The position is relative 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   348
to zero, (i.e. the first descriptor element in the array is at position 0). 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   349
If the descriptor element is not found and the array is not empty, then the 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   350
reference is set to the position of the first descriptor element in the array 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   351
whose content is greater than the content of aPtr. If the descriptor element 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   352
is not found and the array is empty, then the reference is set to zero.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   353
@param aTextComparisonType An enumeration which determines the type of comparison 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   354
to be made between descriptors. If no parameter is explicitly passed, ECmpFolded 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   355
is used by default. 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   356
@return Zero, if a matching descriptor element is found. Non-zero, if no matching 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   357
descriptor element can be found. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   358
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   359
    TKeyDesC16Array key(aTextComparisonType);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   360
    const TDesC16* tmp=(&aPtr);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   361
    return(CArrayFixBase::FindIsq(&tmp,key,aPos));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   362
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   363
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   364
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   365
EXPORT_C CDesC16ArraySeg::CDesC16ArraySeg(TInt aGranularity)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   366
    : CDesC16Array((TBufRep)CBufSeg::NewL,aGranularity)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   367
/** Construct a segmented descriptor array with the specified granularity.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   368
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   369
No memory is allocated to the array buffer by this C++ constructor.
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   370
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   371
@param aGranularity The granularity of the array. This value must be positive 
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   372
otherwise the constructor raises an E32USER-CBase 18 panic. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   373
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   374
    __DECLARE_NAME(_S("CDesC16ArraySeg"));
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   375
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   376
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   377
EXPORT_C CDesC16ArraySeg::~CDesC16ArraySeg()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   378
/** Frees all resources owned by the object, prior to its destruction. */
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   379
    {}
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   380
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   381
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   382
/* The following 3 function is defined so that the functions IdealLanguage,
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   383
SetIdealLanguage, ReleaseIdealLanguage will compile as part as an .exe
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   384
These functions use a global TAny* to store the data that would have been
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   385
stored in the TLS under normal compilation (ie If the BaUtils was compilled
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   386
as part of a DLL).
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   387
*/
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   388
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   389
TAny* ptr(NULL);
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   390
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   391
TAny* Dll::Tls()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   392
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   393
    return ptr;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   394
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   395
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   396
TInt Dll::SetTls(TAny* aPtr)
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   397
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   398
    ptr = aPtr;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   399
    return KErrNone;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   400
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   401
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   402
void Dll::FreeTls()
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   403
    {
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   404
    ptr = NULL;
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   405
    }
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   406
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   407
7d891bb52a7d 201033_04
hgs
parents:
diff changeset
   408