sl@0: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #if !defined(__S32CONT_H__) sl@0: #define __S32CONT_H__ sl@0: #if !defined(__S32BTREE_H__) sl@0: #include sl@0: #endif sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedSetToken : public TBtreeToken sl@0: { sl@0: public: sl@0: TPagedSetToken() {} sl@0: inline TPagedSetToken(TEmpty); sl@0: // sl@0: inline TInt Count() const; sl@0: // sl@0: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; sl@0: IMPORT_C void InternalizeL(RReadStream& aStream); sl@0: protected: sl@0: IMPORT_C void Clear(); sl@0: private: sl@0: inline TPagedSetToken(const TBtreeToken& aTree,TInt aCount); sl@0: private: sl@0: TInt iCount; sl@0: private: sl@0: friend class TPagedSetBase; sl@0: }; sl@0: #define KEmptyPagedSetToken TPagedSetToken(TPagedSetToken::EEmpty) sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedSetBase sl@0: { sl@0: public: sl@0: IMPORT_C void Connect(MPagePool* aPool); sl@0: IMPORT_C void Set(const TPagedSetToken& aToken); sl@0: IMPORT_C TPagedSetToken Token() const; sl@0: // sl@0: inline TBool IsDirty() const; sl@0: inline void MarkCurrent(); sl@0: inline void MarkDirty(); sl@0: // sl@0: inline TBool IsBroken() const; sl@0: inline TBool IsIntact() const; sl@0: inline void MarkBroken(); sl@0: IMPORT_C TInt RepairL(); sl@0: // sl@0: inline TInt Count() const; sl@0: inline TBool IsEmpty() const; sl@0: IMPORT_C void ClearL(); sl@0: // sl@0: IMPORT_C TBool ContainsL(const TAny* aPtr) const; sl@0: IMPORT_C void InsertL(const TAny* aPtr); sl@0: IMPORT_C void DeleteL(const TAny* aPtr); sl@0: protected: sl@0: IMPORT_C TPagedSetBase(TInt anEntrySize); sl@0: IMPORT_C TPagedSetBase(const TPagedSetToken& aToken,TInt anEntrySize); sl@0: IMPORT_C void InsertAllowDuplicatesL(const TAny* aPtr); sl@0: private: sl@0: TBtreeFix iTree; sl@0: TBtreeKey iKey; sl@0: TInt iCount; sl@0: private: sl@0: friend class TPagedSetIterBase; sl@0: friend class TPagedSetBiIterBase; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedMultisetBase : public TPagedSetBase sl@0: { sl@0: public: sl@0: inline void InsertL(const TAny* aPtr); sl@0: protected: sl@0: inline TPagedMultisetBase(TInt anEntrySize); sl@0: inline TPagedMultisetBase(const TPagedSetToken& aToken,TInt anEntrySize); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: template sl@0: class TPagedSet : public TPagedSetBase sl@0: { sl@0: public: sl@0: inline TPagedSet(); sl@0: inline TPagedSet(const TPagedSetToken& aToken); sl@0: // sl@0: inline TBool ContainsL(const T& anObject) const; sl@0: inline void InsertL(const T& anObject); sl@0: inline void DeleteL(const T& anObject); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: TEMPLATE_SPECIALIZATION class TPagedSet : public TPagedSetBase sl@0: { sl@0: public: sl@0: inline TPagedSet(TInt anEntrySize); sl@0: inline TPagedSet(const TPagedSetToken& aToken,TInt anEntrySize); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: template sl@0: class TPagedMultiset : public TPagedMultisetBase sl@0: { sl@0: public: sl@0: inline TPagedMultiset(); sl@0: inline TPagedMultiset(const TPagedSetToken& aToken); sl@0: // sl@0: inline TBool ContainsL(const T& anObject) const; sl@0: inline void InsertL(const T& anObject); sl@0: inline void DeleteL(const T& anObject); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: TEMPLATE_SPECIALIZATION class TPagedMultiset : public TPagedMultisetBase sl@0: { sl@0: public: sl@0: inline TPagedMultiset(TInt anEntrySize); sl@0: inline TPagedMultiset(const TPagedSetToken& aToken,TInt anEntrySize); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedSetIterBase sl@0: { sl@0: public: sl@0: IMPORT_C TBool ResetL(); sl@0: IMPORT_C TBool NextL(); sl@0: IMPORT_C void ExtractAtL(TAny* aPtr) const; sl@0: protected: sl@0: inline TPagedSetIterBase(const TPagedSetBase& aSet); sl@0: private: sl@0: const TBtreeFixBase* iTree; sl@0: TBtreeMark iMark; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: template sl@0: class TPagedSetIter : public TPagedSetIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetIter(const TPagedSet& aSet); sl@0: inline TPagedSetIter(const TPagedMultiset& aSet); sl@0: inline T AtL() const; sl@0: inline void ExtractAtL(T& anObject) const; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: TEMPLATE_SPECIALIZATION class TPagedSetIter : public TPagedSetIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetIter(const TPagedSetBase& aSet); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedSetBiIterBase sl@0: { sl@0: public: sl@0: IMPORT_C TBool FirstL(); sl@0: IMPORT_C TBool LastL(); sl@0: IMPORT_C TBool NextL(); sl@0: IMPORT_C TBool PreviousL(); sl@0: IMPORT_C void ExtractAtL(TAny* aPtr) const; sl@0: protected: sl@0: inline TPagedSetBiIterBase(const TPagedSetBase& aSet); sl@0: private: sl@0: const TBtreeFixBase* iTree; sl@0: TBtreePos iPos; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: template sl@0: class TPagedSetBiIter : public TPagedSetBiIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetBiIter(const TPagedSet& aSet); sl@0: inline TPagedSetBiIter(const TPagedMultiset& aSet); sl@0: inline T AtL() const; sl@0: inline void ExtractAtL(T& anObject) const; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: TEMPLATE_SPECIALIZATION class TPagedSetBiIter : public TPagedSetBiIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetBiIter(const TPagedSetBase& aSet); sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: class TPagedSetRIterBase sl@0: { sl@0: public: sl@0: inline TBool ResetL(); sl@0: inline TBool NextL(); sl@0: inline void ExtractAtL(TAny* aPtr) const; sl@0: protected: sl@0: inline TPagedSetRIterBase(const TPagedSetBase& aSet); sl@0: private: sl@0: TPagedSetBiIter iIter; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: template sl@0: class TPagedSetRIter : public TPagedSetRIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetRIter(const TPagedSet& aSet); sl@0: inline TPagedSetRIter(const TPagedMultiset& aSet); sl@0: inline T AtL() const; sl@0: inline void ExtractAtL(T& anObject) const; sl@0: }; sl@0: sl@0: /** sl@0: * @publishedAll sl@0: * @released sl@0: */ sl@0: TEMPLATE_SPECIALIZATION class TPagedSetRIter : public TPagedSetRIterBase sl@0: { sl@0: public: sl@0: inline TPagedSetRIter(const TPagedSetBase& aSet); sl@0: }; sl@0: sl@0: #include sl@0: #endif