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

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 "chxliteprefs.h"
  36. #include "hxccf.h"
  37. #include "unkimp.h"
  38. #include "ihxpckts.h"
  39. #include "chxpckts.h"
  40. #include "hlxclib/stdlib.h"
  41. class CHXSimpleFactory : public IHXCommonClassFactory,
  42.  public IHXScheduler,
  43.  public CUnknownIMP
  44. {
  45. public:
  46.     CHXSimpleFactory() : m_pCallback(NULL) {}
  47.     DECLARE_UNKNOWN(CHXSimpleFactory);
  48.     STDMETHOD(CreateInstance) (THIS_
  49. REFCLSID    /*IN*/  rclsid,
  50. void**     /*OUT*/ ppUnknown)
  51.     {
  52. HX_RESULT res = HXR_NOTIMPL;
  53. if (IsEqualIID(rclsid, CLSID_IHXBuffer))
  54. {
  55.     CHXBuffer* pBuffer = new CHXBuffer;
  56.     if (pBuffer)
  57.     {
  58. pBuffer->AddRef();
  59. res = pBuffer->QueryInterface(IID_IUnknown, ppUnknown);
  60. pBuffer->Release();
  61.     }
  62.     else
  63.     {
  64. res = HXR_OUTOFMEMORY;
  65.     }
  66. }
  67. return res;
  68.     }
  69.     STDMETHOD(CreateInstanceAggregatable)
  70.     (THIS_
  71.     REFCLSID     /*IN*/  rclsid,
  72.     REF(IUnknown*)  /*OUT*/ ppUnknown,
  73.     IUnknown*     /*IN*/  pUnkOuter)
  74.     {
  75. return HXR_NOTIMPL;
  76.     }
  77.     static IHXBuffer* Bufferize(int value)
  78.     {
  79. char temp[12];
  80. itoa(value, temp, 10);
  81. return Bufferize(temp);
  82.     }
  83.     static IHXBuffer* Bufferize(const char* value)
  84.     {
  85. IHXBuffer* pBuffer = new CHXBuffer;
  86. if (pBuffer)
  87. {
  88.     pBuffer->AddRef();
  89.     if (SUCCEEDED(pBuffer->Set((const UCHAR*)value, strlen(value)+1)))
  90.     {
  91. return pBuffer;
  92.     }
  93.     pBuffer->Release();
  94. }
  95. return NULL;
  96.     }
  97.     STDMETHOD_(CallbackHandle,RelativeEnter) (THIS_
  98. IHXCallback* pCallback,
  99. UINT32 ms)
  100.     {
  101. HX_RELEASE(m_pCallback);
  102. m_pCallback = pCallback;
  103. m_pCallback->AddRef();
  104. return (CallbackHandle)m_pCallback;
  105.     }
  106.     STDMETHOD_(CallbackHandle,AbsoluteEnter) (THIS_
  107. IHXCallback* pCallback,
  108. HXTimeval tVal)
  109.     {
  110. HX_RELEASE(m_pCallback);
  111. m_pCallback = pCallback;
  112. m_pCallback->AddRef();
  113. return (CallbackHandle)m_pCallback;
  114.     }
  115.     STDMETHOD(Remove) (THIS_
  116.      CallbackHandle Handle)
  117.     {
  118. if (Handle == (CallbackHandle)m_pCallback)
  119. {
  120.     HX_RELEASE(m_pCallback);
  121.     return HXR_OK;
  122. }
  123. return HXR_UNEXPECTED;
  124.     }
  125.     STDMETHOD_(HXTimeval,GetCurrentSchedulerTime) (THIS)
  126.     {
  127. HXTimeval t = {0,0};
  128. return t;
  129.     }
  130.     void    ProcessCallback()
  131.     {
  132. if (m_pCallback)
  133. {
  134.     m_pCallback->Func();
  135.     HX_RELEASE(m_pCallback);
  136. }
  137.     }
  138. private:
  139.     IHXCallback*    m_pCallback;
  140. };
  141. BEGIN_INTERFACE_LIST(CHXSimpleFactory)
  142.     INTERFACE_LIST_ENTRY_SIMPLE(IHXCommonClassFactory)
  143.     INTERFACE_LIST_ENTRY_SIMPLE(IHXScheduler)
  144. END_INTERFACE_LIST
  145. struct TestStr
  146. {
  147.     const char* pName;
  148.     const char* pValue;
  149. };
  150. struct TestInt
  151. {
  152.     const char* pName;
  153.     int nValue;
  154. };
  155. const TestStr kTestStr[] =
  156. {
  157.     { "foostr", "foo" },
  158.     { "barstr", "bar" },
  159.     { "foo\foostr", "foo-foo" },
  160.     { "foo\barstr", "foo-bar" },
  161.     { "foo\foobarstr", "foo-foobar" },
  162.     { "bar\foostr", "bar-foo" },
  163.     { NULL, NULL }
  164. };
  165. const TestInt kTestInt[] =
  166. {
  167.     { "foo", 10 },
  168.     { "foobar", 100 },
  169.     { "foo\bar", 1000 },
  170.     { "foo\foobar", 20 },
  171.     { "foo\foo\bar", 200 },
  172.     { NULL, 0 }
  173. };
  174. int main(int argc, char* argv[])
  175. {
  176.     printf("starting liteprefs test...n");
  177.     CHXSimpleFactory* pFactory = new CHXSimpleFactory;
  178.     if (pFactory)
  179.     {
  180. pFactory->AddRef();
  181. CHXLitePrefs* pPrefs = CHXLitePrefs::CreateObject();
  182. if (pPrefs)
  183. {
  184.     pPrefs->AddRef();
  185.     HX_RESULT res = pPrefs->Init(pFactory->GetUnknown());
  186.     if (FAILED(res))
  187.     {
  188. printf("failed to initialize prefsn");
  189.     }
  190.     res = pPrefs->Open("test", "test", 1, 0);
  191.     if (FAILED(res))
  192.     {
  193. printf("failed to open prefsn");
  194.     }
  195.     // stick some strings into the prefs
  196.     {
  197. int n = 1;
  198. const TestStr* pTest = kTestStr;
  199. while (pTest->pName)
  200. {
  201.     IHXBuffer* pBuf = CHXSimpleFactory::Bufferize(pTest->pValue);
  202.     res = pPrefs->WritePref(pTest->pName, pBuf);
  203.     if (FAILED(res))
  204.     {
  205. printf("WritePref string test %d failedn", n);
  206.     }
  207.     HX_RELEASE(pBuf);
  208.     pTest++;
  209.     n++;
  210. }
  211.     }
  212.     // hack our fake scheduler
  213.     pFactory->ProcessCallback();
  214.     // stick some ints into the prefs
  215.     {
  216. int n = 1;
  217. const TestInt* pTest = kTestInt;
  218. while (pTest->pName)
  219. {
  220.     IHXBuffer* pBuf = CHXSimpleFactory::Bufferize(pTest->nValue);
  221.     res = pPrefs->WritePref(pTest->pName, pBuf);
  222.     if (FAILED(res))
  223.     {
  224. printf("WritePref string test %d failedn", n);
  225.     }
  226.     HX_RELEASE(pBuf);
  227.     pTest++;
  228.     n++;
  229. }
  230.     }
  231.     // hack our fake scheduler
  232.     pFactory->ProcessCallback();
  233.     // check our strings
  234.     {
  235. int n = 1;
  236. const TestStr* pTest = kTestStr;
  237. while (pTest->pName)
  238. {
  239.     IHXBuffer* pBuf = NULL;
  240.     res = pPrefs->ReadPref(pTest->pName, pBuf);
  241.     if (FAILED(res) || !pBuf)
  242.     {
  243. printf("ReadPref string test %d failedn", n);
  244.     }
  245.     else if (strcmp(pTest->pValue, (const char*)pBuf->GetBuffer()))
  246.     {
  247. printf("mismatched pref string test %dn", n);
  248.     }
  249.     HX_RELEASE(pBuf);
  250.     pTest++;
  251.     n++;
  252. }
  253.     }
  254.     // check our ints
  255.     {
  256. int n = 1;
  257. const TestInt* pTest = kTestInt;
  258. while (pTest->pName)
  259. {
  260.     IHXBuffer* pBuf = NULL;
  261.     res = pPrefs->ReadPref(pTest->pName, pBuf);
  262.     if (FAILED(res) || !pBuf)
  263.     {
  264. printf("ReadPref string test %d failedn", n);
  265.     }
  266.     else if (pTest->nValue != atoi((const char*)pBuf->GetBuffer()))
  267.     {
  268. printf("mismatched pref string test %dn", n);
  269.     }
  270.     HX_RELEASE(pBuf);
  271.     pTest++;
  272.     n++;
  273. }
  274.     }
  275.     HX_RELEASE(pPrefs);
  276. }
  277. else
  278. {
  279.     printf("out of memory!n");
  280. }
  281. HX_RELEASE(pFactory);
  282.     }
  283.     else
  284.     {
  285. printf("out of memory!n");
  286.     }
  287.     printf("done!n");
  288.     return 0;
  289. }