epoc32/include/caf/bitset.h
branchSymbian2
changeset 2 2fe1408b6811
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/caf/bitset.h	Tue Mar 16 16:12:26 2010 +0000
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+
+
+/**
+ @file
+ @publishedPartner
+ @deprecated
+*/
+
+#ifndef __BITSET_H__
+#define __BITSET_H__
+
+#ifndef REMOVE_CAF1
+
+#include <e32base.h>
+#include <caf/caftypes.h>
+
+class RWriteStream;
+class RReadStream;
+
+namespace ContentAccess
+{
+	
+	/** @deprecated */
+	enum TCafUtilsPanics
+		{
+		EInvalidBit
+		};
+
+	_LIT(KCafUtilsPanic, "CafUtils");
+
+	/**
+	 * A container of bits. 
+	 * 
+	 * The bits may be retrieved, set, and unset.
+	 *
+	 * @publishedPartner
+	 * @deprecated 
+	 */
+	class CBitset : public CBase
+		{
+	public:
+		/**
+		 * Constructs a new bitset object with a maximum number of bits.
+		 * 
+		 * @param aMaxBits	The maximum number of bits this object may contain.
+		 */
+		IMPORT_C static CBitset* NewL(TInt aMaxBits);
+
+		/** @see CBitset::NewL(TInt aMaxBits) */
+		IMPORT_C static CBitset* NewLC(TInt aMaxBits);
+		
+		/** 
+		 * Copy constructor
+		 *
+		 * @param aSource	The object to be copied from.
+		 */
+		IMPORT_C static CBitset* NewL(const CBitset& aSource);
+
+		/** @see CBitset::NewL(const CBitset& aSource) */
+		IMPORT_C static CBitset* NewLC(const CBitset& aSource);
+
+		virtual ~CBitset();
+
+	public:
+		/** Resets the entire bitset to zero. */
+		IMPORT_C void Reset();
+
+		/** Gets the maximum number of settable/gettable bits. */
+		IMPORT_C TInt MaxBits() const;
+
+		/** Sets all bits in the set to one. */
+		IMPORT_C void SetAll();
+
+		/** Inverts all bits in the set. */
+		IMPORT_C void Invert();
+		
+		/** Sets the 'aBit'th bit of the set. 
+		* @param aBit the bit to set 
+		* @panic CafUtils 0 if aBit is out of range
+		*/
+		IMPORT_C void Set(TInt aBit);
+
+		/** Clears the 'aBit'th bit of the set. 
+		* @param aBit the bit to clear
+		* @panic CafUtils 0 if aBit is out of range
+		*/
+		IMPORT_C void Unset(TInt aBit);
+		
+		/** 
+		 * Queries the single bit of the set.
+		 * 
+		 * @param aBit	The bit that requires testing.
+		 * @return		ETrue if the bit was set, EFalse otherwise.
+ 		 * @panic CafUtils 0 if aBit is out of range
+		 * 
+		 */
+		IMPORT_C TBool IsSet(TInt aBit) const;
+
+		/** 
+		 * Assignment of a bitset. 
+		 * 
+		 * Note that an assignment of a longer bitset to a
+		 * shorter bitset will result in the shorter bitset
+		 * being expanded. This function may leave.
+		 *
+		 * @param aSource	The bitset ......
+		 * @return			A bitset.
+		 */
+		IMPORT_C CBitset& operator=(const CBitset& aSource);
+
+		/**
+		 * Allows comparisons of CBitsets. 
+		 * 
+		 * Note that it is possible to compare a longer
+		 * bitset with a shorter one. However, only the 
+		 * relevant (low-order) bits are compared.
+		 *
+		 * @param aSource	The bitset .....
+		 * @return			ETrue if the ....., EFalse otherwise.
+		 */
+		IMPORT_C TBool operator==(const CBitset& aSource) const;
+		inline TBool operator!=(const CBitset& aSource) const;
+
+		/** 
+		 * Externalisation function that allows this object to be
+		 * marshalled prior to being shipped over a client-server
+		 * interface by related glue-code.
+		 *
+		 * @param aStream	On return, the .....
+		 */
+		IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+		
+		/**
+		 * Internalisation function that allows this object to to be
+		 * unmarshalled after transfer across a client-server
+		 * interface. 
+		 *
+		 * @param aStream	On return, the .....
+		 */
+		IMPORT_C void InternalizeL(RReadStream& aStream);
+
+		/**
+		 * Allows a caller to set multiple bits in the bitset
+		 * by allowing a variable-length parameter list. 
+		 * 
+		 * @param aItems	The number of items following in the
+		 * 					parameter list.
+		 */
+		IMPORT_C void SetListL(TInt aItems, ...);
+
+		/**
+		 * Allows a caller to query multiple bits in the bitset.
+		 * 
+		 * @param aItems	The number of items following in the
+		 * 					parameter list.
+		 * @return			ETrue if all of the bits specified were set. EFalse if
+		 * 					one or more were unset.
+		 */
+		IMPORT_C TBool IsSetList(TInt aItems, ...) const;
+
+	private:
+		void ConstructL(TInt aMaxId);
+		void ConstructL(const CBitset& aSource);
+		CBitset();
+		CBitset(const CBitset& aSource);
+
+		/**
+		 * Converts from a bit ID to a byte and 
+		 * bit within one of the bit-field sets.
+		 * 
+		 * @param aBitId		The bit ID being mapped.
+		 * @param aByte			Modified to contain the resultant byte number.
+		 * @param aBitInByte	Modified to contain the resultant bit number
+		 * 						within the byte.
+		 */
+		void IdentifyBit(TInt aBitId, TInt& aByte, TInt& aBitInByte) const;
+		
+		/** 
+		* Tests whether the bit value is valid for this bitset.
+		*
+		* @param aAttributeId	The .....
+		* @return				ETrue if the bit value is valid for this bitset, EFalse otherwise.
+		*/
+		inline TBool ValidBit(TInt aAttributeId) const;
+		
+	private:
+		/** The number of bytes required to allow for maxbits */
+		TInt iWidth; 
+
+		/** The maximum number of bits in this bitset */
+		TInt iMaxBits;
+
+		/** The actual set of bits */
+		TUint8* iBitSet;
+		};
+
+}
+
+inline TBool ContentAccess::CBitset::operator!=(const CBitset& aSource) const
+	{
+	return !operator==(aSource);
+	}
+
+inline TBool ContentAccess::CBitset::ValidBit(TInt aBit) const
+	{
+	return (aBit >= 0) && (aBit < iMaxBits);
+	}
+
+#endif // REMOVE_CAF1
+
+#endif // __BITSET_H__