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

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 GEN_MAP_PROF_I
  36. #define GEN_MAP_PROF_I
  37. #include "class_ops.h"
  38. template <class T, class K, class V>
  39. inline
  40. GenMapProf<T, K, V>::GenMapProf()
  41. {}
  42. template <class T, class K, class V>
  43. inline
  44. GenMapProf<T, K, V>::~GenMapProf()
  45. {}
  46. // Store manipulation
  47. template <class T, class K, class V>
  48. inline
  49. bool GenMapProf<T, K, V>::CreateElement(int index)
  50. {
  51.     m_store.Create(index);
  52.     return true;
  53. }
  54. template <class T, class K, class V>
  55. inline
  56. bool GenMapProf<T, K, V>::CreateElements(int index, int num)
  57. {
  58.     while (num > 0)
  59.     {
  60.         m_store.Create(index);
  61.         ++index; --num;
  62.     }
  63.     return true;
  64. }
  65. template <class T, class K, class V>
  66. inline
  67. bool GenMapProf<T, K, V>::ClearElements()
  68. {
  69.     m_store.Clear();
  70.     return true;
  71. }
  72. template <class T, class K, class V>
  73. inline
  74. void GenMapProf<T, K, V>::PrintElements()
  75. {
  76.     m_store.Print();
  77. }
  78. // Map manipulation
  79. template <class T, class K, class V>
  80. inline
  81. bool GenMapProf<T, K, V>::GetCount(int expected) const
  82. {
  83.     bool ret = (m_map.GetCount() == expected); 
  84.     
  85.     if (!ret)
  86.     {
  87. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::GetCount() : got %d expected %dn",
  88.   m_map.GetCount(), 
  89.   expected));
  90.     }
  91.     return ret;
  92. }
  93. template <class T, class K, class V>
  94. inline
  95. bool GenMapProf<T, K, V>::IsEmpty(bool expected) const
  96. {
  97.     bool ret = (m_map.IsEmpty() == expected);
  98.     if (!ret)
  99.     {
  100. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsEmpty() : got %d expected %dn",
  101.   m_map.IsEmpty(), 
  102.   expected));
  103.     }
  104.     return ret;
  105. }
  106. template <class T, class K, class V>
  107. inline
  108. bool GenMapProf<T, K, V>::Lookup(int index, bool expected)
  109. {
  110.     bool ret = false;
  111.     V value;
  112.     BOOL result = m_map.Lookup(m_store.GetKey(index), value);
  113.     if (result != expected)
  114.     {
  115. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::Lookup() : got %d expected %dn",
  116.   result,
  117.   expected));
  118.     }
  119.     else if (expected && (value != m_store.GetValue(index)))
  120.     {
  121. char* pValueStr = ClassOps<V>().Print(value);
  122. char* pExpectStr = ClassOps<V>().Print(m_store.GetValue(index));
  123. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::Lookup() : got '%s' expected '%s'n",
  124.   pValueStr,
  125.   pExpectStr));
  126. delete [] pValueStr;
  127. delete [] pExpectStr;
  128.     }
  129.     else
  130. ret = true;
  131.     return ret;
  132. }
  133. template <class T, class K, class V>
  134. inline
  135. bool GenMapProf<T, K, V>::SetAt(int index)
  136. {
  137.     bool ret = false;
  138.     
  139.     if (!m_store.IsSet(index))
  140.     {
  141. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::SetAt() : value %d is not in storen", 
  142.   index));
  143.     }
  144.     else
  145.     {
  146. m_map.SetAt(m_store.GetKey(index), m_store.GetValue(index));
  147. ret = true;
  148.     }
  149.     return ret;
  150. }
  151. template <class T, class K, class V>
  152. inline
  153. bool GenMapProf<T, K, V>::RemoveKey(int index, bool expected)
  154. {
  155.     bool ret = false;
  156.     if (!m_store.IsSet(index))
  157.     {
  158. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::RemoveKey() : value %d is not in storen", 
  159.   index));
  160.     }
  161.     else
  162.     {
  163. bool result = m_map.RemoveKey(m_store.GetKey(index));
  164. if (result != expected)
  165. {
  166.     DPRINTF (D_ERROR, ("GenMapProf<T, K, V>::RemoveKey() : got %d expected %dn",
  167.        result,
  168.        expected));
  169. }
  170. else
  171.     ret = true;
  172.     }
  173.     return ret;
  174. }
  175. template <class T, class K, class V>
  176. inline
  177. bool GenMapProf<T, K, V>::RemoveAll()
  178. {
  179.     m_map.RemoveAll();
  180.     return true;
  181. }
  182. template <class T, class K, class V>
  183. inline
  184. bool GenMapProf<T, K, V>::RhsArrayOp(int index, bool expected)
  185. {
  186.     bool ret = false;
  187.     if (!m_store.IsSet(index))
  188.     {
  189. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::RhsArrayOp() : value %d is not in storen", 
  190.   index));
  191.     }
  192.     else 
  193.     {
  194. V result = m_map[m_store.GetKey(index)];
  195. V expectedVal = m_store.GetValue(index);
  196. if (!expected)
  197. {
  198.     // If we are not expecting the value to be in the
  199.     // map, then the value returned should be all zeros
  200.     expectedVal = ClassOps<V>().Null();
  201. }
  202. if (result != expectedVal)
  203. {
  204.     char* pValueStr = ClassOps<V>().Print(result);
  205.     char* pExpectStr = ClassOps<V>().Print(expectedVal);
  206.     DPRINTF (D_ERROR,("GenMapProf<T, K, V>::RhsArrayOp() : got '%s' expected '%s'n",
  207.       pValueStr,
  208.       pExpectStr));
  209.     
  210.     delete [] pValueStr;
  211.     delete [] pExpectStr;
  212. }
  213. else
  214.     ret = true;
  215.     }
  216.     return ret;
  217. }
  218. template <class T, class K, class V>
  219. inline
  220. bool GenMapProf<T, K, V>::LhsArrayOp(int index)
  221. {
  222.     bool ret = false;
  223.     if (!m_store.IsSet(index))
  224.     {
  225. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::LhsArrayOp() : value %d is not in storen", 
  226.   index));
  227.     }
  228.     else 
  229.     {
  230. m_map[m_store.GetKey(index)] = m_store.GetValue(index);
  231. ret = true;
  232.     }
  233.     return ret;
  234. }
  235. template <class T, class K, class V>
  236. inline
  237. bool GenMapProf<T, K, V>::IsNull(int index, bool expected)
  238. {
  239.     bool ret = false;
  240.     if (!m_store.IsSet(index))
  241.     {
  242. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::IsNull() : value %d is not in storen", 
  243.   index));
  244.     }
  245.     else 
  246.     {
  247. V result;
  248. V expectedVal = ClassOps<V>().Null();
  249. if (!m_map.Lookup(m_store.GetKey(index), result))
  250. {
  251.     DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsNull() : lookup failedn"));
  252. }
  253. else
  254. {
  255.     bool valuesMatch = (result == expectedVal);
  256.     if (valuesMatch != expected)
  257.     {
  258. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsNull() : got %d expected %dn",
  259.       valuesMatch,
  260.       expected));
  261.     }
  262.     else
  263. ret = true;
  264. }
  265.     }
  266.     return ret;
  267. }
  268. template <class T, class K, class V>
  269. inline
  270. bool GenMapProf<T, K, V>::RunMapSpecificProfs()
  271. {
  272.     // return MapSpecificProfs<T>()();
  273.     return false;
  274. }
  275. template <class T, class K, class V>
  276. inline
  277. bool GenMapProf<T, K, V>::InitHashTable(int numBuckets)
  278. {
  279.     m_map.InitHashTable(numBuckets);
  280.     return true;
  281. }
  282. template <class T, class K, class V>
  283. inline
  284. bool GenMapProf<T, K, V>::ProfileInsertions(const char* typeName)
  285. {
  286.     int len = m_store.GetCount();
  287.     for (int i = 0; i < len; ++i)
  288.     {
  289.         m_map.SetAt(m_store.GetKey(i), m_store.GetValue(i));
  290.     }
  291.     DPRINTF (D_INFO, ("GenMapProf<T,K,V>::ProfileInsertions(%s) - size now %dn",
  292.                       typeName, m_map.GetCount()));
  293.     return true;
  294. }
  295. #endif // GEN_MAP_PROF_I