diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/bookmarksupport/test/cenrepsrv/setting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/bookmarksupport/test/cenrepsrv/setting.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,202 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef SETTING_H +#define SETTING_H + +#include +#include + +#include +#include "srvdefs.h" + + + +class TSettingsAccessPolicy; + +class TServerSetting + { + friend class RSettingsArray; +public: + enum TType { EInt = 0x00000000, + EReal = 0x10000000, + EString = 0x20000000, + EDeleted = 0x30000000 }; + + inline TServerSetting(); + inline TServerSetting(TUint32 aKey); + + inline TInt ReplaceTypeAndValue(const TServerSetting& source); + inline TInt Replace(const TServerSetting& source); + inline TInt Transfer(TServerSetting& source); + + inline TUint32 Key() const; + inline void SetKey(TUint32 aKey); + inline TUint32 Meta() const; + inline void SetMeta(const TUint32 aMeta); + inline TBool IsClean(){return(iMeta & KMetaDefaultValue);}; + inline void SetClean(){iMeta |= KMetaDefaultValue;}; + inline TUint32 Type() const; + inline void SetType(const TUint32 aType); + + inline TInt GetIntValue() const; + inline const TReal& GetRealValue() const; + inline const HBufC8* GetStrValue() const; + + inline void SetIntValue(TInt aVal); + inline void SetRealValue(const TReal* aVal); + inline void SetStrValue(const HBufC8* aVal); + + inline void SetDeleted(); + + inline void CopyValueL(TInt aVal); + inline void CopyValueL(const TReal& aVal); + inline void CopyValueL(const TDesC8& aVal); + + inline TInt AssignValueTo(TInt& aVal) const; + inline TInt AssignValueTo(TReal& aVal) const; + inline TInt AssignValueTo(TDes8& aVal) const; + + inline TInt AssignValueFromL(TInt aVal); + inline TInt AssignValueFromL(const TReal& aVal); + inline TInt AssignValueFromL(const TDesC8& aVal); + + inline void PushL() const; + inline void Pop() const; + + inline void Reset(); + inline void ResetValue(); + + inline TInt operator==(const TServerSetting& aSetting) const; + inline TInt operator==(TInt aVal) const; + inline TInt operator==(const TReal& aVal) const; + inline TInt operator==(const TDesC8& aVal) const; + + template + inline TInt operator!=(const T& aVal) const + { + return !operator==(aVal); + } + + inline TSettingsAccessPolicy* AccessPolicy() const; + inline void SetAccessPolicy(TSettingsAccessPolicy* aPolicy); + inline const TSecurityPolicy* GetReadAccessPolicy() const; + inline const TSecurityPolicy* GetWriteAccessPolicy() const; + inline TBool HasAccessPolicy() const; + + inline void ExternalizeL(RWriteStream& aStream) const; + inline void InternalizeL(RReadStream& aStream); + inline void ExternalizeMetaL(RWriteStream& aStream) const; + inline void InternalizeMetaL(RReadStream& aStream); + + inline TBool IsType(const TInt&) const; + inline TBool IsType(const TReal&) const; + inline TBool IsType(const TDesC8&) const; + inline TBool IsType(const TDesC16&) const; + + inline TBool IsInt() const; + inline TBool IsReal() const; + inline TBool IsStr() const; + inline TBool IsDeleted() const; + +private: + TUint32 iKey; + TUint32 iMeta; + union TValue { TInt i; TReal* r; HBufC8* s; } iValue; + + // A bit of dilemma how to store TSecurePolicy for read/write access... + // If we were implementing a list of policies per an entry then RArray would be an obvious choice, + // but even then when no policy is specified each entry would have RArray (in compressed state 24B) + // Or we could have two instances of TSecurePolicy (6B each) + // so lets go for a link to a separate array of policies allocated only when needed + + TSettingsAccessPolicy* iAccessPolicy; + }; + + +class TSettingsAccessPolicy + { + friend class CSharedRepository; + friend class CIniFileOut; + +public: + // Single entry type is maintained in a separate array + // then the range type... to avoid duplicities + enum {ESingleSettingPolicy,ERangeSettingsPolicy}; + + inline TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,TSecurityPolicy& aWritePolicy, + TUint32 aLowKey, TUint32 aHighKey, TUint32 aKeyMask=0); + inline TSettingsAccessPolicy(TSecurityPolicy& aReadPolicy,TSecurityPolicy& aWritePolicy, + TUint32 aKey); + + + inline TBool IsInRange(TUint32 aKey) const; + inline const TSecurityPolicy* GetReadAccessPolicy() const; + inline const TSecurityPolicy* GetWriteAccessPolicy() const; + + inline void ExternalizeL(RWriteStream& aStream) const; + inline void InternalizeL(RReadStream& aStream) ; + inline TSettingsAccessPolicy(); + inline TUint32 LowKey() const; + inline TUint32 HighKey() const; + inline TUint32 KeyMask() const; + +private: + inline TSettingsAccessPolicy(TUint32 key); +private: + // we can have 'duplicites' where a single policy would have the same key + // as 'range' policy with the low key... + TUint32 iLowKey; // used as a key for single policy as well + TUint32 iHighKey; // only used for Range + TUint32 iKeyMask; // only used for Range + + + TSecurityPolicy iReadAccessPolicy; + TSecurityPolicy iWriteAccessPolicy; + + }; + +class TSettingsDefaultMeta + { + friend class CSharedRepository; +public: + inline TSettingsDefaultMeta(TUint32 aValue, TUint32 aLowKey, + TUint32 aHighKey, TUint32 aKeyMask=0); + + inline TBool IsInRange(TUint32 aKey) const; + inline TSettingsDefaultMeta(); + + inline TUint32 GetDefaultMetadata() const + { + return iDefaultMetaData ; + }; + + inline void ExternalizeL(RWriteStream& aStream) const; + inline void InternalizeL(RReadStream& aStream) ; + + inline TUint32 LowKey() const; + inline TUint32 HighKey() const; + inline TUint32 KeyMask() const; + +private: + TUint32 iLowKey; + TUint32 iHighKey; + TUint32 iKeyMask; + TUint32 iDefaultMetaData; + }; + +#include "setting.inl" + +#endif // SETTING_H