multimediacommscontroller/mmccshared/inc/streamformatter.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccshared/inc/streamformatter.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2004-2005 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:    Formatter classes for encoding/decoding of a bit stream.
+*
+*/
+
+
+
+#ifndef STREAMFORMATTER_H
+#define STREAMFORMATTER_H
+
+// INCLUDES
+#include <e32std.h>
+
+// CONSTS
+const TInt KBitsIn1Byte = 8;
+
+// CLASS DECLARATION
+
+/**
+* The formatter class that sequentially encodes a bit stream.
+*
+* @lib      Mccamrplformat.lib
+* @since    Series 60 3.0
+*/
+class TStreamEncoder
+    {
+    public:
+
+        /**
+        * Constructor.
+        */
+        TStreamEncoder() : iBuffer( NULL ), iByteIndex( 0 ), iBitIndex( 0 )
+            {   };
+
+        /**
+        * Destructor.
+        */
+        virtual ~TStreamEncoder() { iBuffer = NULL; };
+
+    public:
+
+        /**
+        * Initialize the stream encoder.
+        * This function must be called before calling any other functions.
+        * @since Series 60 3.0
+        * @param aBuffer - [input] Pointer to the bit-stream buffer.
+        * @param aByteIndex - [input] Starting byte index ( starts from zero ).
+        * @param aBitIndex - [input] Starting bit index ( starts from zero ).
+        * @return void
+        */
+        void Initialize( TUint8* aBuffer, TInt aByteIndex, TInt aBitIndex );
+
+        /**
+        * Put a number of bit values ( up to 32 bits ) into the bit-stream 
+        * buffer at current location. Bits are put starting from MSB of the
+        * buffer byte and advancing to LSB.
+        * @since    Series 60 3.0
+        * @param    aValue - [input] Value to put.
+        * @param    aBitCount - [input] Number of bits to put; between 1 and 32,
+        *           both inclusive.
+        */
+        void Encode( TUint32 aValue, TInt aBitCount );
+
+        /**
+        * Put a number of bit values into the bit-stream buffer at current 
+        * location.
+        * @since    Series 60 3.0
+        * @param    aFromBuffer - [input] Buffer to get byte values from.
+        * @param    aByteIndex - [input] Starting byte index ( starts from
+        *           zero ).
+        * @param    aBitIndex - [input] Starting bit index ( starts from zero ).
+        * @param    aBitCount - [input] Number of bits to put.
+        */
+        void Encode( const TUint8* aFromBuffer, TInt aFromByteIndex,
+                TInt aFromBitIndex, TInt aBitCount );
+
+        /**
+        * Get the current byte index value.
+        * @since    Series 60 3.0
+        * @return   TInt - Current byte index value.
+        */
+        inline TInt ByteIndex() const 
+                { return iByteIndex; };
+
+        /**
+        * Get the current bit index value.
+        * @since    Series 60 3.0
+        * @return   TInt - Current bit index value.
+        */
+        inline TInt BitIndex() const 
+                { return iBitIndex; };
+
+        /**
+        * Set the current byte index value.
+        * @since    Series 60 3.0
+        * @param    aByteIndex New byte index
+        */
+        inline void SetByteIndex( TInt aByteIndex ) 
+                { iByteIndex = aByteIndex; };
+
+        /**
+        * Set the current bit index value.
+        * @since    Series 60 3.0
+        * @param    aBitIndex New bit index
+        */
+        inline void SetBitIndex( TInt aBitIndex ) 
+                { iBitIndex = aBitIndex; };
+
+    private:
+    
+        // Pointer to the bit-stream buffer.
+        TUint8* iBuffer;
+
+        // Current byte index ( starts from zero )
+        TInt  iByteIndex;
+        
+        // Current bit index ( starts from zero )
+        TInt  iBitIndex;
+    };
+
+/**
+* The formatter class that sequentially decodes a bit stream.
+*
+* @lib      Mccamrplformat.lib
+* @since    Series 60 3.0
+*/
+class TStreamDecoder
+    {
+    public:
+
+        /**
+        * Constructor.
+        */
+        TStreamDecoder() : iBuffer( NULL ), iByteIndex( 0 ), iBitIndex( 0 )
+            {   };
+
+        /**
+        * Destructor.
+        */
+        virtual ~TStreamDecoder() { iBuffer = NULL; };
+
+    public:
+
+        /**
+        * Initialize the stream decoder.
+        * This function must be called before calling any other functions.
+        * @since    Series 60 3.0
+        * @param    aBuffer - [input] Pointer to the bit-stream buffer.
+        * @param    aByteIndex - [input] Starting byte index ( starts from 
+        *           zero ).
+        * @param    aBitIndex - [input] Starting bit index ( starts from zero ).
+        */
+        void Initialize( const TUint8* aBuffer, TInt aByteIndex, 
+                TInt aBitIndex );
+
+        /**
+        * Get a number of bit values ( up to 32 bits ) from the bit-stream
+        * buffer at current location. Bits are extracted starting from MSB of
+        * the buffer byte and advancing to LSB.
+        * Returned value: ( MSB )-> bit31, bit30 .... bit1, bit0 <-( LSB, full )
+        * If aBitCount < 32, vacant MSB bits of the returned value are filled
+        * with zeros.
+        * @since    Series 60 3.0
+        * @param    aBitCount - [input] Number of bits to get; between 1 and 32,
+        *           both inclusive.
+        * @return   TUint32 - Bit values extracted from the buffer; zero if
+        *           aBitCount is out of range.
+        */
+        TUint32 Decode( TInt aBitCount );
+
+        /**
+        * Get a number of byte values from the bit-stream buffer at current
+        * location.
+        * @since Series 60 3.0
+        * @param    aToBuffer - [output] Buffer to store byte values.
+        * @param    aByteIndex - [input] Starting byte index ( starts from 
+        *           zero ).
+        * @param    aBitIndex - [input] Starting bit index ( starts from zero ).
+        * @param    aBitCount - [input] Number of bits to put.
+        */
+        void Decode( TUint8* aToBuffer, TInt aToByteIndex, TInt aToBitIndex,
+                TInt aBitCount );
+
+        /**
+        * Get the current byte index value.
+        * @since    Series 60 3.0
+        * @return   TInt - Current byte index value.
+        */
+        inline TInt ByteIndex() const 
+                { return iByteIndex; };
+
+        /**
+        * Get the current bit index value.
+        * @since    Series 60 3.0
+        * @return   TInt - Current bit index value.
+        */
+        inline TInt BitIndex() const 
+                { return iBitIndex; };
+
+        /**
+        * Set the current byte index value.
+        * @since    Series 60 3.0
+        * @param    aByteIndex New byte index
+        */
+        inline void SetByteIndex( TInt aByteIndex ) 
+                { iByteIndex = aByteIndex; };
+
+        /**
+        * Set the current bit index value.
+        * @since    Series 60 3.0
+        * @param    aBitIndex New bit index
+        */
+        inline void SetBitIndex( TInt aBitIndex )
+                { iBitIndex = aBitIndex; };
+
+    private:
+    
+        // Pointer to the bit-stream buffer.
+        const TUint8* iBuffer;
+        
+        // Current byte index ( starts from zero )
+        TInt  iByteIndex;
+        
+        // Current bit index ( starts from zero )
+        TInt  iBitIndex;
+    };
+
+#endif  // STREAMFORMATTER_H