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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: graph.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:55:07  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OBJUTILS___GRAPH__HPP
  10. #define GUI_OBJUTILS___GRAPH__HPP
  11. /*  $Id: graph.hpp,v 1000.0 2004/06/01 19:55:07 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:  Vlad Lebedev
  37.  *
  38.  * File Description:
  39.  *   CLayoutGraph -- utility class to layout grphs and hold CSeqGraph objects
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/gui.hpp>
  43. #include <gui/objutils/layout.hpp>
  44. #include <objects/seqloc/Seq_interval.hpp>
  45. #include <objmgr/graph_ci.hpp>
  46. /** @addtogroup GUI_OBJUTILS
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. class NCBI_GUIOBJUTILS_EXPORT CLayoutGraph : public CLayoutObject
  52. {
  53. public:
  54.     // ctors
  55.     CLayoutGraph(const objects::CMappedGraph& graph);
  56.     // Access the graph as a CObject
  57.     const CObject* GetObject(TSeqPos pos) const;
  58.     
  59.     bool HasObject(const CObject* obj) const;
  60.     // Access the alignments's remapped location
  61.     const objects::CSeq_loc&      GetLocation(void) const;
  62.     const objects::CMappedGraph&  GetGraph(void) const;
  63.     // retrieve the type of this object
  64.     EType GetType() const;
  65.     //
  66.     // pure virtual requirements
  67.     //    
  68.     // Comparators
  69.     bool LessByPos (const CLayoutObject& obj) const;
  70.     bool LessBySize(const CLayoutObject& obj) const;
  71. protected:
  72.     // actual graph information
  73.     //CConstRef<CMappedGraph>  m_SeqGraph;
  74.     objects::CMappedGraph m_SeqGraph;
  75. };
  76. inline
  77. bool CLayoutGraph::LessByPos(const CLayoutObject& obj) const
  78. {
  79.     TSeqRange r0 = GetLocation().GetTotalRange();
  80.     TSeqRange r1 = obj.GetLocation().GetTotalRange();
  81.     return (r0.GetFrom() < r1.GetFrom());
  82. }
  83. inline
  84. bool CLayoutGraph::LessBySize(const CLayoutObject& obj) const
  85. {
  86.     TSeqRange r0 = GetLocation().GetTotalRange();
  87.     TSeqRange r1 = obj.GetLocation().GetTotalRange();
  88.     return (r0.GetLength() < r1.GetLength());
  89. }
  90. inline
  91. const CObject* CLayoutGraph::GetObject(TSeqPos pos) const
  92. {
  93.     TSeqRange r = GetLocation().GetTotalRange();
  94.     if (pos >= r.GetFrom()  &&  pos <= r.GetTo()) {
  95.         return &m_SeqGraph.GetMappedGraph();
  96.     }
  97.     return NULL;
  98. }
  99. inline
  100. bool CLayoutGraph::HasObject(const CObject* obj) const
  101. {
  102.     return &m_SeqGraph.GetMappedGraph() == obj;
  103. }
  104. inline
  105. const objects::CMappedGraph& CLayoutGraph::GetGraph(void) const
  106. {
  107.     return m_SeqGraph;
  108. }
  109. inline
  110. const objects::CSeq_loc& CLayoutGraph::GetLocation(void) const
  111. {
  112.     return m_SeqGraph.GetLoc();
  113. }
  114. inline
  115. CLayoutGraph::EType CLayoutGraph::GetType() const
  116. {
  117.     return eGraph;
  118. }
  119. END_NCBI_SCOPE
  120. /* @} */
  121. /*
  122.  * ===========================================================================
  123.  * $Log: graph.hpp,v $
  124.  * Revision 1000.0  2004/06/01 19:55:07  gouriano
  125.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4
  126.  *
  127.  * Revision 1.4  2004/05/14 14:24:47  dicuccio
  128.  * Added new pure virtual requirement on CLayoutObject(): GetType(), returns enum
  129.  * defined in CLayoutObject
  130.  *
  131.  * Revision 1.3  2004/05/03 13:34:54  dicuccio
  132.  * FIxed include guards, doxygen groups
  133.  *
  134.  * Revision 1.2  2004/05/03 12:41:35  dicuccio
  135.  * Fixed #includes and export specifiers
  136.  *
  137.  * Revision 1.1  2004/04/30 11:52:53  dicuccio
  138.  * Split out from gui/utils
  139.  *
  140.  * Revision 1.7  2004/04/16 14:27:17  dicuccio
  141.  * Added doxygen module tag
  142.  *
  143.  * Revision 1.6  2004/04/15 12:57:43  lebedev
  144.  * Changed GetObject to return NULL or const pointer based on given position
  145.  *
  146.  * Revision 1.5  2004/03/11 17:20:23  dicuccio
  147.  * Use gui/gui instead of gui/types.  Use TSeqRange instead of TRange
  148.  *
  149.  * Revision 1.4  2003/09/29 15:20:08  dicuccio
  150.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  151.  *
  152.  * Revision 1.3  2003/08/22 15:57:11  dicuccio
  153.  * Removed 'USING_SCOPE(objects)'.  Removed export specifier from inline structs
  154.  *
  155.  * Revision 1.2  2003/08/18 14:53:26  dicuccio
  156.  * Changed nales: CFeature -> CLayoutFeat; CAlignment -> CLayoutAlign; CGraph ->
  157.  * CLayoutGraph; CProtProduct -> CLayoutProtProd.
  158.  * Removed USING_SCOPE(objects);
  159.  *
  160.  * Revision 1.1  2003/07/29 13:38:54  lebedev
  161.  * Initial revision
  162.  *
  163.  * ===========================================================================
  164.  */
  165. #endif  // GUI_OBJUTILS___GRAPH__HPP