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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxvalues.h,v 1.1.1.1.50.3 2004/07/09 01:45:51 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 _HXVALUES_H_
  50. #define _HXVALUES_H_
  51. // History: The rnvalues interfaces were completely rewritten 10/25/99.
  52. class CSimpleUlongMap
  53. {
  54. public:
  55.     CSimpleUlongMap();
  56.     ~CSimpleUlongMap();
  57.     HX_RESULT SetProperty(const char* pKey, ULONG32 ulValue);
  58.     HX_RESULT GetProperty(const char* pKey, REF(ULONG32) ulValue);
  59.     HX_RESULT GetFirstProperty(REF(const char*) pKey, REF(ULONG32) ulValue);
  60.     HX_RESULT GetNextProperty(REF(const char*) pKey, REF(ULONG32) ulValue);
  61.     void      Remove(const char* pKey);
  62. private:
  63.     virtual int StrCmpFunc(const char* s1, const char* s2) = 0;
  64.     struct node 
  65.     {
  66. char*        pKey;
  67. ULONG32      ulValue;
  68. struct node* pNext;
  69.     };
  70.     struct node *m_pHead;
  71.     struct node *m_pTail;
  72.     struct node *m_pCurr;
  73. };
  74. class CSimpleUlongMapStrCmp : public CSimpleUlongMap
  75. {
  76. private:
  77.     virtual int StrCmpFunc(const char* s1, const char* s2)
  78.     {
  79. return strcmp(s1,s2);
  80.     }
  81. };
  82. class CSimpleUlongMapStrCaseCmp : public CSimpleUlongMap
  83. {
  84. private:
  85.     virtual int StrCmpFunc(const char* s1, const char* s2)
  86.     {
  87. return strcasecmp(s1,s2);
  88.     }
  89. };
  90. class CSimpleBufferMap
  91. {
  92. public:
  93.     CSimpleBufferMap();
  94.     ~CSimpleBufferMap();
  95.     HX_RESULT SetProperty(const char* pKey, IHXBuffer* pValue);
  96.     HX_RESULT GetProperty(const char* pKey, REF(IHXBuffer*) pValue);
  97.     HX_RESULT GetFirstProperty(REF(const char*) pKey, REF(IHXBuffer*) pValue);
  98.     HX_RESULT GetNextProperty(REF(const char*) pKey, REF(IHXBuffer*) pValue);
  99.     void      Remove(const char* pKey);
  100. private:
  101.     virtual int StrCmpFunc(const char* s1, const char* s2) = 0;
  102.     struct node 
  103.     {
  104. char*        pKey;
  105. IHXBuffer*  pValue;
  106. struct node* pNext;
  107.     };
  108.     struct node *m_pHead;
  109.     struct node *m_pTail;
  110.     struct node *m_pCurr;
  111. };
  112. class CSimpleBufferMapStrCmp : public CSimpleBufferMap
  113. {
  114. private:
  115.     virtual int StrCmpFunc(const char* s1, const char* s2)
  116.     {
  117. return strcmp(s1,s2);
  118.     }
  119. };
  120. class CSimpleBufferMapStrCaseCmp : public CSimpleBufferMap
  121. {
  122. private:
  123.     virtual int StrCmpFunc(const char* s1, const char* s2)
  124.     {
  125. return strcasecmp(s1,s2);
  126.     }
  127. };
  128. class CKeyValueListIter;
  129. class CKeyValueListIterOneKey;
  130. class CKeyValueList : 
  131. public IHXKeyValueList,
  132. public IHXValues
  133. {
  134.     // see big comment in hxvalues.cpp
  135. public:
  136.     friend class CKeyValueListIter;
  137.     friend class CKeyValueListIterOneKey;
  138.     CKeyValueList();
  139.     ~CKeyValueList();
  140.     
  141.     /*
  142.      * IUnknown methods
  143.      */
  144.     STDMETHOD(QueryInterface) (THIS_
  145. REFIID riid,
  146. void** ppvObj);
  147.     STDMETHOD_(ULONG32,AddRef) (THIS);
  148.     STDMETHOD_(ULONG32,Release) (THIS);
  149.     // IHXKeyValueList methods
  150.     STDMETHOD(AddKeyValue) (THIS_
  151. const char* pKey,
  152. IHXBuffer* pStr);
  153.     STDMETHOD(GetIter) (THIS_
  154. REF(IHXKeyValueListIter*) pIter);
  155.     STDMETHOD(GetIterOneKey) (THIS_
  156. const char* pKey,
  157. REF(IHXKeyValueListIterOneKey*) pIter);
  158.     STDMETHOD(AppendAllListItems)   (THIS_
  159.     IHXKeyValueList* pList);
  160.     STDMETHOD_(BOOL,KeyExists)  (THIS_
  161. const char* pKey);
  162.     STDMETHOD(CreateObject) (THIS_
  163. REF(IHXKeyValueList*) pNewList);
  164.     STDMETHOD(ImportValues) (THIS_
  165. IHXValues* pValues);
  166.     // IHXValues methods
  167.     STDMETHOD(SetPropertyULONG32) (THIS_
  168. const char*      pPropertyName,
  169. ULONG32          uPropertyValue);
  170.     STDMETHOD(GetPropertyULONG32) (THIS_
  171. const char*      pPropertyName,
  172. REF(ULONG32)     uPropertyName);
  173.     STDMETHOD(GetFirstPropertyULONG32) (THIS_
  174. REF(const char*) pPropertyName,
  175. REF(ULONG32)     uPropertyValue);
  176.     STDMETHOD(GetNextPropertyULONG32) (THIS_
  177. REF(const char*) pPropertyName,
  178. REF(ULONG32)     uPropertyValue);
  179.     STDMETHOD(SetPropertyBuffer) (THIS_
  180. const char*      pPropertyName,
  181. IHXBuffer*      pPropertyValue);
  182.     STDMETHOD(GetPropertyBuffer) (THIS_
  183. const char*      pPropertyName,
  184. REF(IHXBuffer*) pPropertyValue);
  185.     
  186.     STDMETHOD(GetFirstPropertyBuffer) (THIS_
  187. REF(const char*) pPropertyName,
  188. REF(IHXBuffer*) pPropertyValue);
  189.     STDMETHOD(GetNextPropertyBuffer) (THIS_
  190. REF(const char*) pPropertyName,
  191. REF(IHXBuffer*) pPropertyValue);
  192.     STDMETHOD(SetPropertyCString) (THIS_
  193. const char*      pPropertyName,
  194. IHXBuffer*      pPropertyValue);
  195.     STDMETHOD(GetPropertyCString) (THIS_
  196. const char*      pPropertyName,
  197. REF(IHXBuffer*) pPropertyValue);
  198.     STDMETHOD(GetFirstPropertyCString) (THIS_
  199. REF(const char*) pPropertyName,
  200. REF(IHXBuffer*) pPropertyValue);
  201.     STDMETHOD(GetNextPropertyCString) (THIS_
  202. REF(const char*) pPropertyName,
  203. REF(IHXBuffer*) pPropertyValue);
  204.     // support non-uniquely-keyed list of strings; use a linked
  205.     // list of nodes, and keep an internal ref count on the list
  206.     struct node 
  207.     {
  208. char*        pKey;
  209. IHXBuffer*  pStr;
  210. struct node* pNext;
  211.     };
  212. private:
  213.     // support reference counting
  214.     LONG32 m_lRefCount;
  215.     struct list 
  216.     {
  217. void AddRef();
  218. void Release();
  219. list();
  220. ~list();
  221. struct node *m_pHead;
  222. LONG32 m_lRefCount;
  223.     } *m_pList;
  224.     struct node *m_pTail;
  225.     friend struct list;
  226.     friend struct node;
  227.     // support GetFirstPropertyCString/GetNextPropertyCString
  228.     struct NonReentrantIterator
  229.     {
  230. NonReentrantIterator() : m_pCurr(NULL) {}
  231. struct node *m_pCurr;
  232.     } m_NonReentrantIterator;
  233.     // support ULONG32 and Buffer functions
  234.     CSimpleUlongMapStrCaseCmp  m_UlongMap;
  235.     CSimpleBufferMapStrCaseCmp m_BufferMap;
  236. };
  237. class CKeyValueListIter : public IHXKeyValueListIter
  238. {
  239. public:
  240.     CKeyValueListIter(CKeyValueList::list* pList);
  241.     ~CKeyValueListIter();
  242.     /*
  243.      * IUnknown methods
  244.      */
  245.     STDMETHOD(QueryInterface) (THIS_
  246. REFIID riid,
  247. void** ppvObj);
  248.     STDMETHOD_(ULONG32,AddRef) (THIS);
  249.     STDMETHOD_(ULONG32,Release) (THIS);
  250.     // Regular methods
  251.     STDMETHOD(GetNextPair) (THIS_
  252. REF(const char*) pKey,
  253. REF(IHXBuffer*) pStr);
  254.     STDMETHOD(ReplaceCurr) (THIS_
  255. IHXBuffer* pStr);
  256. private:
  257.     CKeyValueListIter();
  258.     CKeyValueList::list *m_pList;
  259.     CKeyValueList::node *m_pCurr;
  260.     LONG32 m_lRefCount;
  261. };
  262. class CKeyValueListIterOneKey : public IHXKeyValueListIterOneKey
  263. {
  264. public:
  265.     CKeyValueListIterOneKey(const char* pKey, CKeyValueList::list* pList);
  266.     ~CKeyValueListIterOneKey();
  267.     /*
  268.      * IUnknown methods
  269.      */
  270.     STDMETHOD(QueryInterface) (THIS_
  271. REFIID riid,
  272. void** ppvObj);
  273.     STDMETHOD_(ULONG32,AddRef) (THIS);
  274.     STDMETHOD_(ULONG32,Release) (THIS);
  275.     // Regular methods
  276.     STDMETHOD(GetNextString) (THIS_
  277. REF(IHXBuffer*) pStr);
  278.     
  279.     STDMETHOD(ReplaceCurr) (THIS_
  280. IHXBuffer* pStr);
  281. private:
  282.     CKeyValueListIterOneKey();
  283.     CKeyValueList::list *m_pList;
  284.     CKeyValueList::node *m_pCurr;
  285.     CKeyValueList::node *m_pReplace;
  286.     char* m_pKey;
  287.     LONG32 m_lRefCount;
  288. };
  289. class CHXUniquelyKeyedList : 
  290. public IHXValues,
  291. public IHXValuesRemove
  292. {
  293.     // see big comment in hxvalues.cpp
  294. public:
  295.     CHXUniquelyKeyedList();
  296.     ~CHXUniquelyKeyedList();
  297.     
  298.     /*
  299.      * IUnknown methods
  300.      */
  301.     STDMETHOD(QueryInterface) (THIS_
  302. REFIID riid,
  303. void** ppvObj);
  304.     STDMETHOD_(ULONG32,AddRef) (THIS);
  305.     STDMETHOD_(ULONG32,Release) (THIS);
  306.     // IHXValues methods
  307.     STDMETHOD(SetPropertyULONG32) (THIS_
  308. const char*      pPropertyName,
  309. ULONG32          uPropertyValue);
  310.     STDMETHOD(GetPropertyULONG32) (THIS_
  311. const char*      pPropertyName,
  312. REF(ULONG32)     uPropertyName);
  313.     STDMETHOD(GetFirstPropertyULONG32) (THIS_
  314. REF(const char*) pPropertyName,
  315. REF(ULONG32)     uPropertyValue);
  316.     STDMETHOD(GetNextPropertyULONG32) (THIS_
  317. REF(const char*) pPropertyName,
  318. REF(ULONG32)     uPropertyValue);
  319.     STDMETHOD(SetPropertyBuffer) (THIS_
  320. const char*      pPropertyName,
  321. IHXBuffer*      pPropertyValue);
  322.     STDMETHOD(GetPropertyBuffer) (THIS_
  323. const char*      pPropertyName,
  324. REF(IHXBuffer*) pPropertyValue);
  325.     
  326.     STDMETHOD(GetFirstPropertyBuffer) (THIS_
  327. REF(const char*) pPropertyName,
  328. REF(IHXBuffer*) pPropertyValue);
  329.     STDMETHOD(GetNextPropertyBuffer) (THIS_
  330. REF(const char*) pPropertyName,
  331. REF(IHXBuffer*) pPropertyValue);
  332.     STDMETHOD(SetPropertyCString) (THIS_
  333. const char*      pPropertyName,
  334. IHXBuffer*      pPropertyValue);
  335.     STDMETHOD(GetPropertyCString) (THIS_
  336. const char*      pPropertyName,
  337. REF(IHXBuffer*) pPropertyValue);
  338.     STDMETHOD(GetFirstPropertyCString) (THIS_
  339. REF(const char*) pPropertyName,
  340. REF(IHXBuffer*) pPropertyValue);
  341.     STDMETHOD(GetNextPropertyCString) (THIS_
  342. REF(const char*) pPropertyName,
  343. REF(IHXBuffer*) pPropertyValue);
  344.     /*
  345.      * IHXValuesRemove methods
  346.      */
  347.     STDMETHOD(Remove) (const char* pKey);
  348.     STDMETHOD(RemoveULONG32) (const char* pKey);
  349.     STDMETHOD(RemoveBuffer) (const char* pKey);
  350.     STDMETHOD(RemoveCString) (const char* pKey);
  351. private:
  352.     CSimpleUlongMapStrCmp   m_UlongMap;
  353.     CSimpleBufferMapStrCmp  m_BufferMap;
  354.     CSimpleBufferMapStrCmp  m_CStringMap;
  355.     LONG32 m_lRefCount;
  356. };
  357. #endif // header guard