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

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. //
  36. // Core Foundation wrappers
  37. //
  38. // These wrappers primarily exist to ensure that the types get disposed
  39. //
  40. // They can in most instances be dropped directly into Core Foundation
  41. // toolbox calls.  Because of that, they have few methods themselves.
  42. //
  43. // BIG WARNING: These will RELEASE the native CF object of the same type
  44. // assigned to them. So don't assign a CFString to a CHXCFString or
  45. // a CFURL to a CHXCFURL unless it should be released
  46. // when the wrapper object is disposed.
  47. //
  48. // This means that a CFObject returned by a "..Copy.." CF routine can
  49. // be assigned to these wrappers, but a CFObject returned by a "..Get.."
  50. // CF routine should NOT be assigned to these (unleass an extra CFRetain
  51. // is called on the object.)
  52. //
  53. // A additional retain is done when assigning CHXCFString to a CHXCFString
  54. // or a CHXCFURL to a CHXCFURL since both objects will release the
  55. // underlying ref on destruction.
  56. #pragma once
  57. #ifndef _CARBON
  58. #ifndef _MAC_UNIX
  59. #error Carbon-only header
  60. #endif
  61. #endif
  62. #ifndef _MAC_MACHO
  63. #include <CFString.h>
  64. #endif
  65. #include "hxstring.h"
  66. #include "hxtypes.h"
  67. class CHXCFString 
  68. {
  69. public:
  70. CHXCFString(void);
  71. CHXCFString(CFStringRef cfs); // doesn't do an additional retain
  72. CHXCFString(const CHXCFString& cfs); // does do an additional retain
  73. CHXCFString(const CHXString &str); // makes an immutable string
  74. CHXCFString(const char *pCString); // makes an immutable string
  75. CHXCFString(const char *pCString, CFStringEncoding encoding); // makes an immutable string
  76. CHXCFString(ConstStr255Param pPString);
  77.         CHXCFString(const UInt16* pUniChars, INT32 numChars);
  78. CHXCFString(CFURLRef urlRef);
  79. CHXCFString(const HFSUniStr255& hfsUni);
  80. ~CHXCFString();
  81. operator CFStringRef() const { return mCFStringRef; }
  82. operator HFSUniStr255() const;
  83. Boolean IsSet() const { return (mCFStringRef != NULL); }
  84. const CHXCFString& operator =(CFStringRef cfs);  // NB: just frees the old one and copies the ref, doesn't do an additional retain
  85. const CHXCFString& operator =(const CHXCFString& cfs); // this one does add a retain to the string
  86. const CHXCFString& operator =(const char *pString);
  87. const CHXCFString& operator =(const CHXString& str);
  88. const CHXCFString& operator =(CFURLRef urlRef);
  89. const CHXCFString& operator =(const HFSUniStr255& hfsUni);
  90. private:
  91. // There is no (const char *) operator defined for return strings since
  92. // we don't want to manage memory with this little wrapper class; assign 
  93. // to a CHXString instead
  94. CFStringRef mCFStringRef;
  95. inline void ReleaseCFString();
  96. void SetToCFURL(CFURLRef cfURL);
  97. #ifdef _DEBUG
  98. // these enable us to see the internals of the CFString during debugging
  99. void UpdateDebugOnlyString(void);
  100. const char *pStrDebugOnlyPeek;
  101. CHXString mStrDebugOnly;
  102. #else
  103. inline void UpdateDebugOnlyString(void) {};
  104. #endif
  105. };
  106. class CHXCFURL 
  107. {
  108. public:
  109. CHXCFURL(void);
  110. CHXCFURL(const char *pCString);
  111. CHXCFURL(const CHXString& str);
  112. CHXCFURL(const FSRef& fsRef);
  113. CHXCFURL(const FSRef* fsRef);
  114. CHXCFURL(CFURLRef urlRef);
  115. ~CHXCFURL();
  116. operator CFURLRef() const { return mCFURLRef; }
  117. Boolean IsSet() const { return (mCFURLRef != NULL); }
  118. const CHXCFURL& operator =(CFURLRef cfs);  // NB: just copies the ref, doesn't do an additional retain
  119. const CHXCFURL& operator =(const CHXCFURL& cfs); // does do an additional retain
  120. const CHXCFURL& operator =(const CHXString& str);
  121. const CHXCFURL& operator =(const char *pString);
  122. const CHXCFURL& operator =(const FSRef& fsRef);
  123. const CHXCFURL& operator =(const FSRef* fsRef);
  124. private:
  125. CFURLRef mCFURLRef;
  126. void SetToString(const char *pCString);
  127. void SetToFSRef(const FSRef& fsRef);
  128. inline void ReleaseCFURL();
  129. #ifdef _DEBUG
  130. // these enable us to see the internals of the CFURL during debugging
  131. void UpdateDebugOnlyString();
  132. const char *pStrDebugOnlyPeek;
  133. CHXString mStrDebugOnly;
  134. #else
  135. inline void UpdateDebugOnlyString() {};
  136. #endif
  137. };