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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: lds.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2003/11/05 15:27:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.21
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef LDS_HPP__
  10. #define LDS_HPP__
  11. /*  $Id: lds.hpp,v 1000.1 2003/11/05 15:27:29 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.  * Author: Anatoliy Kuznetsov
  37.  *
  38.  * File Description: Main LDS include file.
  39.  *
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <objtools/lds/lds_db.hpp>
  43. #include <objtools/lds/lds_expt.hpp>
  44. #include <objtools/lds/lds_query.hpp>
  45. #include <map>
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(objects)
  48. //////////////////////////////////////////////////////////////////
  49. //
  50. // LDS database.
  51. //
  52. class NCBI_LDS_EXPORT CLDS_Database
  53. {
  54. public:
  55.     // Object type string to database id map
  56.     typedef map<string, int> TObjTypeMap;
  57. public:
  58.     CLDS_Database(const string& db_dir_name, 
  59.                   const string& db_name,
  60.                   const string& alias);
  61.     CLDS_Database(const string& db_dir_name,
  62.                   const string& alias);
  63.     ~CLDS_Database();
  64.     // Create the database. If the LDS database already exists all data will
  65.     // be cleaned up.
  66.     void Create();
  67.     // Open LDS database (Read/Write mode)
  68.     void Open();
  69.     // Flush all cache buffers to disk
  70.     void Sync();
  71.     // Return reference on database tables
  72.     SLDS_TablesCollection& GetTables() { return m_db; }
  73.     const TObjTypeMap& GetObjTypeMap() const { return m_ObjTypeMap; }
  74.     const string& GetAlias() const { return m_Alias; }
  75.     void SetAlias(const string& alias) { m_Alias = alias; }
  76.     // Loads types map from m_ObjectTypeDB to memory.
  77.     void LoadTypeMap();
  78. private:
  79.     CLDS_Database(const CLDS_Database&);
  80.     CLDS_Database& operator=(const CLDS_Database&);
  81. private:
  82.     string                 m_LDS_DirName;
  83.     string                 m_LDS_DbName;
  84.     string                 m_Alias;
  85.     SLDS_TablesCollection  m_db;
  86.     TObjTypeMap            m_ObjTypeMap;
  87. };
  88. //////////////////////////////////////////////////////////////////
  89. //
  90. // LDS database incapsulated into CObject compatible container
  91. //
  92. class NCBI_LDS_EXPORT CLDS_DatabaseHolder : public CObject
  93. {
  94. public:
  95.     CLDS_DatabaseHolder(CLDS_Database* db = 0);
  96.     ~CLDS_DatabaseHolder();
  97.     void AddDatabase(CLDS_Database* db) { m_DataBases.push_back(db); }
  98.     CLDS_Database* GetDefaultDatabase() 
  99.     { 
  100.         return m_DataBases.empty() ? 0 : *(m_DataBases.begin()); 
  101.     }
  102.     /// Find LDS database by the alias
  103.     CLDS_Database* GetDatabase(const string& alias);
  104.     /// Get LDS database by its index
  105.     CLDS_Database* GetDatabase(int idx) { return m_DataBases[idx]; }
  106.     // Get aliases of all registered databases
  107.     void EnumerateAliases(vector<string>* aliases);
  108. private:
  109.     CLDS_DatabaseHolder(const CLDS_DatabaseHolder&);
  110.     CLDS_DatabaseHolder& operator=(const CLDS_DatabaseHolder&);
  111. private:
  112.     vector<CLDS_Database*> m_DataBases;
  113. };
  114. END_SCOPE(objects)
  115. END_NCBI_SCOPE
  116. /*
  117.  * ===========================================================================
  118.  * $Log: lds.hpp,v $
  119.  * Revision 1000.1  2003/11/05 15:27:29  gouriano
  120.  * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.21
  121.  *
  122.  * Revision 1.21  2003/11/05 13:32:24  kuznets
  123.  * Fixed a bug in GetDefaultDatabase() (resulted in core when there are no
  124.  * databases attached)
  125.  *
  126.  * Revision 1.20  2003/10/29 16:22:49  kuznets
  127.  * +CLDS_DatabaseHolder::EnumerateAliases
  128.  *
  129.  * Revision 1.19  2003/10/27 20:16:45  kuznets
  130.  * +CLDS_DatabaseHolder::GetDatabase
  131.  *
  132.  * Revision 1.18  2003/10/27 19:18:08  kuznets
  133.  * +CLDS_DatabaseHolder::AddDatabase
  134.  *
  135.  * Revision 1.17  2003/10/09 19:55:30  kuznets
  136.  * +SetAlias function
  137.  *
  138.  * Revision 1.16  2003/10/09 18:10:50  kuznets
  139.  * LoadTypeMap() made public
  140.  *
  141.  * Revision 1.15  2003/10/09 16:44:48  kuznets
  142.  * Added Sync() method for LDS database to be able explicitly flush cache buffer
  143.  * (when we at the DB update checkpoint)
  144.  *
  145.  * Revision 1.14  2003/10/08 18:19:14  kuznets
  146.  * Database holder class changed to keep more than one database.
  147.  *
  148.  * Revision 1.13  2003/08/11 19:58:27  kuznets
  149.  * Code clean-up: separated dir name and database name
  150.  *
  151.  * Revision 1.12  2003/07/31 20:00:08  kuznets
  152.  * + CLDS_DatabaseHolder (CObject compatible vehicle for CLDs_Database)
  153.  *
  154.  * Revision 1.11  2003/06/23 18:41:19  kuznets
  155.  * Added #include <lds_query.hpp>
  156.  *
  157.  * Revision 1.10  2003/06/18 18:46:46  kuznets
  158.  * Minor fix.
  159.  *
  160.  * Revision 1.9  2003/06/16 15:39:03  kuznets
  161.  * Removing dead code.
  162.  *
  163.  * Revision 1.8  2003/06/16 14:54:08  kuznets
  164.  * lds splitted into "lds" and "lds_admin"
  165.  *
  166.  * Revision 1.7  2003/06/11 15:30:56  kuznets
  167.  * Added GetObjTypeMap() member function.
  168.  *
  169.  * Revision 1.6  2003/06/06 16:35:51  kuznets
  170.  * Added CLDS_Database::GetTables()
  171.  *
  172.  * Revision 1.5  2003/06/03 19:14:02  kuznets
  173.  * Added lds dll export/import specifications
  174.  *
  175.  * Revision 1.4  2003/06/03 14:07:46  kuznets
  176.  * Include paths changed to reflect the new directory structure
  177.  *
  178.  * Revision 1.3  2003/05/23 20:33:33  kuznets
  179.  * Bulk changes in lds library, code reorganizations, implemented top level
  180.  * objects read, metainformation persistance implemented for top level objects...
  181.  *
  182.  * Revision 1.2  2003/05/22 18:57:17  kuznets
  183.  * Work in progress
  184.  *
  185.  * Revision 1.1  2003/05/22 13:24:45  kuznets
  186.  * Initial revision
  187.  *
  188.  *
  189.  * ===========================================================================
  190.  */
  191. #endif