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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: gen_map_prof_inl.h,v 1.1.1.1.50.3 2004/07/09 01:45:54 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef GEN_MAP_PROF_I
  50. #define GEN_MAP_PROF_I
  51. #include "class_ops.h"
  52. template <class T, class K, class V>
  53. inline
  54. GenMapProf<T, K, V>::GenMapProf()
  55. {}
  56. template <class T, class K, class V>
  57. inline
  58. GenMapProf<T, K, V>::~GenMapProf()
  59. {}
  60. // Store manipulation
  61. template <class T, class K, class V>
  62. inline
  63. bool GenMapProf<T, K, V>::CreateElement(int index)
  64. {
  65.     m_store.Create(index);
  66.     return true;
  67. }
  68. template <class T, class K, class V>
  69. inline
  70. bool GenMapProf<T, K, V>::CreateElements(int index, int num)
  71. {
  72.     while (num > 0)
  73.     {
  74.         m_store.Create(index);
  75.         ++index; --num;
  76.     }
  77.     return true;
  78. }
  79. template <class T, class K, class V>
  80. inline
  81. bool GenMapProf<T, K, V>::ClearElements()
  82. {
  83.     m_store.Clear();
  84.     return true;
  85. }
  86. template <class T, class K, class V>
  87. inline
  88. void GenMapProf<T, K, V>::PrintElements()
  89. {
  90.     m_store.Print();
  91. }
  92. // Map manipulation
  93. template <class T, class K, class V>
  94. inline
  95. bool GenMapProf<T, K, V>::GetCount(int expected) const
  96. {
  97.     bool ret = (m_map.GetCount() == expected); 
  98.     
  99.     if (!ret)
  100.     {
  101. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::GetCount() : got %d expected %dn",
  102.   m_map.GetCount(), 
  103.   expected));
  104.     }
  105.     return ret;
  106. }
  107. template <class T, class K, class V>
  108. inline
  109. bool GenMapProf<T, K, V>::IsEmpty(bool expected) const
  110. {
  111.     bool ret = (m_map.IsEmpty() == expected);
  112.     if (!ret)
  113.     {
  114. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsEmpty() : got %d expected %dn",
  115.   m_map.IsEmpty(), 
  116.   expected));
  117.     }
  118.     return ret;
  119. }
  120. template <class T, class K, class V>
  121. inline
  122. bool GenMapProf<T, K, V>::Lookup(int index, bool expected)
  123. {
  124.     bool ret = false;
  125.     V value;
  126.     BOOL result = m_map.Lookup(m_store.GetKey(index), value);
  127.     if (result != expected)
  128.     {
  129. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::Lookup() : got %d expected %dn",
  130.   result,
  131.   expected));
  132.     }
  133.     else if (expected && (value != m_store.GetValue(index)))
  134.     {
  135. char* pValueStr = ClassOps<V>().Print(value);
  136. char* pExpectStr = ClassOps<V>().Print(m_store.GetValue(index));
  137. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::Lookup() : got '%s' expected '%s'n",
  138.   pValueStr,
  139.   pExpectStr));
  140. delete [] pValueStr;
  141. delete [] pExpectStr;
  142.     }
  143.     else
  144. ret = true;
  145.     return ret;
  146. }
  147. template <class T, class K, class V>
  148. inline
  149. bool GenMapProf<T, K, V>::SetAt(int index)
  150. {
  151.     bool ret = false;
  152.     
  153.     if (!m_store.IsSet(index))
  154.     {
  155. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::SetAt() : value %d is not in storen", 
  156.   index));
  157.     }
  158.     else
  159.     {
  160. m_map.SetAt(m_store.GetKey(index), m_store.GetValue(index));
  161. ret = true;
  162.     }
  163.     return ret;
  164. }
  165. template <class T, class K, class V>
  166. inline
  167. bool GenMapProf<T, K, V>::RemoveKey(int index, bool expected)
  168. {
  169.     bool ret = false;
  170.     if (!m_store.IsSet(index))
  171.     {
  172. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::RemoveKey() : value %d is not in storen", 
  173.   index));
  174.     }
  175.     else
  176.     {
  177. bool result = m_map.RemoveKey(m_store.GetKey(index));
  178. if (result != expected)
  179. {
  180.     DPRINTF (D_ERROR, ("GenMapProf<T, K, V>::RemoveKey() : got %d expected %dn",
  181.        result,
  182.        expected));
  183. }
  184. else
  185.     ret = true;
  186.     }
  187.     return ret;
  188. }
  189. template <class T, class K, class V>
  190. inline
  191. bool GenMapProf<T, K, V>::RemoveAll()
  192. {
  193.     m_map.RemoveAll();
  194.     return true;
  195. }
  196. template <class T, class K, class V>
  197. inline
  198. bool GenMapProf<T, K, V>::RhsArrayOp(int index, bool expected)
  199. {
  200.     bool ret = false;
  201.     if (!m_store.IsSet(index))
  202.     {
  203. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::RhsArrayOp() : value %d is not in storen", 
  204.   index));
  205.     }
  206.     else 
  207.     {
  208. V result = m_map[m_store.GetKey(index)];
  209. V expectedVal = m_store.GetValue(index);
  210. if (!expected)
  211. {
  212.     // If we are not expecting the value to be in the
  213.     // map, then the value returned should be all zeros
  214.     expectedVal = ClassOps<V>().Null();
  215. }
  216. if (result != expectedVal)
  217. {
  218.     char* pValueStr = ClassOps<V>().Print(result);
  219.     char* pExpectStr = ClassOps<V>().Print(expectedVal);
  220.     DPRINTF (D_ERROR,("GenMapProf<T, K, V>::RhsArrayOp() : got '%s' expected '%s'n",
  221.       pValueStr,
  222.       pExpectStr));
  223.     
  224.     delete [] pValueStr;
  225.     delete [] pExpectStr;
  226. }
  227. else
  228.     ret = true;
  229.     }
  230.     return ret;
  231. }
  232. template <class T, class K, class V>
  233. inline
  234. bool GenMapProf<T, K, V>::LhsArrayOp(int index)
  235. {
  236.     bool ret = false;
  237.     if (!m_store.IsSet(index))
  238.     {
  239. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::LhsArrayOp() : value %d is not in storen", 
  240.   index));
  241.     }
  242.     else 
  243.     {
  244. m_map[m_store.GetKey(index)] = m_store.GetValue(index);
  245. ret = true;
  246.     }
  247.     return ret;
  248. }
  249. template <class T, class K, class V>
  250. inline
  251. bool GenMapProf<T, K, V>::IsNull(int index, bool expected)
  252. {
  253.     bool ret = false;
  254.     if (!m_store.IsSet(index))
  255.     {
  256. DPRINTF(D_ERROR, ("GenMapProf<T, K, V>::IsNull() : value %d is not in storen", 
  257.   index));
  258.     }
  259.     else 
  260.     {
  261. V result;
  262. V expectedVal = ClassOps<V>().Null();
  263. if (!m_map.Lookup(m_store.GetKey(index), result))
  264. {
  265.     DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsNull() : lookup failedn"));
  266. }
  267. else
  268. {
  269.     bool valuesMatch = (result == expectedVal);
  270.     if (valuesMatch != expected)
  271.     {
  272. DPRINTF (D_ERROR,("GenMapProf<T, K, V>::IsNull() : got %d expected %dn",
  273.       valuesMatch,
  274.       expected));
  275.     }
  276.     else
  277. ret = true;
  278. }
  279.     }
  280.     return ret;
  281. }
  282. template <class T, class K, class V>
  283. inline
  284. bool GenMapProf<T, K, V>::RunMapSpecificProfs()
  285. {
  286.     // return MapSpecificProfs<T>()();
  287.     return false;
  288. }
  289. template <class T, class K, class V>
  290. inline
  291. bool GenMapProf<T, K, V>::InitHashTable(int numBuckets)
  292. {
  293.     m_map.InitHashTable(numBuckets);
  294.     return true;
  295. }
  296. template <class T, class K, class V>
  297. inline
  298. bool GenMapProf<T, K, V>::ProfileInsertions(const char* typeName)
  299. {
  300.     int len = m_store.GetCount();
  301.     for (int i = 0; i < len; ++i)
  302.     {
  303.         m_map.SetAt(m_store.GetKey(i), m_store.GetValue(i));
  304.     }
  305.     DPRINTF (D_INFO, ("GenMapProf<T,K,V>::ProfileInsertions(%s) - size now %dn",
  306.                       typeName, m_map.GetCount()));
  307.     return true;
  308. }
  309. #endif // GEN_MAP_PROF_I