epoc32/include/mw/thttpheadervaluevariant.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #ifndef __THTTPHEADERVALUEVARIANT_H__
    17 #define __THTTPHEADERVALUEVARIANT_H__
    18 
    19 #include <http.h>
    20 class RStringPool;
    21 
    22 /**
    23  * THttpHeaderValueVariant represents a value found in the header element. The value of the header element 
    24  * can be of the various datatype like integer, string and datetime hence THttpHeaderValueVariant is a container
    25  * for them.  
    26  * 
    27  * @publishedAll
    28  * @prototype
    29  */
    30 
    31 class THttpHeaderValueVariant
    32 	{
    33 friend class THttpHeaderParamIterator;
    34 friend class THttpHeaderElementIterator;
    35 friend class THttpHeaderIterator;
    36 friend class CHttpClient;
    37 friend class CHttpClientTransaction;
    38 public:
    39     /**
    40      * Enumeration type.
    41      * 
    42      */
    43 	typedef enum
    44 			{
    45 			ENoType 			= 0x00,  // No concrete datatype
    46 			EIntType			= 0x01,  // Integer datatype
    47 			EStrType 			=	0x02, // String datatype
    48 			EDateTimeType	= 0x03 // Datetime datatype
    49 			}THttpVariantType;
    50 public:
    51 	/**
    52 	 * Default constructor
    53 	 */
    54 	inline THttpHeaderValueVariant();
    55 	/**
    56 	 * Constructor 
    57 	 */
    58 	inline THttpHeaderValueVariant(TInt aIntVariant);
    59 	inline THttpHeaderValueVariant(const TDesC8& aStrVariant);
    60 	inline THttpHeaderValueVariant(TDateTime aDateVariant);
    61 	/**
    62 	 * Set the integer value
    63 	 * @param aIntVariant Integer value
    64 	 */
    65 	inline void SetInt(TInt aIntVariant);
    66 	/**
    67 	 * Set the string value
    68 	 * @param aStrVariant String value
    69 	 */
    70 	inline void SetStr(const TDesC8& aStrVariant);
    71 	/**
    72 	 * Set the datettime value
    73 	 * @param aDateVariant Datettime value
    74 	 */
    75 	inline void SetDateTime(TDateTime aDateVariant);
    76 	
    77 	/**
    78 	 * Return the type that is represented by "this" object
    79 	 * 
    80 	 */
    81 	inline THttpVariantType Type() const;
    82 	
    83 	/**
    84 	 * Returns the contained integer. Will panic if the contained
    85 	 * datatype is not an ineger
    86 	 */
    87 	inline TInt Int() const;
    88     
    89 	/**
    90      * Returns the contained string. Will panic if the contained
    91      * datatype is not an string
    92      */	
    93 	inline TPtrC8 Str() const;
    94 	
    95     /**
    96      * Returns the contained datetime value. Will panic if the contained
    97      * datatype is not a datettime value
    98      */ 
    99 	inline TDateTime DateTime() const;
   100 
   101 private:	
   102 	THttpVariantType	               iVariantType;
   103 	TInt                               iVariantVal;
   104 	TInt							   iMoreSpace;
   105 	};
   106 
   107 
   108 inline THttpHeaderValueVariant::THttpHeaderValueVariant()
   109 : iVariantVal(0),
   110 iVariantType(ENoType),
   111 iMoreSpace(0)
   112 	{
   113 	}
   114 
   115 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TInt aInt)
   116 : iVariantVal(aInt),
   117 iVariantType(EIntType),
   118 iMoreSpace(0)
   119 	{
   120 	}
   121 
   122 inline THttpHeaderValueVariant::THttpHeaderValueVariant(const TDesC8& aStr)
   123 : iVariantVal(reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()))),
   124 iVariantType(EStrType),
   125 iMoreSpace(aStr.Length())
   126 	{
   127 	}
   128 
   129 inline THttpHeaderValueVariant::THttpHeaderValueVariant(TDateTime aDateTime)
   130 : iVariantType(EDateTimeType),
   131 	iMoreSpace(0)
   132 	{
   133 	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
   134 	}
   135 	
   136 inline void THttpHeaderValueVariant::SetInt(TInt aInt)
   137 	{
   138 	iVariantVal = aInt;
   139 	iMoreSpace = 0;
   140 	iVariantType = EIntType;
   141 	}
   142 		
   143 inline void THttpHeaderValueVariant::SetStr(const TDesC8& aStr)
   144 	{	
   145 	iVariantVal = reinterpret_cast<TInt>(const_cast<TUint8*>(aStr.Ptr()));	
   146 	iMoreSpace = aStr.Length();	
   147 	iVariantType = EStrType;	
   148 	}
   149 	
   150 inline void THttpHeaderValueVariant::SetDateTime(TDateTime aDateTime)
   151 	{
   152 	*reinterpret_cast<TTime*>(&iVariantVal) = aDateTime;
   153 	iVariantType = EDateTimeType;
   154 	iMoreSpace = 0;
   155 	}
   156 	
   157 inline THttpHeaderValueVariant::THttpVariantType THttpHeaderValueVariant::Type() const
   158 	{
   159 	return iVariantType;
   160 	}
   161 
   162 inline TInt THttpHeaderValueVariant::Int() const
   163 	{
   164 	__ASSERT_DEBUG(iVariantType == EIntType, User::Invariant());
   165 	return iVariantVal;
   166 	}
   167 
   168 inline TPtrC8 THttpHeaderValueVariant::Str() const
   169 	{
   170 	__ASSERT_DEBUG(iVariantType == EStrType, User::Invariant());
   171 	
   172 	TUint8* actualAddr = reinterpret_cast<TUint8*>(iVariantVal);
   173 	TPtrC8 ptr;
   174 	ptr.Set(actualAddr, iMoreSpace);	
   175 	return ptr;
   176 	}
   177 	
   178 inline TDateTime THttpHeaderValueVariant::DateTime () const
   179 	{
   180 	__ASSERT_DEBUG(iVariantType == EDateTimeType, User::Invariant());
   181 	return reinterpret_cast<const TTime*>(&iVariantVal)->DateTime();	
   182 	}
   183 #endif