williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef __TLDLISTDEF_H__ williamr@4: #define __TLDLISTDEF_H__ williamr@4: williamr@4: #include williamr@4: #include williamr@4: williamr@4: using namespace InetUriList; williamr@4: williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: williamr@4: class TBase williamr@4: { williamr@4: friend class TPolicyQueryArgs; williamr@4: friend class TQueryResults; williamr@4: williamr@4: public: williamr@4: /** williamr@4: Default constructor williamr@4: */ williamr@4: inline TBase () williamr@4: :iFlags ( 0 ) williamr@4: {} williamr@4: williamr@4: private: williamr@4: /** williamr@4: Bit width of the type. williamr@4: */ williamr@4: enum williamr@4: { williamr@4: KBitsPerType = 3 williamr@4: }; williamr@4: williamr@4: /** williamr@4: Maximum number of arguments. Currently set as 4. williamr@4: */ williamr@4: enum williamr@4: { williamr@4: KMaxArguments = 4 williamr@4: }; williamr@4: williamr@4: protected: williamr@4: TInt iArgs [KMaxArguments]; williamr@4: TInt iFlags; williamr@4: }; williamr@4: williamr@4: //----------------------------------------------------------------- williamr@4: class TPolicyQueryArgs:public TBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: The argument types. williamr@4: */ williamr@4: enum TPolicyArgType williamr@4: { williamr@4: ETldUri = 1, williamr@4: ETldListType, williamr@4: ETldQueryType williamr@4: }; williamr@4: williamr@4: /** williamr@4: Default constructor williamr@4: */ williamr@4: inline TPolicyQueryArgs () williamr@4: :TBase() williamr@4: {} williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes one argument. williamr@4: */ williamr@4: template < class T0 > williamr@4: explicit inline TPolicyQueryArgs ( T0 a0 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: iFlags=(Type(a0)<<(( Type(a0))*KBitsPerType)); williamr@4: } williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes two arguments. williamr@4: */ williamr@4: template < class T0, class T1 > williamr@4: inline TPolicyQueryArgs ( T0 a0, T1 a1 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: Assign ( a1 ); williamr@4: iFlags=(Type(a0)<<(( Type(a0))*KBitsPerType)) | williamr@4: (Type(a1)<<(( Type(a1))*KBitsPerType)); williamr@4: } williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes three arguments. williamr@4: */ williamr@4: template < class T0, class T1, class T2 > williamr@4: inline TPolicyQueryArgs ( T0 a0, T1 a1, T2 a2 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: Assign ( a1 ); williamr@4: Assign ( a2 ); williamr@4: iFlags=(Type(a0)<<(Type(a0)*KBitsPerType)) | williamr@4: (Type(a1)<<(Type(a1)*KBitsPerType)) | williamr@4: (Type(a2)<<(Type(a2)*KBitsPerType)); williamr@4: } williamr@4: /** williamr@4: Returns the argument if set, otherwise returns KErrNotFound. williamr@4: */ williamr@4: TInt Get ( TPolicyArgType aType ) const williamr@4: { williamr@4: if ( IsSet ( aType ) ) williamr@4: return iArgs[aType - 1]; williamr@4: return KErrNotFound; williamr@4: } williamr@4: williamr@4: private: williamr@4: /** williamr@4: Checks whether the flag is set for the given argument type. williamr@4: */ williamr@4: TBool IsSet ( TPolicyArgType aType ) const williamr@4: { williamr@4: TInt val = iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: return iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: } williamr@4: williamr@4: TPolicyArgType Type ( const TDesC8* ) williamr@4: { williamr@4: return ETldUri; williamr@4: } williamr@4: williamr@4: TPolicyArgType Type ( InetUriList::TListType ) williamr@4: { williamr@4: return ETldListType; williamr@4: } williamr@4: williamr@4: TPolicyArgType Type ( InetUriList::TTLDQueryType ) williamr@4: { williamr@4: return ETldQueryType; williamr@4: } williamr@4: williamr@4: void Assign ( const TDesC8* aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = (TInt)aValue; williamr@4: } williamr@4: williamr@4: void Assign ( InetUriList::TListType aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = aValue; williamr@4: } williamr@4: williamr@4: void Assign ( InetUriList::TTLDQueryType aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = aValue; williamr@4: } williamr@4: williamr@4: williamr@4: }; williamr@4: williamr@4: #else williamr@4: class TBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: Bit width of the type. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: enum williamr@4: { williamr@4: KBitsPerType = 3 williamr@4: }; williamr@4: williamr@4: /** williamr@4: Maximum number of arguments. Currently set as 4. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: enum williamr@4: { williamr@4: KMaxArguments = 4 williamr@4: }; williamr@4: williamr@4: /** williamr@4: Default constructor williamr@4: */ williamr@4: inline TBase () williamr@4: :iFlags ( 0 ) williamr@4: {} williamr@4: williamr@4: protected: williamr@4: TInt iArgs [KMaxArguments]; williamr@4: TInt iFlags; williamr@4: }; williamr@4: williamr@4: //----------------------------------------------------------------- williamr@4: class TPolicyQueryArgs:public TBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: The argument types. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: enum TPolicyArgType williamr@4: { williamr@4: ETldUri = 1, williamr@4: ETldListType, williamr@4: ETldQueryType williamr@4: }; williamr@4: williamr@4: /** williamr@4: Default constructor williamr@4: */ williamr@4: inline TPolicyQueryArgs () williamr@4: :TBase() williamr@4: {} williamr@4: williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes one argument. williamr@4: */ williamr@4: template < class T0 > williamr@4: explicit inline TPolicyQueryArgs ( T0 a0 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: iFlags=(Type(a0)<<(( Type(a0))*KBitsPerType)); williamr@4: } williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes two arguments. williamr@4: */ williamr@4: template < class T0, class T1 > williamr@4: inline TPolicyQueryArgs ( T0 a0, T1 a1 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: Assign ( a1 ); williamr@4: iFlags=(Type(a0)<<(( Type(a0))*KBitsPerType)) | williamr@4: (Type(a1)<<(( Type(a1))*KBitsPerType)); williamr@4: } williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes three arguments. williamr@4: */ williamr@4: template < class T0, class T1, class T2 > williamr@4: inline TPolicyQueryArgs ( T0 a0, T1 a1, T2 a2 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: Assign ( a1 ); williamr@4: Assign ( a2 ); williamr@4: iFlags=(Type(a0)<<(Type(a0)*KBitsPerType)) | williamr@4: (Type(a1)<<(Type(a1)*KBitsPerType)) | williamr@4: (Type(a2)<<(Type(a2)*KBitsPerType)); williamr@4: } williamr@4: williamr@4: /** williamr@4: Checks whether the flag is set for the given argument type. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: TBool IsSet ( TPolicyArgType aType ) const williamr@4: { williamr@4: TInt val = iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: return iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: } williamr@4: williamr@4: /** williamr@4: Returns the argument if set, otherwise returns KErrNotFound. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: TInt Get ( TPolicyArgType aType ) const williamr@4: { williamr@4: if ( IsSet ( aType ) ) williamr@4: return iArgs[aType - 1]; williamr@4: return KErrNotFound; williamr@4: } williamr@4: williamr@4: williamr@4: private: williamr@4: williamr@4: /** williamr@4: @internalComponent williamr@4: */ williamr@4: TPolicyArgType Type ( const TDesC8* ) williamr@4: { williamr@4: return ETldUri; williamr@4: } williamr@4: williamr@4: TPolicyArgType Type ( InetUriList::TListType ) williamr@4: { williamr@4: return ETldListType; williamr@4: } williamr@4: williamr@4: TPolicyArgType Type ( InetUriList::TTLDQueryType ) williamr@4: { williamr@4: return ETldQueryType; williamr@4: } williamr@4: williamr@4: void Assign ( const TDesC8* aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = (TInt)aValue; williamr@4: } williamr@4: williamr@4: void Assign ( InetUriList::TListType aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = aValue; williamr@4: } williamr@4: williamr@4: void Assign ( InetUriList::TTLDQueryType aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = aValue; williamr@4: } williamr@4: williamr@4: williamr@4: }; williamr@4: williamr@4: williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: williamr@4: williamr@4: //------------------------------------------------------------------------ williamr@4: class TQueryResults: public TBase williamr@4: { williamr@4: public: williamr@4: /** williamr@4: Default constructor williamr@4: */ williamr@4: inline TQueryResults () williamr@4: :TBase() williamr@4: {} williamr@4: williamr@4: ~TQueryResults () williamr@4: { williamr@4: if ( IsSet( TQueryResults::ETldCharSet ) ) williamr@4: { williamr@4: //Delete memory on Heap. williamr@4: HBufC8* uriBuf = (reinterpret_cast ( Get ( TQueryResults::ETldCharSet ) )); williamr@4: delete uriBuf; williamr@4: } williamr@4: } williamr@4: williamr@4: /** williamr@4: returns a pointer to policydata williamr@4: */ williamr@4: HBufC8* CharsetL() williamr@4: { williamr@4: __ASSERT_ALWAYS( IsSet(TQueryResults::ETldCharSet), User::Panic( KTldInvalidRequest, KErrPolicyDataNotPresent )); williamr@4: const TDesC8& uri = *( reinterpret_cast (Get ( TQueryResults::ETldCharSet ) ) ); williamr@4: return uri.AllocL(); williamr@4: } williamr@4: williamr@4: /** williamr@4: returns a list type williamr@4: */ williamr@4: InetUriList::TListType ListType() williamr@4: { williamr@4: __ASSERT_ALWAYS( IsSet(TQueryResults::ETldListType), User::Panic( KTldInvalidRequest, KErrPolicyListTypeNotPresent )); williamr@4: return (static_cast (Get ( TQueryResults::ETldListType ) )); williamr@4: } williamr@4: williamr@4: /** williamr@4: A templated constructor that constructs the query argument. williamr@4: It takes one argument. --Check this williamr@4: */ williamr@4: template < class T0 > williamr@4: inline void Set ( T0 a0 ) williamr@4: { williamr@4: Assign ( a0 ); williamr@4: iFlags=(Type(a0)<<(( Type(a0))*KBitsPerType)); williamr@4: } williamr@4: williamr@4: private: williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: The argument types. williamr@4: */ williamr@4: #else williamr@4: /** williamr@4: The argument types. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: enum TResultsArgType williamr@4: { williamr@4: ETldCharSet = 1, williamr@4: ETldListType williamr@4: }; williamr@4: williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: Checks whether the flag is set for the given argument type. williamr@4: */ williamr@4: #else williamr@4: /** williamr@4: Checks whether the flag is set for the given argument type. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: TBool IsSet ( TResultsArgType aType ) const williamr@4: { williamr@4: TInt val = iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: return iFlags & ( aType << ( aType * KBitsPerType ) ); williamr@4: } williamr@4: williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: Returns the argument if set, otherwise returns KErrNotFound. williamr@4: */ williamr@4: #else williamr@4: /** williamr@4: Returns the argument if set, otherwise returns KErrNotFound. williamr@4: williamr@4: @internalComponent williamr@4: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: TInt Get ( TResultsArgType aType ) const williamr@4: { williamr@4: if ( IsSet ( aType ) ) williamr@4: return iArgs[aType - 1]; williamr@4: return KErrNotFound; williamr@4: } williamr@4: williamr@4: private: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** williamr@4: @internalComponent williamr@4: */ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: williamr@4: TResultsArgType Type ( const TDesC8* ) williamr@4: { williamr@4: return ETldCharSet; williamr@4: } williamr@4: williamr@4: TResultsArgType Type ( InetUriList::TListType ) williamr@4: { williamr@4: return ETldListType; williamr@4: } williamr@4: williamr@4: void Assign ( const TDesC8* aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = (TInt)aValue; williamr@4: } williamr@4: williamr@4: void Assign ( InetUriList::TListType aValue ) williamr@4: { williamr@4: iArgs[Type(aValue)-1] = aValue; williamr@4: } williamr@4: }; williamr@4: williamr@4: #endif // __TLDLISTDEF_H__ williamr@4: