class_ops.cpp
上传用户: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. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include "./class_ops.h"
  38. #include "hxtypes.h"
  39. #include "hxcom.h"
  40. #include "hxstring.h"
  41. static const int StringSize = 10;
  42. template<> 
  43. class ClassOps<void*> 
  44. {
  45. public:
  46.     void* Create() const;
  47.     void* Null() const;
  48.     void Destroy(void*& obj) const;
  49.     char* Print(void* const & obj) const;
  50.     void* Copy(void* const & obj) const;
  51. };
  52. void* ClassOps<void*>::Create() const
  53. {    
  54.     int* pRet = new int(rand() & 0x7fffffff);
  55.     return pRet;
  56. }
  57. void* ClassOps<void*>::Null() const
  58. {
  59.     return 0;
  60. }
  61. void ClassOps<void*>::Destroy(void*& obj) const
  62. {
  63.     int* pTmp = (int*)obj;
  64.     delete pTmp;
  65. }
  66. char* ClassOps<void*>::Print(void* const & obj) const
  67. {
  68.     char* pRet = new char[20];
  69.     if (obj)
  70. sprintf(pRet, "%d", *((int*)obj)); /* Flawfinder: ignore */
  71.     else
  72. sprintf(pRet, "(null)"); /* Flawfinder: ignore */
  73.     return pRet;
  74. }
  75. void* ClassOps<void*>::Copy(void* const & obj) const
  76. {
  77.     int* pTmp = (int*)obj;
  78.     int* pNew = 0;
  79.     if (pTmp)
  80. pNew = new int(*pTmp);
  81.     return pNew;
  82. }
  83. template<> 
  84. class ClassOps<LONG32> 
  85. {
  86. public:
  87.     LONG32 Create() const;
  88.     LONG32 Null() const;
  89.     void Destroy(LONG32& obj) const;
  90.     char* Print(const LONG32& obj) const;
  91.     LONG32 Copy(const LONG32& obj) const;
  92. };
  93. LONG32 ClassOps<LONG32>::Create() const
  94. {    
  95.     return (LONG32)(rand() & 0x7fffffff);
  96. }
  97. LONG32 ClassOps<LONG32>::Null() const
  98. {
  99.     return 0;
  100. }
  101. void ClassOps<LONG32>::Destroy(LONG32& /*obj*/) const
  102. {
  103. }
  104. char* ClassOps<LONG32>::Print(const LONG32& obj) const
  105. {
  106.     char* pRet = new char[21];
  107.     sprintf(pRet, "%ldL", obj); /* Flawfinder: ignore */
  108.     return pRet;
  109. }
  110. LONG32 ClassOps<LONG32>::Copy(const LONG32& obj) const
  111. {
  112.     return obj;
  113. }
  114. template<> 
  115. class ClassOps<GUID> 
  116. {
  117. public:
  118.     GUID Create() const;
  119.     GUID Null() const;
  120.     void Destroy(GUID& obj) const;
  121.     char* Print(const GUID& obj) const;
  122.     GUID Copy(const GUID& obj) const;
  123. };
  124. GUID ClassOps<GUID>::Create() const
  125. {    
  126.     GUID ret;
  127.     
  128.     ret.Data1 = rand();
  129.     ret.Data2 = rand() & 0xffff;
  130.     ret.Data3 = rand() & 0xffff;
  131.     for (int i = 0; i < 8; i++)
  132. ret.Data4[i] = rand() & 0xff;
  133.     return ret;
  134. }
  135. GUID ClassOps<GUID>::Null() const
  136. {    
  137.     GUID ret;
  138.     
  139.     memset(&ret, 0, sizeof(GUID));
  140.     return ret;
  141. }
  142. void ClassOps<GUID>::Destroy(GUID& /*obj*/) const
  143. {
  144. }
  145. char* ClassOps<GUID>::Print(const GUID& obj) const
  146. {
  147.     char* pRet = new char[40];
  148.     sprintf(pRet, "%08lx-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x", /* Flawfinder: ignore */
  149.     obj.Data1,
  150.     obj.Data2,
  151.     obj.Data3,
  152.     obj.Data4[0],
  153.     obj.Data4[1],
  154.     obj.Data4[2],
  155.     obj.Data4[3],
  156.     obj.Data4[4],
  157.     obj.Data4[5],
  158.     obj.Data4[6],
  159.     obj.Data4[7]);
  160.     return pRet;
  161. }
  162. GUID ClassOps<GUID>::Copy(const GUID& obj) const
  163. {
  164.     return obj;
  165. }
  166. template<> 
  167. class ClassOps<CHXString> 
  168. {
  169. public:
  170.     CHXString Create() const;
  171.     CHXString Null() const;
  172.     void Destroy(CHXString& obj) const;
  173.     char* Print(const CHXString& obj) const;
  174.     CHXString Copy(const CHXString& obj) const;
  175. };
  176. CHXString ClassOps<CHXString>::Create() const
  177. {
  178.     CHXString ret;
  179.     for (int i = 0; i < StringSize; i++)
  180.     {
  181. int num = (rand() & 0x1f);
  182. if (num <= 0xf)
  183.     ret += 'a' + num;
  184. else
  185.     ret += 'A' + (num - 0x10);
  186.     }
  187.     return ret;
  188. }
  189. CHXString ClassOps<CHXString>::Null() const
  190. {
  191.     return CHXString();
  192. }
  193. void ClassOps<CHXString>::Destroy(CHXString& /*obj*/) const
  194. {
  195.     // We don't need to to anything here
  196. }
  197. char* ClassOps<CHXString>::Print(const CHXString& obj) const
  198. {
  199.     char* pRet = new char[obj.GetLength() + 1];
  200.     strcpy(pRet, obj); /* Flawfinder: ignore */
  201.     return pRet;
  202. }
  203. CHXString ClassOps<CHXString>::Copy(const CHXString& obj) const
  204. {
  205.     return obj;
  206. }