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

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 _HXCACHE2_H_
  36. #define _HXCACHE2_H_
  37. /*
  38.  * Forward declarations of some interfaces defined herein.
  39.  */
  40. typedef _INTERFACE IHXCacheObject IHXCacheObject;
  41. typedef _INTERFACE IHXCacheObjectResponse IHXCacheObjectResponse;
  42. /****************************************************************************
  43.  * 
  44.  *  Interface:
  45.  * 
  46.  * IHXCache2
  47.  * 
  48.  *  Purpose:
  49.  *
  50.  *      IHXCache2 acts as a factory for IHXCacheObject objects.  
  51.  * 
  52.  *  IID_IHXCache2:
  53.  * 
  54.  * {00002E0E-0901-11d1-8B06-00A024406D59}
  55.  * 
  56.  */
  57. DEFINE_GUID(IID_IHXCache2, 0x00002E0E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  58. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  59. #undef  INTERFACE
  60. #define INTERFACE   IHXCache2
  61. DECLARE_INTERFACE_(IHXCache2, IUnknown)
  62. {
  63.     /*
  64.      * IUnknown methods
  65.      */
  66.     STDMETHOD(QueryInterface) (THIS_
  67. REFIID riid,
  68. void** ppvObj) PURE;
  69.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  70.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  71.     /*
  72.      * IHXCache2 methods
  73.      */
  74.     /************************************************************************
  75.      * Method:
  76.      *
  77.      *     IHXCache2::CreateMemCacheObject
  78.      *
  79.      * Purpose:
  80.      *
  81.      *      Creates an object which implements the IHXCacheObject interface.
  82.      *      This object uses ONLY the memory for caching.
  83.      */
  84.     STDMETHOD(CreateMemCacheObject) (THIS_
  85.          IHXCacheObject**          /*OUT*/ ppObject,
  86.                                          IHXCommonClassFactory*    /*IN*/  pClassFactory) PURE;
  87. #ifdef HELIX_FEATURE_FILECACHE // use the local file system for caching
  88.     /************************************************************************
  89.      * Method:
  90.      *
  91.      *     IHXCache2::CreateFileCacheObject
  92.      *
  93.      * Purpose:
  94.      *
  95.      *      Creates an object which implements the IHXCacheObject interface.
  96.      *      This object *uses the local filesystem* in addition to the memory
  97.      *      for caching.
  98.      */
  99.     STDMETHOD(CreateFileCacheObject) (THIS_
  100.          IHXCacheObject**           /*OUT*/ ppObject,
  101.                                          IHXCommonClassFactory*     /*IN*/      pClassFactory,
  102.                                          UINT32                     /*IN*/      ulFileLength,
  103.                                          char*                      /*IN*/      pFileName) PURE;
  104. #endif
  105.    
  106. }; // IHXCache2 
  107. /****************************************************************************
  108.  * 
  109.  *  Interface:
  110.  * 
  111.  * IHXCacheObject
  112.  * 
  113.  *  Purpose:
  114.  * 
  115.  *      This interface defines methods that are implemented by a simple
  116.  *      cache object. The cache object has only one RESTRICTION and that 
  117.  *      is the data should be added in a linear fashion. To be precise,
  118.  *      the starting offset of the currently being added block should be
  119.  *      exactly one more than the ending offset of the most previously 
  120.  *      added block. Data can be read out in any order.
  121.  *
  122.  *   
  123.  * 
  124.  *  IID_IHXCacheObject:
  125.  * 
  126.  * {00002E10-0901-11d1-8B06-00A024406D59}
  127.  * 
  128.  */
  129. DEFINE_GUID(IID_IHXCacheObject, 0x00002E10, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  130. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  131. #undef  INTERFACE
  132. #define INTERFACE   IHXCacheObject
  133. DECLARE_INTERFACE_(IHXCacheObject, IUnknown)
  134. {
  135.     /*
  136.      * IUnknown methods
  137.      */
  138.     STDMETHOD(QueryInterface) (THIS_
  139. REFIID riid,
  140. void** ppvObj) PURE;
  141.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  142.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  143.     /*
  144.      * IHXCacheObject methods
  145.      */
  146.     /************************************************************************
  147.      * Method:
  148.      *
  149.      *     IHXCacheObject::Init
  150.      *
  151.      * Purpose:
  152.      *
  153.      *     Associates a cache object with the response object
  154.      *     it should notify of operation completeness. Also, sets the Capacity
  155.      *      and threshold of the cache object. The capacity determines how much
  156.      *      data the object can store before it needs to discard already present 
  157.      *      data. Threshold determines when cached data is discarded. If the amount
  158.      *      of data which has been read out of the cache is > (STRICTLY GREATER)
  159.      *      than the threshold percentage of the total capacity (not the current
  160.      *      amount of data present in the cache), then exactly that much amount of
  161.      *      data is discarded so that the threshold condition is satisfied. Note that
  162.      *      0 <= uThreshold < 100.
  163.      */
  164.     STDMETHOD(Init) (THIS_
  165. IHXCacheObjectResponse*   /*IN*/  pCacheObjectResponse,
  166.                         UINT32                    /*IN*/  ulCapacity,
  167.                         UINT32                    /*IN*/  uThreshold) PURE;
  168.     /************************************************************************
  169.      * Method:
  170.      *
  171.      *     IHXCacheObject::GetThreshold
  172.      *
  173.      * Purpose:
  174.      *
  175.      *     Obtain the threshold of the cache object.
  176.      */
  177.     STDMETHOD_(UINT32, GetThreshold) (THIS) PURE;
  178.     /************************************************************************
  179.      * Method:
  180.      *
  181.      *     IHXCacheObject::ChangeThreshold
  182.      *
  183.      * Purpose:
  184.      *
  185.      *     The object keeps caching data until it is full (exhausts its 
  186.      *      capacity). Once it is full, it will overwite existing cached data
  187.      *      with new data ONLY if the percentage of cached data which has been
  188.      *      read from the cache using the ReadBlock() method is greater than a
  189.      *      given percentage of Capacity. This percentage is set by Init()
  190.      *      method. In case the threshold is exceeded, the oldest added data
  191.      *      (the data with the least offset ) will be discarded and the 
  192.      *      amount of data discarded is so that the remaining cached data exactly
  193.      *      satisfies the threshold condidtion.
  194.      *
  195.      *      For eg., this cache object is used in the HTTP/1.0 file system plugin for
  196.      *      mobile devices and in this case, the threshold was set to 70%
  197.      *      i.e., uNewThreshold = 70
  198.      *
  199.      */
  200.     STDMETHOD(ChangeThreshold)      (THIS_
  201.              UINT32  /*IN*/ uNewThreshold) PURE;
  202.     /************************************************************************
  203.      * Method:
  204.      *
  205.      *     IHXCacheObject::GetCapacity
  206.      *
  207.      * Purpose:
  208.      *
  209.      *     Obtain the capacity in bytes of the cache object.
  210.      */
  211.     STDMETHOD_(UINT32, GetCapacity) (THIS) PURE;
  212.     /************************************************************************
  213.      * Method:
  214.      *
  215.      *     IHXCacheObject::ChangeCapacity
  216.      *
  217.      * Purpose:
  218.      *
  219.      *     Changes the capacity of the cache object (in bytes). It is used to
  220.      *      increase or decrease the capacity after the cache object has been
  221.      *      created and it's capacity set usinf Init(). This method can
  222.      *      be called any number of times. If new capacity is less than old capacity,
  223.      *      the oldest data are discarded.
  224.      *
  225.      */
  226.     STDMETHOD(ChangeCapacity)      (THIS_
  227.             UINT32  /*IN*/ newByteCount) PURE;
  228.     /************************************************************************
  229.      * Method:
  230.      *
  231.      *     IHXCacheObject::GetUnusedCapacity
  232.      *
  233.      * Purpose:
  234.      *
  235.      *     Obtain the unused capacity in bytes of the cache object.
  236.      */
  237.     STDMETHOD_(UINT32, GetUnusedCapacity) (THIS) PURE;
  238.     /************************************************************************
  239.      * Method:
  240.      *
  241.      *     IHXCacheObject::AddBlock
  242.      *
  243.      * Purpose:
  244.      *
  245.      *     Adds a block of data to the cache. 
  246.      *      NOTE: !!! The data should be added in a linear fashion. To be precise,
  247.      *      the starting offset of the currently being added block should be
  248.      *      exactly one more than the ending offset of the most previously 
  249.      *      added block.
  250.      *      Returns HXR_OK for success and HXR_OUTOFMEMORY if the cache can't
  251.      *      accomodate the block (since it has a fixed capacity).
  252.      *      
  253.      */
  254.     STDMETHOD(AddBlock) (THIS_
  255.  IHXBuffer* /*IN*/ pBlock) PURE;
  256.     /************************************************************************
  257.      * Method:
  258.      *
  259.      *     IHXCacheObject::VerifyBlock
  260.      *
  261.      * Purpose:
  262.      *
  263.      *     Verify that a block of data is in the cache.
  264.      */
  265.     STDMETHOD(VerifyBlock) (THIS_
  266.  UINT32 /*IN*/ ulBlockOffset,
  267.  UINT32 /*IN*/ ulBlockLength) PURE;
  268.     /************************************************************************
  269.      * Method:
  270.      *
  271.      *     IHXCacheObject::ReadBlock
  272.      *
  273.      * Purpose:
  274.      *
  275.      *     Read a block out of the cache. Returns HXR_OK if it can supply
  276.      *      *all* data. It returns HXR_FAIL if, at some point in the past,
  277.      *      it had the data but has since discarded (a part of whole of) it.
  278.      *      It returns HXR_INCOMPLETE in all other cases, viz
  279.      *       
  280.      *          (1) Only part of the data is present but no part of the data
  281.      *              was discarded in the past.
  282.      *          (2) No part of the requested data is present but is expected
  283.      *              to be recieved in the future.
  284.      *
  285.      *      To understand it clearly, visulaize yourself storing the data of a
  286.      *      remote file as it arrives to you. As you keep storing more and more
  287.      *      data, then the cache keeps discarding some of the old data. Now, this
  288.      *      discarded data can never be got back by cache. Hence when the user
  289.      *      request contains some data which has already been discarded, then 
  290.      *      the cache replies back with HXR_FAIL otherwise it is HXR_INCOMPLETE
  291.      *      or HXR_OK depending on whether on how much of data it can supply *now*.
  292.      *
  293.      */
  294.     STDMETHOD(ReadBlock) (THIS_
  295.  UINT32 /*IN*/ ulBlockOffset,
  296.  UINT32 /*IN*/ ulBlockLength) PURE;
  297.     /************************************************************************
  298.      * Method:
  299.      *     IHXCacheObject::Flush
  300.      *
  301.      * Purpose:
  302.      *
  303.      *     Releases all data buffers cached in the object. The object now
  304.      *      gets to a same state as it was when newly created. After flushing,
  305.      *     the object can be used for writing/reading as before.
  306.      */
  307.     STDMETHOD(Flush) (THIS) PURE;
  308.     /************************************************************************
  309.      * Method:
  310.      *
  311.      *     IHXCacheObject::IsFull
  312.      *
  313.      * Purpose:
  314.      *
  315.      *     Is UnusedCapacity = 0?
  316.      */
  317.     STDMETHOD_(BOOL, IsFull) (THIS) PURE;
  318.     /************************************************************************
  319.      * Method:
  320.      *
  321.      *     IHXCacheObject::IsEmpty
  322.      *
  323.      * Purpose:
  324.      *
  325.      *     Is UnusedCapacity = TotalCapacity?
  326.      */
  327.     STDMETHOD_(BOOL, IsEmpty) (THIS) PURE;
  328. }; // IHXCacheObject
  329. /****************************************************************************
  330.  * 
  331.  *  Interface:
  332.  * 
  333.  * IHXCacheObjectResponse
  334.  * 
  335.  *  Purpose:
  336.  * 
  337.  * Response interface for IHXCacheObject operations
  338.  * 
  339.  *  IID_IHXCacheObjectResponse:
  340.  * 
  341.  * {00002E11-0901-11d1-8B06-00A024406D59}
  342.  * 
  343.  */
  344. DEFINE_GUID(IID_IHXCacheObjectResponse, 0x00002E11, 0x901, 0x11d1, 0x8b, 0x6,
  345. 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  346. #undef  INTERFACE
  347. #define INTERFACE   IHXCacheObjectResponse
  348. DECLARE_INTERFACE_(IHXCacheObjectResponse, IUnknown)
  349. {
  350.     /*
  351.      * IUnknown methods
  352.      */
  353.     STDMETHOD(QueryInterface) (THIS_
  354. REFIID riid,
  355. void** ppvObj) PURE;
  356.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  357.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  358.     /*
  359.      * IHXCacheObjectResponse methods
  360.      */
  361.     /************************************************************************
  362.      * Method:
  363.      *
  364.      *     IHXCacheObjectResponse::InitDone
  365.      *
  366.      * Purpose:
  367.      *
  368.      *     Notification that IHXCacheObject::Init call has completed.
  369.      */
  370.     STDMETHOD(InitDone) (THIS_
  371.  HX_RESULT /*IN*/ status) PURE;
  372.     /************************************************************************
  373.      * Method:
  374.      *
  375.      *     IHXCacheObjectResponse::ChangeCapacityDone
  376.      *
  377.      * Purpose:
  378.      *
  379.      *     Notification that IHXCacheObject::ChangeCapacity call has completed.
  380.      */
  381.     STDMETHOD(ChangeCapacityDone) (THIS_
  382.                 HX_RESULT /*IN*/ status) PURE;
  383.     /************************************************************************
  384.      * Method:
  385.      *
  386.      *     IHXCacheObjectResponse::AddBlockDone
  387.      *
  388.      * Purpose:
  389.      *
  390.      *     Notification that IHXCacheObject::AddBlock operation has completed.
  391.      */
  392.     STDMETHOD(AddBlockDone) (THIS_
  393. HX_RESULT /*IN*/ status) PURE;
  394.     /************************************************************************
  395.      * Method:
  396.      *
  397.      *     IHXCacheObjectResponse::VerifyBlockDone
  398.      *
  399.      * Purpose:
  400.      *
  401.      *     Notification that IHXCacheObject::VerifyBlock operation has
  402.      *     completed.
  403.      */
  404.     STDMETHOD(VerifyBlockDone) (THIS_
  405. BOOL /*IN*/ bExist) PURE;
  406.     /************************************************************************
  407.      * Method:
  408.      *
  409.      *     IHXCacheObjectResponse::ReadBlockDone
  410.      *
  411.      * Purpose:
  412.      *
  413.      *     Notification that IHXCacheObject::ReadBlock operation has
  414.      *     completed.
  415.      */
  416.     STDMETHOD(ReadBlockDone) (THIS_
  417. HX_RESULT /*IN*/ status,
  418. IHXBuffer* /*IN*/ pBuffer) PURE;
  419.     /************************************************************************
  420.      * Method:
  421.      *
  422.      *     IHXCacheObjectResponse::FlushDone
  423.      *
  424.      * Purpose:
  425.      *
  426.      *     Notification that IHXCacheObject::Flush operation has completed.
  427.      */
  428.     STDMETHOD(FlushDone) (THIS_
  429. HX_RESULT /*IN*/ status) PURE;
  430. }; // IHXCacheObjectResponse
  431. #endif  /* _HXCACHE2_H_ */