map_prof.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:17k
源码类别:

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 "./map_prof.h"
  36. #include "hx_ut_debug.h"
  37. #include "ut_param_util.h"
  38. #include "./gen_map_prof.h"
  39. #include "./param_util.h"
  40. #include "chxmapptrtoptr.h"
  41. #include "chxmapstringtoob.h"
  42. #include "hxmap.h"
  43. #include "hxguidmap.h"
  44. #include <errno.h>
  45. #ifndef _WINDOWS
  46. #include <sys/time.h>
  47. #endif
  48. #include <time.h>
  49. HLXMapProf::HLXMapProf() : m_memCheckpoint(NULL), m_timeCheckpointSec(0), m_timeCheckpointMicro(0)
  50. {
  51.     m_typeArray = new CHXString[2];
  52.     m_array.Add(new GenMapProf<CHXMapPtrToPtr, void*, void*>());
  53.     m_typeArray[0] = "CHXMapPtrToPtr";
  54. }
  55. HLXMapProf::~HLXMapProf()
  56. {
  57.     for (int i = 0; i < m_array.GetSize(); i++)
  58.     {
  59. delete ((GenMapProfBase*)m_array.GetAt(i));
  60.     }
  61.     m_array.RemoveAll();
  62.     delete[] m_typeArray;
  63. }
  64.     
  65. void HLXMapProf::GetCommandInfo(UTVector<HLXUnitTestCmdInfo*>& cmds)
  66. {
  67.     int i = 0;
  68.     cmds.Resize(18);
  69.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  70.     "MemCheckpoint",
  71.     &HLXMapProf::HandleMemCheckpointCmd,
  72.     1);
  73.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  74.     "TimeCheckpoint",
  75.     &HLXMapProf::HandleTimeCheckpointCmd,
  76.     1);
  77.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  78.     "SetSeed",
  79.     &HLXMapProf::HandleSetSeedCmd,
  80.     2);
  81.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  82.     "CreateElement",
  83.     &HLXMapProf::HandleCreateElCmd,
  84.     2);
  85.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  86.     "CreateElements",
  87.     &HLXMapProf::HandleCreateElementsCmd,
  88.     3);
  89.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  90.     "ClearElements",
  91.     &HLXMapProf::HandleClearElCmd,
  92.     1);
  93.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  94.     "GetCount",
  95.     &HLXMapProf::HandleGetCountCmd,
  96.     2);
  97.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  98.     "IsEmpty",
  99.     &HLXMapProf::HandleIsEmptyCmd,
  100.     2);
  101.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  102.     "Lookup",
  103.     &HLXMapProf::HandleLookupCmd,
  104.     3);
  105.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  106.     "SetAt",
  107.     &HLXMapProf::HandleSetAtCmd,
  108.     2);
  109.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  110.      "RemoveKey",
  111.      &HLXMapProf::HandleRemoveKeyCmd,
  112.      3);
  113.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  114.      "RemoveAll",
  115.      &HLXMapProf::HandleRemoveAllCmd,
  116.      1);
  117.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  118.      "Rhs[]",
  119.      &HLXMapProf::HandleRhsArrayOpCmd,
  120.      3);
  121.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  122.      "Lhs[]",
  123.      &HLXMapProf::HandleLhsArrayOpCmd,
  124.      2);
  125.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  126.      "IsNull",
  127.      &HLXMapProf::HandleIsNullCmd,
  128.      3);
  129.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  130.      "RunMapSpecificProfs",
  131.      &HLXMapProf::HandleRunMapSpecificProfsCmd,
  132.      1);
  133.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  134.      "ProfileInsertions",
  135.      &HLXMapProf::HandleProfileInsertionsCmd,
  136.      2);
  137.     cmds[i++] = new HLXUnitTestCmdInfoDisp<HLXMapProf>(this, 
  138.      "InitHashTable",
  139.      &HLXMapProf::HandleInitHashTableCmd,
  140.      3);
  141. }
  142. HLXCmdBasedTest* HLXMapProf::Clone() const
  143. {
  144.     return new HLXMapProf();
  145. }
  146. namespace
  147. {
  148.     bool PropagateCall(CHXPtrArray& arr,
  149.                        bool (GenMapProfBase::* FN)())
  150.     {
  151.         bool ret = true;
  152.         for (int i = 0; ret && (i < arr.GetSize()); i++)
  153.         {
  154.             GenMapProfBase* pObj = (GenMapProfBase*)arr[i];
  155.             if (pObj)
  156.                 ret = (pObj->*FN)();
  157.         }
  158.         return ret;
  159.     }
  160.     template <typename ARG1TYPE>
  161.     bool PropagateCall(CHXPtrArray& arr,
  162.                        bool (GenMapProfBase::* FN)(ARG1TYPE),
  163.                        ARG1TYPE arg1)
  164.     {
  165.         bool ret = true;
  166.         for (int i = 0; ret && (i < arr.GetSize()); i++)
  167.         {
  168.             GenMapProfBase* pObj = (GenMapProfBase*)arr[i];
  169.             if (pObj)
  170.                 ret = (pObj->*FN)(arg1);
  171.         }
  172.         return ret;
  173.     }
  174.     template <typename ARG1TYPE, typename ARG2TYPE>
  175.     bool PropagateCall(CHXPtrArray& arr,
  176.                        bool (GenMapProfBase::* FN)(ARG1TYPE, ARG2TYPE),
  177.                        ARG1TYPE arg1, ARG2TYPE arg2)
  178.     {
  179.         bool ret = true;
  180.         for (int i = 0; ret && (i < arr.GetSize()); i++)
  181.         {
  182.             GenMapProfBase* pObj = (GenMapProfBase*)arr[i];
  183.             if (pObj)
  184.                 ret = (pObj->*FN)(arg1, arg2);
  185.         }
  186.         return ret;
  187.     }
  188. };
  189. bool HLXMapProf::HandleMemCheckpointCmd(const UTVector<UTString>& /*info*/)
  190. {
  191.     bool ret = true;
  192.     void* prev = m_memCheckpoint;
  193. #if !defined(_SYMBIAN) && !defined(_WINDOWS)
  194.     m_memCheckpoint = sbrk(0);
  195. #else
  196.     m_memCheckpoint = 0;
  197. #endif    
  198.     if (prev)
  199.     {
  200.         DPRINTF(D_INFO, ("HlxMapProf::MemCheckpoint: %p -> %p (%d bytes)n",
  201.                          prev, m_memCheckpoint,
  202.                          (char*)m_memCheckpoint - (char*)prev));
  203.     }
  204.     else
  205.     {
  206.         DPRINTF(D_INFO, ("HlxMapProf::MemCheckpoint: %pn", m_memCheckpoint));
  207.     }
  208.     return ret;
  209. }
  210. bool HLXMapProf::HandleTimeCheckpointCmd(const UTVector<UTString>& /*info*/)
  211. {
  212.     struct timeval prev = {m_timeCheckpointSec, m_timeCheckpointMicro};
  213.     struct timeval next = {0, 0};
  214. //XXXgfw look like this test has only worked on linux.    
  215. #ifndef _WINDOWS    
  216.     if (gettimeofday(&next, NULL) != 0)
  217.     {
  218.         DPRINTF(D_INFO, ("HlxMapProf::TimeCheckpoint: gettimeofday() error number %dn",
  219.                          errno));
  220.         return false;
  221.     }
  222.     if (prev.tv_sec || prev.tv_usec)
  223.     {
  224.         long diffSec = next.tv_sec - prev.tv_sec;
  225.         long diffUsec = next.tv_usec - prev.tv_usec;
  226.         if (diffUsec < 0)
  227.         {
  228.             --diffSec;
  229.             diffUsec += 1000000;
  230.         }
  231.         DPRINTF(D_INFO, ("HlxMapProf::TimeCheckpoint: %ld.%06ld -> %ld.%06ld (%ld.%06ld sec)n",
  232.                          prev.tv_sec, prev.tv_usec,
  233.                          next.tv_sec, next.tv_usec,
  234.                          diffSec, diffUsec));
  235.     }
  236.     else
  237.     {
  238.         DPRINTF(D_INFO, ("HlxMapProf::TimeCheckpoint: %ld.%06ldn",
  239.                          next.tv_sec, next.tv_usec));
  240.     }
  241.     m_timeCheckpointSec = next.tv_sec;
  242.     m_timeCheckpointMicro = next.tv_usec;
  243. #else
  244.         DPRINTF(D_INFO, ("This test has not been ported to windows yet. Maybe others.n"));
  245. #endif
  246.     return true;
  247. }
  248. bool HLXMapProf::HandleSetSeedCmd(const UTVector<UTString>& info)
  249. {
  250.     bool ret = false;
  251.     unsigned int seed = 0;
  252.     if (!UTParamUtil::GetUInt(info[1], seed))
  253.     {
  254. DPRINTF(D_ERROR, ("HLXMapProf::HandleSetSeedCmd : failed to convert parametern"));
  255.     }
  256.     else
  257.     {
  258.         ret = true;
  259.         srand(seed);
  260.     }
  261.     return ret;
  262. }
  263. bool HLXMapProf::HandleCreateElCmd(const UTVector<UTString>& info)
  264. {
  265.     bool ret = false;
  266.     int index = 0;
  267.     if (!UTParamUtil::GetInt(info[1], index))
  268.     {
  269. DPRINTF(D_ERROR, ("HLXMapProf::HandleCreateElCmd : failed to convert parametern"));
  270.     }
  271.     else
  272.         ret = PropagateCall(m_array, &GenMapProfBase::CreateElement, index);
  273.     return ret;
  274. }
  275. #ifdef XXXSAB
  276. bool HLXMapProf::CreateElement(int index)
  277. {
  278.     bool ret = true;
  279.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  280.     {
  281. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  282. if (pObj)
  283.     ret = pObj->CreateElement(index);
  284.     }
  285.     return ret;
  286. }
  287. #endif /* XXXSAB */
  288. bool HLXMapProf::HandleCreateElementsCmd(const UTVector<UTString>& info)
  289. {
  290.     bool ret = false;
  291.     int index = 0;
  292.     int num = 0;
  293.     if (!UTParamUtil::GetInt(info[1], index) ||
  294.         !UTParamUtil::GetInt(info[2], num))
  295.     {
  296. DPRINTF(D_ERROR, ("HLXMapProf::HandleCreateElementsCmd : failed to convert parametern"));
  297.     }
  298.     else
  299. ret = PropagateCall(m_array, &GenMapProfBase::CreateElements,
  300.                             index, num);
  301.     return ret;
  302. }
  303. bool HLXMapProf::HandleClearElCmd(const UTVector<UTString>& /*info*/)
  304. {
  305.     return PropagateCall(m_array, &GenMapProfBase::ClearElements);
  306.     // return ClearElements();
  307. }
  308. #ifdef XXXSAB
  309. bool HLXMapProf::ClearElements()
  310. {
  311.     bool ret = true;
  312.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  313.     {
  314. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  315. if (pObj)
  316.     ret = pObj->ClearElements();
  317.     }
  318.     return ret;
  319. }
  320. #endif /* XXXSAB */
  321. bool HLXMapProf::HandleGetCountCmd(const UTVector<UTString>& info)
  322. {
  323.     bool ret = false;
  324.     int expected = 0;
  325.     if (!UTParamUtil::GetInt(info[1], expected))
  326.     {
  327. DPRINTF(D_ERROR, ("HLXMapProf::HandleGetCountCmd : failed to convert parametern"));
  328.     }
  329.     else
  330. ret = GetCount(expected);
  331.     return ret;
  332. }
  333. bool HLXMapProf::GetCount(int expected)
  334. {
  335.     bool ret = true;
  336.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  337.     {
  338. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  339. if (pObj)
  340.     ret = pObj->GetCount(expected);
  341.     }
  342.     return ret;
  343. }
  344. bool HLXMapProf::HandleIsEmptyCmd(const UTVector<UTString>& info)
  345. {
  346.     bool ret = false;
  347.     bool expected = false;
  348.     if (!UTParamUtil::GetBool(info[1],expected))
  349.     {
  350. DPRINTF(D_ERROR, ("HLXMapProf::HandleIsEmptyCmd : failed to convert parametern"));
  351.     }
  352.     else
  353. ret = IsEmpty(expected);
  354.     return ret;
  355. }
  356. bool HLXMapProf::IsEmpty(bool expected)
  357. {
  358.     bool ret = true;
  359.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  360.     {
  361. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  362. if (pObj)
  363.     ret = pObj->IsEmpty(expected);
  364.     }
  365.     return ret;
  366. }
  367. bool HLXMapProf::HandleLookupCmd(const UTVector<UTString>& info)
  368. {
  369.     bool ret = false;
  370.     int index = 0;
  371.     bool expected = false;
  372.     if (!UTParamUtil::GetInt(info[1], index) ||
  373. !UTParamUtil::GetBool(info[2],expected))
  374.     {
  375. DPRINTF(D_ERROR, ("HLXMapProf::HandleLookupCmd : failed to convert parametern"));
  376.     }
  377.     else
  378. ret = Lookup(index, expected);
  379.     return ret;
  380. }
  381. bool HLXMapProf::Lookup(int index, bool expected)
  382. {
  383.     bool ret = true;
  384.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  385.     {
  386. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  387. if (pObj)
  388.     ret = pObj->Lookup(index, expected);
  389.     }
  390.     return ret;
  391. }
  392. bool HLXMapProf::HandleSetAtCmd(const UTVector<UTString>& info)
  393. {
  394.     bool ret = false;
  395.     int index = 0;
  396.     if (!UTParamUtil::GetInt(info[1], index))
  397.     {
  398. DPRINTF(D_ERROR, ("HLXMapProf::HandleSetCmd : failed to convert parametern"));
  399.     }
  400.     else
  401. ret = SetAt(index);
  402.     return ret;
  403. }
  404. bool HLXMapProf::SetAt(int index)
  405. {
  406.     bool ret = true;
  407.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  408.     {
  409. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  410. if (pObj)
  411.     ret = pObj->SetAt(index);
  412.     }
  413.     
  414.     return ret;
  415. }
  416. bool HLXMapProf::HandleRemoveKeyCmd(const UTVector<UTString>& info)
  417. {
  418.     bool ret = false;
  419.     int index = 0;
  420.     bool expected = false;
  421.     if (!UTParamUtil::GetInt(info[1], index) ||
  422. !UTParamUtil::GetBool(info[2],expected))
  423.     {
  424. DPRINTF(D_ERROR, ("HLXMapProf::HandleRemoveKeyCmd : failed to convert parametern"));
  425.     }
  426.     else
  427. ret = RemoveKey(index, expected);
  428.     return ret;
  429. }
  430. bool HLXMapProf::RemoveKey(int index, bool expected)
  431. {
  432.     bool ret = true;
  433.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  434.     {
  435. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  436. if (pObj)
  437.     ret = pObj->RemoveKey(index, expected);
  438.     }
  439.     return ret;
  440. }
  441. bool HLXMapProf::HandleRemoveAllCmd(const UTVector<UTString>& /*info*/)
  442. {
  443.     bool ret = true;
  444.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  445.     {
  446. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  447. if (pObj)
  448.     ret = pObj->RemoveAll();
  449.     }
  450.     return ret;
  451. }
  452. bool HLXMapProf::HandleRhsArrayOpCmd(const UTVector<UTString>& info)
  453. {
  454.     bool ret = false;
  455.     int index = 0;
  456.     bool expected = false;
  457.     if (!UTParamUtil::GetInt(info[1], index) ||
  458. !UTParamUtil::GetBool(info[2], expected))
  459.     {
  460. DPRINTF(D_ERROR, ("HLXMapProf::HandleRhsArrayOpCmd : failed to convert parametern"));
  461.     }
  462.     else
  463.     {
  464. ret = RhsArrayOp(index, expected);
  465.     }
  466.     return ret;
  467. }
  468. bool HLXMapProf::RhsArrayOp(int index, bool expected)
  469. {
  470.     bool ret = true;
  471.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  472.     {
  473. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  474. if (pObj)
  475. {
  476.     ret = pObj->RhsArrayOp(index, expected);
  477. }
  478.     }
  479.     return ret;
  480. }
  481. bool HLXMapProf::HandleLhsArrayOpCmd(const UTVector<UTString>& info)
  482. {
  483.     bool ret = false;
  484.     int index = 0;
  485.     if (!UTParamUtil::GetInt(info[1], index))
  486.     {
  487. DPRINTF(D_ERROR, ("HLXMapProf::HandleLhsArrayOpCmd : failed to convert parametern"));
  488.     }
  489.     else
  490. ret = LhsArrayOp(index);
  491.     return ret;
  492. }
  493. bool HLXMapProf::LhsArrayOp(int index)
  494. {
  495.     bool ret = true;
  496.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  497.     {
  498. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  499. if (pObj)
  500.     ret = pObj->LhsArrayOp(index);
  501.     }
  502.     return ret;
  503. }
  504. bool HLXMapProf::HandleIsNullCmd(const UTVector<UTString>& info)
  505. {
  506.     bool ret = false;
  507.     int index = 0;
  508.     bool expected = false;
  509.     if (!UTParamUtil::GetInt(info[1], index) ||
  510. !UTParamUtil::GetBool(info[2], expected))
  511.     {
  512. DPRINTF(D_ERROR, ("HLXMapProf::HandleIsNullCmd : failed to convert parametern"));
  513.     }
  514.     else
  515.     {
  516. ret = IsNull(index, expected);
  517.     }
  518.     return ret;
  519. }
  520. bool HLXMapProf::IsNull(int index, bool expected)
  521. {
  522.     bool ret = true;
  523.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  524.     {
  525. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  526. if (pObj)
  527. {
  528.     ret = pObj->IsNull(index, expected);
  529. }
  530.     }
  531.     return ret;
  532. }
  533. bool HLXMapProf::HandleRunMapSpecificProfsCmd(const UTVector<UTString>& /*info*/)
  534. {
  535.     bool ret = true;
  536.     for (int i = 0; ret && (i < m_array.GetSize()); i++)
  537.     {
  538. GenMapProfBase* pObj = (GenMapProfBase*)m_array[i];
  539. if (pObj)
  540.     ret = pObj->RunMapSpecificProfs();
  541.     }
  542.     return ret;
  543. }
  544. bool HLXMapProf::HandleProfileInsertionsCmd(const UTVector<UTString>& info)
  545. {
  546.     bool ret = false;
  547.     int typeIdx = -1;
  548.     if (!UTParamUtil::GetInt(info[1], typeIdx) ||
  549.         (typeIdx < 0 || typeIdx >= m_array.GetSize()))
  550.     {
  551. DPRINTF(D_ERROR, ("HLXMapProf::HandleProfileInsertionsCmd : failed to convert parametern"));
  552.     }
  553.     else
  554.     {
  555. GenMapProfBase* pObj = (GenMapProfBase*)m_array[typeIdx];
  556. if (pObj)
  557.     ret = pObj->ProfileInsertions(m_typeArray[typeIdx]);
  558.     }
  559.     return ret;
  560. }
  561. bool HLXMapProf::HandleInitHashTableCmd(const UTVector<UTString>& info)
  562. {
  563.     bool ret = false;
  564.     int typeIdx = -1;
  565.     int num = 0;
  566.     if (!UTParamUtil::GetInt(info[1], typeIdx) ||
  567.         (typeIdx < 0 || typeIdx >= m_array.GetSize()) ||
  568. !UTParamUtil::GetInt(info[2], num))
  569.     {
  570. DPRINTF(D_ERROR, ("HLXMapProf::HandleInitHashTableCmd : failed to convert parametern"));
  571.     }
  572.     else
  573.     {
  574. GenMapProfBase* pObj = (GenMapProfBase*)m_array[typeIdx];
  575. if (pObj)
  576.     ret = pObj->InitHashTable(num);
  577.     }
  578.     return ret;
  579. }