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

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