williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Written by DavidW, October 1996 williamr@2: // Descriptor arrays williamr@2: // williamr@2: // williamr@2: williamr@2: #if !defined(__BADESCA_H__) williamr@2: #define __BADESCA_H__ williamr@2: williamr@2: #if !defined(__BAMDESCA_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: williamr@2: class CDesC8Array : public CArrayFixBase, public MDesC8Array williamr@2: /** An implementation base class for 8 bit descriptor arrays. williamr@2: williamr@2: It provides some of the behaviour for 8 bit descriptor arrays. The class is williamr@2: abstract and cannot be instantiated. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: IMPORT_C CDesC8Array(TBufRep aRep,TInt aGranularity); williamr@2: public: williamr@2: IMPORT_C ~CDesC8Array(); williamr@2: IMPORT_C void AppendL(const TDesC8& aPtr); williamr@2: IMPORT_C void InsertL(TInt aPos,const TDesC8& aPtr); williamr@2: IMPORT_C TInt InsertIsqL(const TDesC8& aPtr,TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C TInt InsertIsqAllowDuplicatesL(const TDesC8& aPtr,TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C void Sort(TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C TInt Find(const TDesC8& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType=ECmpFolded) const; williamr@2: IMPORT_C TInt FindIsq(const TDesC8& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType=ECmpFolded) const; williamr@2: IMPORT_C void Delete(TInt aPos); williamr@2: IMPORT_C void Delete(TInt aIndex,TInt aCount); williamr@2: IMPORT_C void Reset(); williamr@2: inline TPtrC8 operator[](TInt aIndex) const; williamr@2: // from MDesC8Array williamr@2: IMPORT_C TInt MdcaCount() const; williamr@2: IMPORT_C TPtrC8 MdcaPoint(TInt aIndex) const; williamr@2: }; williamr@2: williamr@2: inline TPtrC8 CDesC8Array::operator[](TInt aIndex) const williamr@2: { return(MdcaPoint(aIndex)); } williamr@2: williamr@2: williamr@2: class CDesC8ArrayFlat : public CDesC8Array williamr@2: /** An array of 8 bit descriptors implemented using a flat buffer. williamr@2: "bafl.lib" williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CDesC8ArrayFlat(TInt aGranularity); williamr@2: IMPORT_C ~CDesC8ArrayFlat(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CDesC8ArraySeg : public CDesC8Array williamr@2: /** An array of 8 bit descriptors implemented using a segmented buffer. williamr@2: "bafl.lib" williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CDesC8ArraySeg(TInt aGranularity); williamr@2: IMPORT_C ~CDesC8ArraySeg(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CDesC16Array : public CArrayFixBase, public MDesC16Array williamr@2: /** An implementation base class for 16 bit descriptor arrays. It provides some williamr@2: of the behaviour for 16 bit descriptor arrays. williamr@2: williamr@2: The class is abstract and cannot be instantiated. williamr@2: " bafl.lib " williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: IMPORT_C CDesC16Array(TBufRep aRep,TInt aGranularity); williamr@2: public: williamr@2: IMPORT_C ~CDesC16Array(); williamr@2: IMPORT_C void AppendL(const TDesC16& aPtr); williamr@2: IMPORT_C void InsertL(TInt aPos,const TDesC16& aPtr); williamr@2: IMPORT_C TInt InsertIsqL(const TDesC16& aPtr,TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C TInt InsertIsqAllowDuplicatesL(const TDesC16& aPtr,TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C void Sort(TKeyCmpText aTextComparisonType=ECmpFolded); williamr@2: IMPORT_C TInt Find(const TDesC16& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType=ECmpFolded) const; williamr@2: IMPORT_C TInt FindIsq(const TDesC16& aPtr,TInt& aPos,TKeyCmpText aTextComparisonType=ECmpFolded) const; williamr@2: IMPORT_C void Delete(TInt aPos); williamr@2: IMPORT_C void Delete(TInt aIndex,TInt aCount); williamr@2: IMPORT_C void Reset(); williamr@2: inline TPtrC16 operator[](TInt aIndex) const; williamr@2: // from MDesC16Array williamr@2: IMPORT_C TInt MdcaCount() const; williamr@2: IMPORT_C TPtrC16 MdcaPoint(TInt aIndex) const; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: inline TPtrC16 CDesC16Array::operator[](TInt aIndex) const williamr@2: /** Returns a non-modifiable descriptor to represent the descriptor williamr@2: element located at the specified index within the array. williamr@2: williamr@2: @param aIndex The position of the descriptor element within the array. williamr@2: The position is relative to zero; i.e. zero implies the first descriptor williamr@2: element in the array. This value must be non-negative and less than the williamr@2: number of descriptors currently within the array otherwise the operator williamr@2: panics with williamr@2: @code williamr@2: EArrayIndexOutOfRange williamr@2: @endcode williamr@2: @return A 16 bit non-modifiable pointer descriptor. */ williamr@2: { return(MdcaPoint(aIndex)); } williamr@2: williamr@2: williamr@2: class CDesC16ArrayFlat : public CDesC16Array williamr@2: /** Array of 16 bit descriptors implemented using a flat buffer. williamr@2: "bafl.lib williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CDesC16ArrayFlat(TInt aGranularity); williamr@2: IMPORT_C ~CDesC16ArrayFlat(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CDesC16ArraySeg : public CDesC16Array williamr@2: /** An array of 16 bit descriptors implemented using a segmented buffer. williamr@2: "bafl.lib" williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CDesC16ArraySeg(TInt aGranularity); williamr@2: IMPORT_C ~CDesC16ArraySeg(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CPtrC8Array : public CArrayFixFlat, public MDesC8Array williamr@2: /** Array of 8 bit non-modifiable pointer descriptors, TPtrC8, implemented using williamr@2: a flat buffer. williamr@2: "bafl.lib" williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CPtrC8Array(TInt aGranularity); williamr@2: IMPORT_C ~CPtrC8Array(); williamr@2: // williamr@2: IMPORT_C void CopyL(const MDesC8Array& aArray); williamr@2: inline void operator=(const MDesC8Array& aArray); williamr@2: // Mixin members williamr@2: IMPORT_C TInt MdcaCount() const; williamr@2: IMPORT_C TPtrC8 MdcaPoint(TInt aIndex) const; williamr@2: }; williamr@2: williamr@2: williamr@2: class CPtrC16Array : public CArrayFixFlat, public MDesC16Array williamr@2: /** An array of 16 bit non-modifiable pointer descriptors, TPtrC16, implemented williamr@2: using a flat buffer. williamr@2: "bafl.lib" williamr@2: @since 5.0 williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CPtrC16Array(TInt aGranularity); williamr@2: IMPORT_C ~CPtrC16Array(); williamr@2: // williamr@2: IMPORT_C void CopyL(const MDesC16Array& aArray); williamr@2: inline void operator=(const MDesC16Array& aArray); williamr@2: // Mixin members williamr@2: IMPORT_C TInt MdcaCount() const; williamr@2: IMPORT_C TPtrC16 MdcaPoint(TInt aIndex) const; williamr@2: }; williamr@2: williamr@2: williamr@2: inline void CPtrC8Array::operator=(const MDesC8Array& aArray) williamr@2: /** Copies a descriptor array into this array, deleting any pre-existing williamr@2: elements. williamr@2: williamr@2: The function constructs TPtrC8 elements for each descriptor element williamr@2: in the specified descriptor array. This operator behaves in the williamr@2: same ways as CPtrC8Array::CopyL(). williamr@2: williamr@2: @param aArrayA reference to any descriptor array which satisfies williamr@2: the protocol defined by this mixin class. */ williamr@2: {CopyL(aArray);} williamr@2: williamr@2: williamr@2: inline void CPtrC16Array::operator=(const MDesC16Array& aArray) williamr@2: /** Copies a descriptor array into this array, deleting any pre-existing williamr@2: elements. williamr@2: williamr@2: The function constructs TPtrC16 elements for each descriptor element williamr@2: in the specified descriptor array.This operator behaves in the williamr@2: same ways as CPtrC16Array::CopyL(). williamr@2: williamr@2: @param aArray A reference to any descriptor array which satisfies williamr@2: the protocol defined by this mixin class. */ williamr@2: {CopyL(aArray);} williamr@2: williamr@2: // generic text array definitions williamr@2: williamr@2: #if defined (_UNICODE) williamr@2: /** Build independent implementation base class for descriptor arrays. williamr@2: williamr@2: @see CDesC8Array williamr@2: @see CDesC16Array williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC16Array CDesCArray; williamr@2: williamr@2: /** Build independent array of descriptors implemented using a flat buffer. williamr@2: williamr@2: @see CDesC8ArrayFlat williamr@2: @see CDesC16ArrayFlat williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC16ArrayFlat CDesCArrayFlat; williamr@2: williamr@2: /** Build independent array of descriptors implemented using a segmented buffer. williamr@2: williamr@2: @see CDesC16ArraySeg williamr@2: @see CDesC8ArraySeg williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC16ArraySeg CDesCArraySeg; williamr@2: williamr@2: /** Build independent array of non-modifiable pointer descriptors. williamr@2: williamr@2: A 16 bit build variant is generated for a Unicode build and an 8 bit build williamr@2: variant generated for a non-Unicode build. williamr@2: williamr@2: This build independent type should always be used unless an explicit 8 bit williamr@2: or 16 bit build variant is required. williamr@2: williamr@2: @see CPtrC16Array williamr@2: @see CPtrC8Array williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CPtrC16Array CPtrCArray; williamr@2: #else williamr@2: /** Build independent implementation base class for descriptor arrays. williamr@2: williamr@2: @see CDesC8Array williamr@2: @see CDesC16Array williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC8Array CDesCArray; williamr@2: /** Build independent array of descriptors implemented using a flat buffer. williamr@2: williamr@2: @see CDesC8ArrayFlat williamr@2: @see CDesC16ArrayFlat williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC8ArrayFlat CDesCArrayFlat; williamr@2: /** Build independent array of descriptors implemented using a segmented buffer. williamr@2: williamr@2: @see CDesC16ArraySeg williamr@2: @see CDesC8ArraySeg williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CDesC8ArraySeg CDesCArraySeg; williamr@2: /** Build independent array of non-modifiable pointer descriptors. williamr@2: williamr@2: A 16 bit build variant is generated for a Unicode build and an 8 bit build williamr@2: variant generated for a non-Unicode build. williamr@2: williamr@2: This build independent type should always be used unless an explicit 8 bit williamr@2: or 16 bit build variant is required. williamr@2: williamr@2: @see CPtrC16Array williamr@2: @see CPtrC8Array williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef CPtrC8Array CPtrCArray; williamr@2: #endif williamr@2: williamr@2: williamr@2: #endif // __BADESCA_H__ williamr@4: williamr@4: williamr@4: williamr@4: