hlxosstr.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 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 HLXOSSTR_H
  36. #define HLXOSSTR_H
  37. #ifdef __cplusplus
  38. #include "hxtypes.h"
  39. #include "hlxclib/stdlib.h"
  40. #include "hlxclib/string.h"
  41. /*
  42.  * Simple class for simple in-line Unicode conversion
  43.  * Handles conversions in both directions as well as handling mutable 
  44.  * conversions as follows:
  45.  *
  46.  * void f()
  47.  * {
  48.  *      char s[100];
  49.  *      UnicodeFunctionWithSideEffect(HLXOsStrW(s));
  50.  *
  51.  * if (strcmp(s, "Desired output")
  52.  * {
  53.  * ...
  54.  * }
  55.  * }
  56.  * Since HLXOsStrW() is constructed as char* rather than const char*.
  57.  * ~HLXOsStrW() will convert the Unicode back to ascii
  58.  *
  59.  */
  60. class HLXOsStrW
  61. {
  62. public:
  63.     HLXOsStrW() : m_isMutable(FALSE), m_toAscii(FALSE), m_size(0), m_uni(0), m_ascii(0) { }
  64.     
  65.     HLXOsStrW(char* ascii, size_t length = (size_t)-1);
  66.     HLXOsStrW(const char* ascii, size_t length = (size_t)-1);
  67.     HLXOsStrW(const unsigned char* ascii, size_t length = (size_t)-1);
  68.     HLXOsStrW(const wchar_t* uni, size_t length = (size_t)-1);
  69.     operator wchar_t*() { return m_uni; } 
  70.     operator const char*() { return (const char*) m_ascii; } 
  71.     operator const unsigned char*() { return (const unsigned char*) m_ascii; } 
  72.     operator char*() { return m_ascii; } 
  73.     operator unsigned char*() { return (unsigned char*) m_ascii; } 
  74.      ~HLXOsStrW();
  75.     HLXOsStrW(const HLXOsStrW& rhs);
  76.     HLXOsStrW& operator=(const HLXOsStrW& rhs);
  77. protected:
  78.     inline void Copy(HLXOsStrW& lhs, const HLXOsStrW& rhs);
  79.     inline void Init(const char* ascii, size_t length);
  80.     BOOL m_isMutable;
  81.     BOOL m_toAscii;
  82.     int m_size;
  83.     int m_outsize;
  84.     wchar_t* m_uni;
  85.     char* m_ascii;
  86. };
  87. /* 
  88.  * Pass through object for ascii strings. This allows
  89.  * us to bypass type checking for situations where the
  90.  * parameter we are handed is const and the OS call takes
  91.  * something non-const.
  92.  */
  93. class HLXOsStrA
  94. {
  95. public:
  96.     HLXOsStrA() : m_str(0) {}
  97.     HLXOsStrA(const char* str, size_t length = (size_t)-1) : m_str((char*)str) {}
  98.     HLXOsStrA(const unsigned char* str, size_t length = (size_t)-1) : m_str((char*)str) {}
  99.     operator char* () const { return m_str; }
  100.     operator unsigned char* () const { return (unsigned char*)m_str; }
  101.     operator const char* () const { return (const char*)m_str; }
  102.     operator const unsigned char* () const { return (const unsigned char*)m_str; }
  103. private:
  104.     char* m_str;
  105. };
  106. #if defined(WIN32_PLATFORM_PSPC)
  107. #define OS_STRING_TYPE HLXOsStrW
  108. #define OS_TEXT_PTR wchar_t*
  109. #elif defined(_SYMBIAN) && defined(_UNICODE)
  110. #define OS_STRING_TYPE HLXOsStrW
  111. #define OS_TEXT_PTR wchar_t*
  112. #else // default
  113. #define OS_STRING_TYPE HLXOsStrA
  114. #define OS_TEXT_PTR char*
  115. #endif /* defined(WIN32_PLATFORM_PSPC) */
  116. #define OS_STRING(str) OS_STRING_TYPE(str)
  117. #define OS_STRING2(str, size) OS_STRING_TYPE(str, size)
  118. #else /* __cplusplus */
  119. /* No C++?!? You're on your own. Have fun with the type checker */
  120. #define OS_STRING_TYPE char*
  121. #define OS_STRING(str) str
  122. #define OS_STRING2(str, size) str
  123. #define OS_TEXT_PTR char*
  124. #endif /* __cplusplus */
  125. #endif /* HLXOSSTR_H */