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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: lds_coreobjreader.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 21:01:19  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef LDS_COREOBJREADER_HPP__
  10. #define LDS_COREOBJREADER_HPP__
  11. /*  $Id: lds_coreobjreader.hpp,v 1000.0 2003/10/29 21:01:19 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: Core bio objects reader.
  39.  *
  40.  */
  41. #include <objmgr/util/obj_sniff.hpp>
  42. #include <stack>
  43. BEGIN_NCBI_SCOPE
  44. BEGIN_SCOPE(objects)
  45. //////////////////////////////////////////////////////////////////
  46. //
  47. // Try and fail parser, used for discovery of files structure.
  48. //
  49. class CLDS_CoreObjectsReader : public CObjectsSniffer
  50. {
  51. public:
  52.     CLDS_CoreObjectsReader();
  53.     // Event function called when parser finds a top level object
  54.     virtual void OnTopObjectFoundPre(const CObjectInfo& object, 
  55.                                      size_t stream_offset);
  56.     // Event function alled after top object deserialization
  57.     virtual void OnTopObjectFoundPost(const CObjectInfo& object);
  58.     // Overload from CObjectsSniffer
  59.     virtual void OnObjectFoundPre(const CObjectInfo& object, 
  60.                                   size_t stream_offset);
  61.     // Overload from CObjectsSniffer
  62.     virtual void OnObjectFoundPost(const CObjectInfo& object);
  63.     // Overload from CObjectsSniffer
  64.     virtual void Reset();
  65. public:
  66.     struct SObjectDetails
  67.     {
  68.         CObjectInfo   info;
  69.         size_t        offset;
  70.         size_t        parent_offset;
  71.         size_t        top_level_offset;
  72.         bool          is_top_level;
  73.         int           ext_id;  // Database id or any other external id
  74.         SObjectDetails(const  CObjectInfo& object_info,
  75.                        size_t stream_offset,
  76.                        size_t p_offset,
  77.                        size_t top_offset,
  78.                        bool   is_top)
  79.         : info(object_info),
  80.           offset(stream_offset),
  81.           parent_offset(p_offset),
  82.           top_level_offset(top_offset),
  83.           is_top_level(is_top),
  84.           ext_id(0)
  85.         {}
  86.     };
  87.     typedef vector<SObjectDetails>    TObjectVector;
  88.     // Find object information based on the stream offset.
  89.     // Return NULL if not found.
  90.     SObjectDetails* FindObjectInfo(size_t stream_offset);
  91.     TObjectVector& GetObjectsVector() { return m_Objects; }
  92.     void ClearObjectsVector() { m_Objects.clear(); }
  93. protected:
  94.     struct SObjectParseDescr
  95.     {
  96.         const CObjectInfo*  object_info;
  97.         size_t              stream_offset;
  98.         SObjectParseDescr(const CObjectInfo* oi,
  99.                           size_t offset)
  100.         : object_info(oi),
  101.           stream_offset(offset)
  102.         {}
  103.         SObjectParseDescr() 
  104.         : object_info(0),
  105.           stream_offset(0)
  106.         {}
  107.     };
  108.     typedef stack<SObjectParseDescr>  TParseStack;
  109. protected:
  110.     // Find object in the objects vector (m_Objects) by the stream 
  111.     // offset. Returns objects' index in vector, -1 if "not found".
  112.     // This function works on the fact that only one object can 
  113.     // be found in one particular offset, and offset udentifies any
  114.     // object unqiely in its file.
  115.     int FindObject(size_t stream_offset);
  116. private:
  117.     TParseStack         m_Stack;
  118.     SObjectParseDescr   m_TopDescr;
  119.     TObjectVector       m_Objects;
  120. };
  121. END_SCOPE(objects)
  122. END_NCBI_SCOPE
  123. /*
  124.  * ===========================================================================
  125.  * $Log: lds_coreobjreader.hpp,v $
  126.  * Revision 1000.0  2003/10/29 21:01:19  gouriano
  127.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.7
  128.  *
  129.  * Revision 1.7  2003/10/09 16:43:05  kuznets
  130.  * +ClearObjectsVector()
  131.  *
  132.  * Revision 1.6  2003/10/07 20:44:44  kuznets
  133.  * + Reset() method
  134.  *
  135.  * Revision 1.5  2003/06/03 14:07:46  kuznets
  136.  * Include paths changed to reflect the new directory structure
  137.  *
  138.  * Revision 1.4  2003/05/30 20:31:51  kuznets
  139.  * Added SObjectDetails::ext_id (database id)
  140.  *
  141.  * Revision 1.2  2003/05/23 20:33:33  kuznets
  142.  * Bulk changes in lds library, code reorganizations, implemented top level
  143.  * objects read, metainformation persistance implemented for top level objects...
  144.  *
  145.  * Revision 1.1  2003/05/22 18:57:17  kuznets
  146.  * Work in progress
  147.  *
  148.  * ===========================================================================
  149.  */
  150. #endif