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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: annot_selector.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 17:26:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.30
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ANNOT_SELECTOR__HPP
  10. #define ANNOT_SELECTOR__HPP
  11. /*  $Id: annot_selector.hpp,v 1000.2 2004/04/12 17:26:57 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: Aleksey Grichenko, Michael Kimelman, Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Annotations selector structure.
  40. *
  41. */
  42. #include <corelib/ncbi_limits.h>
  43. #include <objects/seq/Seq_annot.hpp>
  44. #include <objects/seqfeat/SeqFeatData.hpp>
  45. #include <vector>
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(objects)
  48. class CSeq_entry;
  49. class CSeq_annot;
  50. class CSeq_entry_Handle;
  51. class CSeq_annot_Handle;
  52. class CAnnotObject_Info;
  53. class CAnnotName
  54. {
  55. public:
  56.     CAnnotName(void)
  57.         : m_Named(false)
  58.         {
  59.         }
  60.     CAnnotName(const string& name)
  61.         : m_Named(true), m_Name(name)
  62.         {
  63.         }
  64.     CAnnotName(const char* name)
  65.         : m_Named(true), m_Name(name)
  66.         {
  67.         }
  68.     bool IsNamed(void) const
  69.         {
  70.             return m_Named;
  71.         }
  72.     const string& GetName(void) const
  73.         {
  74.             _ASSERT(m_Named);
  75.             return m_Name;
  76.         }
  77.     void SetUnnamed(void)
  78.         {
  79.             m_Named = false;
  80.             m_Name.erase();
  81.         }
  82.     void SetNamed(const string& name)
  83.         {
  84.             m_Name = name;
  85.             m_Named = true;
  86.         }
  87.     bool operator<(const CAnnotName& name) const
  88.         {
  89.             return name.m_Named && (!m_Named || name.m_Name > m_Name);
  90.         }
  91.     bool operator==(const CAnnotName& name) const
  92.         {
  93.             return name.m_Named == m_Named && name.m_Name == m_Name;
  94.         }
  95.     bool operator!=(const CAnnotName& name) const
  96.         {
  97.             return name.m_Named != m_Named || name.m_Name != m_Name;
  98.         }
  99. private:
  100.     bool   m_Named;
  101.     string m_Name;
  102. };
  103. struct SAnnotTypeSelector
  104. {
  105.     typedef CSeq_annot::C_Data::E_Choice TAnnotType;
  106.     typedef CSeqFeatData::E_Choice       TFeatType;
  107.     typedef CSeqFeatData::ESubtype       TFeatSubtype;
  108.     SAnnotTypeSelector(TAnnotType annot = CSeq_annot::C_Data::e_not_set)
  109.         : m_FeatSubtype(CSeqFeatData::eSubtype_any),
  110.           m_FeatType(CSeqFeatData::e_not_set),
  111.           m_AnnotType(annot)
  112.     {
  113.     }
  114.     SAnnotTypeSelector(TFeatType  feat)
  115.         : m_FeatSubtype(CSeqFeatData::eSubtype_any),
  116.           m_FeatType(feat),
  117.           m_AnnotType(CSeq_annot::C_Data::e_Ftable)
  118.     {
  119.     }
  120.     SAnnotTypeSelector(TFeatSubtype feat_subtype)
  121.         : m_FeatSubtype(feat_subtype),
  122.           m_FeatType(CSeqFeatData::GetTypeFromSubtype(feat_subtype)),
  123.           m_AnnotType(CSeq_annot::C_Data::e_Ftable)
  124.     {
  125.     }
  126.    
  127.     TAnnotType GetAnnotType(void) const
  128.         {
  129.             return TAnnotType(m_AnnotType);
  130.         }
  131.     TFeatType GetFeatType(void) const
  132.         {
  133.             return TFeatType(m_FeatType);
  134.         }
  135.     TFeatSubtype GetFeatSubtype(void) const
  136.         {
  137.             return TFeatSubtype(m_FeatSubtype);
  138.         }
  139.     bool operator<(const SAnnotTypeSelector& s) const
  140.         {
  141.             if ( m_AnnotType != s.m_AnnotType )
  142.                 return m_AnnotType < s.m_AnnotType;
  143.             if ( m_FeatType != s.m_FeatType )
  144.                 return m_FeatType < s.m_FeatType;
  145.             return m_FeatSubtype < s.m_FeatSubtype;
  146.         }
  147.     bool operator==(const SAnnotTypeSelector& s) const
  148.         {
  149.             return m_AnnotType == s.m_AnnotType &&
  150.                 m_FeatType == s.m_FeatType &&
  151.                 m_FeatSubtype == s.m_FeatSubtype;
  152.         }
  153.     bool operator!=(const SAnnotTypeSelector& s) const
  154.         {
  155.             return m_AnnotType != s.m_AnnotType ||
  156.                 m_FeatType != s.m_FeatType ||
  157.                 m_FeatSubtype != s.m_FeatSubtype;
  158.         }
  159.     void SetAnnotType(TAnnotType type)
  160.         {
  161.             m_AnnotType = type;
  162.             // Reset feature type/subtype
  163.             if (m_AnnotType != CSeq_annot::C_Data::e_Ftable) {
  164.                 m_FeatType = CSeqFeatData::e_not_set;
  165.                 m_FeatSubtype = CSeqFeatData::eSubtype_any;
  166.             }
  167.         }
  168.     void SetFeatType(TFeatType type)
  169.         {
  170.             m_FeatType = type;
  171.             // Adjust annot type and feature subtype
  172.             m_AnnotType = CSeq_annot::C_Data::e_Ftable;
  173.             m_FeatSubtype = CSeqFeatData::eSubtype_any;
  174.         }
  175.     void SetFeatSubtype(TFeatSubtype subtype)
  176.         {
  177.             m_FeatSubtype = subtype;
  178.             // Adjust annot type and feature type
  179.             m_AnnotType = CSeq_annot::C_Data::e_Ftable;
  180.             if (m_FeatSubtype != CSeqFeatData::eSubtype_any) {
  181.                 m_FeatType =
  182.                     CSeqFeatData::GetTypeFromSubtype(GetFeatSubtype());
  183.             }
  184.         }
  185. private:
  186.     Uint2           m_FeatSubtype;  // Seq-feat subtype
  187.     Uint1           m_FeatType;   // Seq-feat type
  188.     Uint1           m_AnnotType;  // Annotation type
  189. };
  190. // Structure to select type of Seq-annot
  191. struct NCBI_XOBJMGR_EXPORT SAnnotSelector : public SAnnotTypeSelector
  192. {
  193.     // Flag to indicate location overlapping method
  194.     enum EOverlapType {
  195.         eOverlap_Intervals,  // default - overlapping of individual intervals
  196.         eOverlap_TotalRange  // overlapping of total ranges only
  197.     };
  198.     // Flag to indicate references resolution method
  199.     enum EResolveMethod {
  200.         eResolve_None, // Do not search annotations on segments
  201.         eResolve_TSE,  // default - search only on segments in the same TSE
  202.         eResolve_All   // Search annotations for all referenced sequences
  203.     };
  204.     // Flag to indicate adaptive segment selection
  205.     enum ESegmentSelect {
  206.         eSegmentSelect_All,
  207.         eSegmentSelect_First,
  208.         eSegmentSelect_Last
  209.     };
  210.     // Flag to indicate sorting method
  211.     enum ESortOrder {
  212.         eSortOrder_None,    // do not sort annotations for faster retrieval
  213.         eSortOrder_Normal,  // default - increasing start, decreasing length
  214.         eSortOrder_Reverse  // decresing end, decreasing length
  215.     };
  216.     // Flag to indicate joining feature visible through multiple segments
  217.     enum ECombineMethod {
  218.         eCombine_None,       // default - do not combine feature from segments
  219.         eCombine_All         // combine feature from different segments
  220.     };
  221.     enum EIdResolving {
  222.         eLoadedOnly,       // Resolve only ids already loaded into the scope
  223.         eIgnoreUnresolved, // Ignore unresolved ids (default)
  224.         eFailUnresolved    // Throw exception for unresolved ids
  225.     };
  226.     SAnnotSelector(TAnnotType annot = CSeq_annot::C_Data::e_not_set,
  227.                    TFeatType  feat  = CSeqFeatData::e_not_set);
  228.     SAnnotSelector(TFeatType  feat);
  229.     SAnnotSelector(TAnnotType annot, TFeatType  feat, bool feat_product);
  230.     SAnnotSelector(TFeatType  feat, bool feat_product);
  231.     SAnnotSelector(const SAnnotSelector& sel);
  232.     SAnnotSelector& operator=(const SAnnotSelector& sel);
  233.     ~SAnnotSelector(void);
  234.     
  235.     SAnnotSelector& SetAnnotType(TAnnotType type)
  236.         {
  237.             x_ClearAnnotTypesSet();
  238.             SAnnotTypeSelector::SetAnnotType(type);
  239.             return *this;
  240.         }
  241.     SAnnotSelector& SetFeatType(TFeatType type)
  242.         {
  243.             x_ClearAnnotTypesSet();
  244.             SAnnotTypeSelector::SetFeatType(type);
  245.             return *this;
  246.         }
  247.     SAnnotSelector& SetFeatSubtype(TFeatSubtype subtype)
  248.         {
  249.             x_ClearAnnotTypesSet();
  250.             SAnnotTypeSelector::SetFeatSubtype(subtype);
  251.             return *this;
  252.         }
  253.     SAnnotSelector& IncludeAnnotType(TAnnotType type);
  254.     SAnnotSelector& ExcludeAnnotType(TAnnotType type);
  255.     SAnnotSelector& IncludeFeatType(TFeatType type);
  256.     SAnnotSelector& ExcludeFeatType(TFeatType type);
  257.     SAnnotSelector& IncludeFeatSubtype(TFeatSubtype subtype);
  258.     SAnnotSelector& ExcludeFeatSubtype(TFeatSubtype subtype);
  259.     // Set type if not set yet, else do nothing.
  260.     SAnnotSelector& CheckAnnotType(TAnnotType type);
  261.     // Return true if at least one subtype of the type is included
  262.     // or selected type is not set (any).
  263.     bool IncludedAnnotType(TAnnotType type) const;
  264.     bool IncludedFeatType(TFeatType type) const;
  265.     bool IncludedFeatSubtype(TFeatSubtype subtype) const;
  266.     bool MatchType(const CAnnotObject_Info& annot_info) const;
  267.     bool GetFeatProduct(void) const
  268.         {
  269.             return m_FeatProduct;
  270.         }
  271.     SAnnotSelector& SetByProduct(bool byProduct = true)
  272.         {
  273.             m_FeatProduct = byProduct;
  274.             return *this;
  275.         }
  276.     SAnnotSelector& SetOverlapType(EOverlapType overlap_type)
  277.         {
  278.             m_OverlapType = overlap_type;
  279.             return *this;
  280.         }
  281.     SAnnotSelector& SetOverlapIntervals(void)
  282.         {
  283.             return SetOverlapType(eOverlap_Intervals);
  284.         }
  285.     SAnnotSelector& SetOverlapTotalRange(void)
  286.         {
  287.             return SetOverlapType(eOverlap_TotalRange);
  288.         }
  289.     SAnnotSelector& SetSortOrder(ESortOrder sort_order)
  290.         {
  291.             m_SortOrder = sort_order;
  292.             return *this;
  293.         }
  294.     SAnnotSelector& SetCombineMethod(ECombineMethod combine_method)
  295.         {
  296.             m_CombineMethod = combine_method;
  297.             return *this;
  298.         }
  299.     SAnnotSelector& SetResolveMethod(EResolveMethod resolve_method)
  300.         {
  301.             m_ResolveMethod = resolve_method;
  302.             return *this;
  303.         }
  304.     SAnnotSelector& SetResolveNone(void)
  305.         {
  306.             return SetResolveMethod(eResolve_None);
  307.         }
  308.     SAnnotSelector& SetResolveTSE(void)
  309.         {
  310.             return SetResolveMethod(eResolve_TSE);
  311.         }
  312.     SAnnotSelector& SetResolveAll(void)
  313.         {
  314.             return SetResolveMethod(eResolve_All);
  315.         }
  316.     SAnnotSelector& SetResolveDepth(int depth)
  317.         {
  318.             m_ResolveDepth = depth;
  319.             return *this;
  320.         }
  321.     typedef vector<SAnnotTypeSelector> TAdaptiveTriggers;
  322.     SAnnotSelector& SetAdaptiveDepth(bool value = true)
  323.         {
  324.             m_AdaptiveDepth = value;
  325.             return *this;
  326.         }
  327.     SAnnotSelector& SetAdaptiveTrigger(const SAnnotTypeSelector& sel);
  328.     // set maximum count of annotations to find
  329.     // if max_size == 0 - no limit
  330.     SAnnotSelector& SetMaxSize(size_t max_size)
  331.         {
  332.             m_MaxSize = max_size? max_size: kMax_UInt;
  333.             return *this;
  334.         }
  335.     SAnnotSelector& SetSegmentSelect(ESegmentSelect ss)
  336.         {
  337.             m_SegmentSelect = ss;
  338.             return *this;
  339.         }
  340.     SAnnotSelector& SetSegmentSelectAll(void)
  341.         {
  342.             return SetSegmentSelect(eSegmentSelect_All);
  343.         }
  344.     SAnnotSelector& SetSegmentSelectFirst(void)
  345.         {
  346.             return SetSegmentSelect(eSegmentSelect_First);
  347.         }
  348.     SAnnotSelector& SetSegmentSelectLast(void)
  349.         {
  350.             return SetSegmentSelect(eSegmentSelect_Last);
  351.         }
  352.     SAnnotSelector& SetLimitNone(void);
  353.     SAnnotSelector& SetLimitTSE(const CSeq_entry* limit);
  354.     SAnnotSelector& SetLimitSeqEntry(const CSeq_entry* limit);
  355.     SAnnotSelector& SetLimitSeqAnnot(const CSeq_annot* limit);
  356.     SAnnotSelector& SetLimitTSE(const CSeq_entry_Handle& limit);
  357.     SAnnotSelector& SetLimitSeqEntry(const CSeq_entry_Handle& limit);
  358.     SAnnotSelector& SetLimitSeqAnnot(const CSeq_annot_Handle& limit);
  359.     SAnnotSelector& SetIdResolvingLoaded(void)
  360.         {
  361.             m_IdResolving = eLoadedOnly;
  362.             return *this;
  363.         }
  364.     SAnnotSelector& SetIdResolvingIgnore(void)
  365.         {
  366.             m_IdResolving = eIgnoreUnresolved;
  367.             return *this;
  368.         }
  369.     SAnnotSelector& SetIdResolvingFail(void)
  370.         {
  371.             m_IdResolving = eFailUnresolved;
  372.             return *this;
  373.         }
  374.     typedef vector<CAnnotName> TAnnotsNames;
  375.     /// Select annotations from all Seq-annots
  376.     SAnnotSelector& ResetAnnotsNames(void);
  377.     /// Add unnamed annots to set of annots names to look for
  378.     SAnnotSelector& AddUnnamedAnnots(void);
  379.     /// Add named annot to set of annots names to look for
  380.     SAnnotSelector& AddNamedAnnots(const CAnnotName& name);
  381.     SAnnotSelector& AddNamedAnnots(const char* name);
  382.     /// Add unnamed annots to set of annots names to exclude
  383.     SAnnotSelector& ExcludeUnnamedAnnots(void);
  384.     /// Add named annot to set of annots names to exclude
  385.     SAnnotSelector& ExcludeNamedAnnots(const CAnnotName& name);
  386.     SAnnotSelector& ExcludeNamedAnnots(const char* name);
  387.     /// Look for all named Seq-annots
  388.     SAnnotSelector& SetAllNamedAnnots(void);
  389.     // Compatibility:
  390.     /// Look for named annot.
  391.     /// If name is empty ("") look for unnamed annots too.
  392.     SAnnotSelector& SetDataSource(const string& name);
  393.     // Access methods for iterator
  394.     bool IsSetAnnotsNames(void) const
  395.         {
  396.             return
  397.                 !m_IncludeAnnotsNames.empty() ||
  398.                 !m_ExcludeAnnotsNames.empty();
  399.         }
  400.     bool IncludedAnnotName(const CAnnotName& name) const;
  401.     bool ExcludedAnnotName(const CAnnotName& name) const;
  402.     // Limit search with a set of TSEs
  403.     typedef vector<CSeq_entry_Handle> TTSE_Limits;
  404.     SAnnotSelector& ExcludeTSE(const CSeq_entry_Handle& tse);
  405.     SAnnotSelector& ResetExcludedTSE(void);
  406.     bool ExcludedTSE(const CSeq_entry_Handle& tse) const;
  407.     // No locations mapping flag. Set to true by CAnnot_CI.
  408.     SAnnotSelector& SetNoMapping(bool value = true)
  409.         {
  410.             m_NoMapping = value;
  411.             return *this;
  412.         }
  413. protected:
  414.     friend class CAnnot_Collector;
  415.     static bool x_Has(const TAnnotsNames& names, const CAnnotName& name);
  416.     static void x_Add(TAnnotsNames& names, const CAnnotName& name);
  417.     static void x_Del(TAnnotsNames& names, const CAnnotName& name);
  418.     void x_InitializeAnnotTypesSet(bool default_value);
  419.     void x_ClearAnnotTypesSet(void);
  420.     typedef vector<bool> TAnnotTypesSet;
  421.     bool                  m_FeatProduct;  // "true" for searching products
  422.     int                   m_ResolveDepth;
  423.     EOverlapType          m_OverlapType;
  424.     EResolveMethod        m_ResolveMethod;
  425.     ESegmentSelect        m_SegmentSelect;
  426.     ESortOrder            m_SortOrder;
  427.     ECombineMethod        m_CombineMethod;
  428.     enum ELimitObject {
  429.         eLimit_None,
  430.         eLimit_TSE_Info,
  431.         eLimit_Seq_entry_Info,
  432.         eLimit_Seq_annot_Info,
  433.         eLimit_TSE,
  434.         eLimit_Seq_entry,
  435.         eLimit_Seq_annot
  436.     };
  437.     ELimitObject          m_LimitObjectType;
  438.     EIdResolving          m_IdResolving;
  439.     CConstRef<CObject>    m_LimitObject;
  440.     size_t                m_MaxSize; //
  441.     TAnnotsNames          m_IncludeAnnotsNames;
  442.     TAnnotsNames          m_ExcludeAnnotsNames;
  443.     bool                  m_NoMapping;
  444.     bool                  m_AdaptiveDepth;
  445.     TAdaptiveTriggers     m_AdaptiveTriggers;
  446.     TTSE_Limits           m_ExcludedTSE;
  447.     TAnnotTypesSet        m_AnnotTypesSet;
  448. };
  449. END_SCOPE(objects)
  450. END_NCBI_SCOPE
  451. /*
  452. * ---------------------------------------------------------------------------
  453. * $Log: annot_selector.hpp,v $
  454. * Revision 1000.2  2004/04/12 17:26:57  gouriano
  455. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.30
  456. *
  457. * Revision 1.30  2004/04/05 15:56:13  grichenk
  458. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  459. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  460. * inherited from SAnnotSelector.
  461. *
  462. * Revision 1.29  2004/03/17 16:03:42  vasilche
  463. * Removed Windows EOL
  464. *
  465. * Revision 1.28  2004/03/16 15:47:25  vasilche
  466. * Added CBioseq_set_Handle and set of EditHandles
  467. *
  468. * Revision 1.27  2004/02/26 14:41:40  grichenk
  469. * Fixed types excluding in SAnnotSelector and multiple types search
  470. * in CAnnotTypes_CI.
  471. *
  472. * Revision 1.26  2004/02/11 22:19:23  grichenk
  473. * Fixed annot type initialization in iterators
  474. *
  475. * Revision 1.25  2004/02/05 19:53:39  grichenk
  476. * Fixed type matching in SAnnotSelector. Added IncludeAnnotType().
  477. *
  478. * Revision 1.24  2004/02/04 18:05:31  grichenk
  479. * Added annotation filtering by set of types/subtypes.
  480. * Renamed *Choice to *Type in SAnnotSelector.
  481. *
  482. * Revision 1.23  2004/01/23 16:14:45  grichenk
  483. * Implemented alignment mapping
  484. *
  485. * Revision 1.22  2003/11/13 19:12:51  grichenk
  486. * Added possibility to exclude TSEs from annotations request.
  487. *
  488. * Revision 1.21  2003/10/09 20:20:59  vasilche
  489. * Added possibility to include and exclude Seq-annot names to annot iterator.
  490. * Fixed adaptive search. It looked only on selected set of annot names before.
  491. *
  492. * Revision 1.20  2003/10/07 13:43:22  vasilche
  493. * Added proper handling of named Seq-annots.
  494. * Added feature search from named Seq-annots.
  495. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  496. * Fixed selection of blobs for loading from GenBank.
  497. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  498. * Fixed leaked split chunks annotation stubs.
  499. * Moved some classes definitions in separate *.cpp files.
  500. *
  501. * Revision 1.19  2003/10/01 15:08:48  vasilche
  502. * Do not reset feature type if feature subtype is set to 'any'.
  503. *
  504. * Revision 1.18  2003/09/30 16:21:59  vasilche
  505. * Updated internal object manager classes to be able to load ID2 data.
  506. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  507. * Scope caches results of requests for data to data loaders.
  508. * Optimized CSeq_id_Handle for gis.
  509. * Optimized bioseq lookup in scope.
  510. * Reduced object allocations in annotation iterators.
  511. * CScope is allowed to be destroyed before other objects using this scope are
  512. * deleted (feature iterators, bioseq handles etc).
  513. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  514. * Added 'adaptive' option to objmgr_demo application.
  515. *
  516. * Revision 1.17  2003/09/16 14:21:46  grichenk
  517. * Added feature indexing and searching by subtype.
  518. *
  519. * Revision 1.16  2003/09/11 17:45:06  grichenk
  520. * Added adaptive-depth option to annot-iterators.
  521. *
  522. * Revision 1.15  2003/08/22 14:58:55  grichenk
  523. * Added NoMapping flag (to be used by CAnnot_CI for faster fetching).
  524. * Added GetScope().
  525. *
  526. * Revision 1.14  2003/07/17 21:01:43  vasilche
  527. * Fixed ambiguity on Windows
  528. *
  529. * Revision 1.13  2003/07/17 20:07:55  vasilche
  530. * Reduced memory usage by feature indexes.
  531. * SNP data is loaded separately through PUBSEQ_OS.
  532. * String compression for SNP data.
  533. *
  534. * Revision 1.12  2003/06/25 20:56:29  grichenk
  535. * Added max number of annotations to annot-selector, updated demo.
  536. *
  537. * Revision 1.11  2003/06/17 20:34:02  grichenk
  538. * Added flag to ignore sorting
  539. *
  540. * Revision 1.10  2003/04/28 14:59:58  vasilche
  541. * Added missing initialization.
  542. *
  543. * Revision 1.9  2003/04/24 16:12:37  vasilche
  544. * Object manager internal structures are splitted more straightforward.
  545. * Removed excessive header dependencies.
  546. *
  547. * Revision 1.8  2003/03/31 21:48:17  grichenk
  548. * Added possibility to select feature subtype through SAnnotSelector.
  549. *
  550. * Revision 1.7  2003/03/18 14:46:35  grichenk
  551. * Set limit object type to "none" if the object is null.
  552. *
  553. * Revision 1.6  2003/03/14 20:39:26  ucko
  554. * return *this from SetIdResolvingXxx().
  555. *
  556. * Revision 1.5  2003/03/14 19:10:33  grichenk
  557. * + SAnnotSelector::EIdResolving; fixed operator=() for several classes
  558. *
  559. * Revision 1.4  2003/03/10 16:55:16  vasilche
  560. * Cleaned SAnnotSelector structure.
  561. * Added shortcut when features are limited to one TSE.
  562. *
  563. * Revision 1.3  2003/03/05 20:56:42  vasilche
  564. * SAnnotSelector now holds all parameters of annotation iterators.
  565. *
  566. * Revision 1.2  2003/02/25 14:48:06  vasilche
  567. * Added Win32 export modifier to object manager classes.
  568. *
  569. * Revision 1.1  2003/02/24 19:36:19  vasilche
  570. * Added missing annot_selector.hpp.
  571. *
  572. *
  573. * ===========================================================================
  574. */
  575. #endif  // ANNOT_SELECTOR__HPP