blob_cache.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:8k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: blob_cache.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:39:10  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef UTIL___BLOB_CACHE__HPP
  10. #define UTIL___BLOB_CACHE__HPP
  11. /*  $Id: blob_cache.hpp,v 1000.1 2004/06/01 19:39:10 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Anatoliy Kuznetsov
  37.  *
  38.  * File Description: BLOB cache interface specs.
  39.  *
  40.  */
  41. /// @file blob_cache.hpp
  42. /// BLOB cache interface specs. 
  43. ///
  44. /// File describes interfaces used to create local cache of remote
  45. /// binary large objects (BLOBS).
  46. #include <util/reader_writer.hpp>
  47. #include <string>
  48. BEGIN_NCBI_SCOPE
  49. /// BLOB cache read/write/maintanance interface.
  50. ///
  51. /// IBLOB_Cache describes caching service. Any large binary object
  52. /// can be stored in cache and later retrived. Such cache is a 
  53. /// temporary storage and some objects can be purged from cache based
  54. /// on an immediate request, version or access time 
  55. /// based replacement (or another implementation specific depreciation rule).
  56. class IBLOB_Cache
  57. {
  58. public:
  59.     /// If to keep already cached versions of the BLOB when storing
  60.     /// another version of it (not necessarily a newer one)
  61.     /// @sa Store(), GetWriteStream()
  62.     enum EKeepVersions {
  63.         /// Do not delete other versions of the BLOB from the cache
  64.         eKeepAll,
  65.         /// Delete the earlier (than the one being stored) versions of
  66.         /// the BLOB
  67.         eDropOlder,
  68.         /// Delete all versions of the BLOB, even those which are newer
  69.         /// than the one being stored
  70.         eDropAll
  71.     };
  72.     /// Add or replace BLOB
  73.     ///
  74.     /// @param key BLOB identification key
  75.     /// @param version BLOB version
  76.     /// @param data pointer on data buffer
  77.     /// @param size data buffer size
  78.     /// @param flag indicator to keep old BLOBs or drop it from the cache
  79.     virtual void Store(const string& key,
  80.                        int           version,
  81.                        const void*   data,
  82.                        size_t        size,
  83.                        EKeepVersions keep_versions = eDropOlder) = 0;
  84.     /// Check if BLOB exists, return BLOB size.
  85.     ///
  86.     /// @param key - BLOB identification key
  87.     /// @param version - BLOB version
  88.     /// @return BLOB size or 0 if it doesn't exist
  89.     virtual size_t GetSize(const string& key,
  90.                            int           version) = 0;
  91.     /// Fetch the BLOB
  92.     ///
  93.     /// @param key BLOB identification key
  94.     /// @param version BLOB version
  95.     /// @param buf pointer on destination buffer
  96.     /// @param size buffer size
  97.     /// @return FALSE if BLOB doesn't exist
  98.     ///
  99.     /// @note Throws an exception if provided memory buffer is insufficient 
  100.     /// to read the BLOB
  101.     virtual bool Read(const string& key, 
  102.                       int           version, 
  103.                       void*         buf, 
  104.                       size_t        buf_size) = 0;
  105.     /// Return sequential stream interface to read BLOB data.
  106.     /// 
  107.     /// @param key BLOB identification key
  108.     /// @param version BLOB version
  109.     /// @return Interface pointer or NULL if BLOB does not exist
  110.     virtual IReader* GetReadStream(const string& key, 
  111.                                    int   version) = 0;
  112.     /// Return sequential stream interface to write BLOB data.
  113.     ///
  114.     /// @param key BLOB identification key
  115.     /// @param version BLOB version
  116.     /// @param flag indicator to keep old BLOBs or drop it from the cache
  117.     /// @return Interface pointer or NULL if BLOB does not exist
  118.     virtual IWriter* GetWriteStream(const string&    key, 
  119.                                     int              version,
  120.                                     EKeepVersions    keep_versions = eDropOlder) = 0;
  121.     /// Remove all versions of the specified BLOB
  122.     ///
  123.     /// @param key BLOB identification key
  124.     virtual void Remove(const string& key) = 0;
  125.     /// Return last access time for the specified BLOB
  126.     ///
  127.     /// Class implementation may want to implement access time based
  128.     /// aging scheme for cache managed objects. In this case it needs to
  129.     /// track time of every request to BLOB data.
  130.     ///
  131.     /// @param key BLOB identification key
  132.     /// @param version BLOB version
  133.     /// @return last access time
  134.     virtual time_t GetAccessTime(const string& key,
  135.                                  int           version) = 0;
  136.     /// Delete all BLOBs with access time older than specified
  137.     ///
  138.     /// @param access_time time point, indicates objects 
  139.     /// newer than that which to keep in cache
  140.     /// @param keep_last_version type of cleaning action
  141.     virtual void Purge(time_t           access_time,
  142.                        EKeepVersions    keep_last_version = eDropAll) = 0;
  143.     /// Delete BLOBs with access time older than specified
  144.     /// 
  145.     /// Function finds all BLOB versions with the specified key
  146.     /// and removes the old instances.
  147.     /// @param key - BLOB key
  148.     /// @param access_time time point, indicates objects 
  149.     /// newer than that which to keep in cache
  150.     /// @param keep_last_version type of cleaning action
  151.     virtual void Purge(const string&    key,
  152.                        time_t           access_time,
  153.                        EKeepVersions    keep_last_version = eDropAll) = 0;
  154.     virtual ~IBLOB_Cache() {}
  155. };
  156. END_NCBI_SCOPE
  157. /*
  158.  * ===========================================================================
  159.  * $Log: blob_cache.hpp,v $
  160.  * Revision 1000.1  2004/06/01 19:39:10  gouriano
  161.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  162.  *
  163.  * Revision 1.8  2004/04/28 15:23:28  ucko
  164.  * Restore mistakenly removed files.
  165.  *
  166.  * Revision 1.6  2003/09/23 16:40:24  kuznets
  167.  * Fixed minor compilation errors
  168.  *
  169.  * Revision 1.5  2003/09/23 16:20:31  kuznets
  170.  * "Doxygenized" header comments.
  171.  *
  172.  * Revision 1.4  2003/09/22 22:42:14  vakatov
  173.  * Extended EKeepVersions.
  174.  * + EKeepLastVersion -- for Purge().
  175.  * Self-doc and style fixes.
  176.  *
  177.  * Revision 1.3  2003/09/22 19:15:13  kuznets
  178.  * Added support of reader-writer interface (util/readerwriter.hpp)
  179.  *
  180.  * Revision 1.2  2003/09/22 18:40:34  kuznets
  181.  * Minor cosmetics fixed
  182.  *
  183.  * Revision 1.1  2003/09/17 20:51:15  kuznets
  184.  * Local cache interface - first revision
  185.  * ===========================================================================
  186.  */
  187. #endif  /* UTIL___BLOB_CACHE__HPP */