3gppttutils.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:6k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2003 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s):
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _3GPPTTUTILS_H_
  36. #define _3GPPTTUTILS_H_
  37. /****************************************************************************
  38.  *  Includes
  39.  */
  40. #include "hxtypes.h"
  41. #include "hxresult.h"
  42. #include "hxassert.h"
  43. /*
  44.  *      Utilities
  45.  */
  46. inline int swapEndian(UCHAR* pInOut, UINT32 ulLen)
  47. {
  48.     UINT32 i = 0, j = 0;
  49.     UCHAR c;
  50.     for (j = ulLen-1; i < ulLen/2; ++i, --j)
  51.     {
  52.         c = pInOut[i];
  53.         pInOut[i] = pInOut[j];
  54.         pInOut[j] = c;
  55.     }
  56.     return 0;
  57. }
  58. inline ULONG32 GetUL32(const UINT8* pData)
  59. {
  60.     return (*pData << 24) |
  61.            (*(pData + 1) << 16) |
  62.            (*(pData + 2) << 8 ) |
  63.            *(pData + 3);
  64. }
  65. inline UINT16 GetUI16(const UINT8* pData)
  66. {
  67.     return (*pData << 8) |
  68.             *(pData + 1);
  69. }
  70. inline UINT32 ReadARGB(const UINT8*& pData)
  71. {
  72.     // 0xff = fully opaque in 3gpp; 0x00 = fully opaque in Helix ARGB format
  73.     UINT32 alpha = 0xFF - pData[3];
  74.     UINT32 argb = 
  75.         (alpha << 24) |
  76.         (UINT32(pData[0]) << 16) | 
  77.         (UINT32(pData[1]) << 8)  | 
  78.         UINT32(pData[2]);
  79.     pData += 4;
  80.     return argb;
  81. }
  82. inline ULONG32 ReadUL32(const UINT8*& pData)
  83. {
  84.     ULONG32 val = GetUL32(pData);
  85.     pData += 4;
  86.     return val;
  87. }
  88. inline UINT16 ReadUI16(const UINT8*& pData)
  89. {
  90.     UINT16 val = GetUI16(pData);
  91.     pData += 2;
  92.     return val;
  93. }
  94. // /Returns TRUE if the string passed in is UTF-16, else returns FALSE.  UTF16
  95. // text always starts with 0xFEFF flag unless it's reverse UTF16, in which
  96. // case it's 0xFFFE. (Rel5 spec says reverse does not have to be supported):
  97. inline BOOL
  98. IsUTF16Encoded(const UCHAR* pText, INT32 lTextLen, BOOL& bREFIsReverseUTF16)
  99. {
  100.     bREFIsReverseUTF16 = FALSE;
  101.     if (!pText  ||  lTextLen < 2)
  102.     {
  103.         return FALSE;
  104.     }
  105.     if (0xFE == pText[0]  &&  0xFF == pText[1])
  106.     {
  107.         return TRUE;
  108.     }
  109.     else if (0xFF == pText[0]  &&  0xFE == pText[1])
  110.     {
  111.         bREFIsReverseUTF16 = TRUE;
  112.         return TRUE;
  113.     }
  114.     return FALSE;
  115. }
  116. inline BOOL
  117. isUTF16NewlineChar(UINT16 ch16, BOOL bPriorCharWasCarriageReturn,
  118.                BOOL& bREFCurCharIsCarriageReturn,
  119.                BOOL& bREFCurCharIsAtomicNewline)
  120. {
  121.     //  u000a (LF)             00000000000000000000000000001010
  122.     //  u000d (CR)             00000000000000000000000000001101
  123.     //  u000du000a (CRLF)
  124.     //  u0085 (NEXT LINE)      00000000000000000000000010000101
  125.     //  u2028 (LINE SEP)       00000000000000000010000000101000
  126.     //  u2029 (PARA SEP)       00000000000000000010000000101001
  127.     bREFCurCharIsCarriageReturn = FALSE;
  128.     bREFCurCharIsAtomicNewline = TRUE; // /TRUE unless it is LF part of CRLF
  129.     if (0x000a == ch16)         // /(LF)
  130.     {
  131.         if (bPriorCharWasCarriageReturn)
  132.         {
  133.             bREFCurCharIsAtomicNewline = FALSE;
  134.         }
  135.         return TRUE;
  136.     }
  137.     else if (0x000d == ch16)     // /(CR)
  138.     {
  139.         bREFCurCharIsCarriageReturn = TRUE;
  140.         return TRUE;
  141.     }
  142.     else if (0x0085 == ch16  ||  // /(NEXT LINE)
  143.              0x2028 == ch16  ||  // /(LINE SEP)
  144.              0x2029 == ch16)     // /(PARA SEP)
  145.     {
  146.         return TRUE;
  147.     }
  148.     return FALSE;
  149. }
  150. class SimpleString
  151. {
  152. public:
  153.     SimpleString() : m_psz(0) {}
  154.     HX_RESULT Set(const char* pch, UINT32 cch);
  155.         
  156.     UINT32 Length() const { return m_length; }
  157.     ~SimpleString()
  158.     {
  159.         delete [] m_psz;
  160.     }
  161.     operator const char*() const { return m_psz ? m_psz : ""; }
  162. private:
  163.     // disallow assignment and copy
  164.     SimpleString(const SimpleString& rhs);
  165.     SimpleString& operator=(const SimpleString& rhs);
  166. private:
  167.     char* m_psz;
  168.     UINT32 m_length;
  169. };
  170. class SimpleArray
  171. {  
  172. public:
  173.     SimpleArray() : m_ppVoid(0), m_count(0) {}
  174.     HX_RESULT Reset(UINT32 count);
  175.         
  176.     UINT32 GetCount() const { return m_count; }
  177.     ~SimpleArray(){ delete [] m_ppVoid; }
  178.     // get for non-const
  179.     void* GetItem(UINT32 idx) { HX_ASSERT(idx < m_count); return m_ppVoid[idx]; } 
  180.     // get/set for non-const
  181.     void*& operator[](UINT32 idx) { HX_ASSERT(idx < m_count); return m_ppVoid[idx]; }
  182.     // get for const
  183.     const void* GetItem(UINT32 idx) const { HX_ASSERT(idx < m_count); return m_ppVoid[idx]; } 
  184. private:
  185.     // disallow assignment and copy
  186.     SimpleArray(const SimpleArray& rhs);
  187.     SimpleArray& operator=(const SimpleArray& rhs);
  188. private:
  189.     void** m_ppVoid;
  190.     UINT32 m_count;
  191. };
  192. #endif  // _3GPPTTUTILS_H_