1 /* $Id: best_feat_finder.hpp 294361 2011-05-23 17:12:56Z kornbluh $ 2 * =========================================================================== 3 * 4 * PUBLIC DOMAIN NOTICE 5 * National Center for Biotechnology Information 6 * 7 * This software/database is a "United States Government Work" under the 8 * terms of the United States Copyright Act. It was written as part of 9 * the author's official duties as a United States Government employee and 10 * thus cannot be copyrighted. This software/database is freely available 11 * to the public for use. The National Library of Medicine and the U.S. 12 * Government have not placed any restriction on its use or reproduction. 13 * 14 * Although all reasonable efforts have been taken to ensure the accuracy 15 * and reliability of the software and data, the NLM and the U.S. 16 * Government do not and cannot warrant the performance or results that 17 * may be obtained by using this software or data. The NLM and the U.S. 18 * Government disclaim all warranties, express or implied, including 19 * warranties of performance, merchantability or fitness for any particular 20 * purpose. 21 * 22 * Please cite the author in any work or product based on this material. 23 * 24 * =========================================================================== 25 * 26 * Author: Michael Kornbluh 27 * 28 * File Description: 29 * stores feats for efficient retrieval in finding the best one. 30 * 31 */ 32 33 #ifndef BEST_FEAT_FINDER__HPP 34 #define BEST_FEAT_FINDER__HPP 35 36 #include <map> 37 #include <corelib/ncbiobj.hpp> 38 39 BEGIN_NCBI_SCOPE 40 BEGIN_SCOPE(objects) // namespace ncbi::objects:: 41 42 class CSeq_feat; 43 class CSeq_loc; 44 45 // ============================================================================ 46 class CBestFeatFinder 47 // ============================================================================ 48 { 49 public: 50 CBestFeatFinder(void); 51 52 // returns true if successfully added 53 bool AddFeat( const CSeq_feat& new_cds ); 54 55 // Finds the feat that overlaps the given location with the fewest extra bases. 56 CConstRef<CSeq_feat> FindBestFeatForLoc( const CSeq_loc &sought_loc ) const; 57 // Same as previous, but allows you to pass start/stop integers rather than having 58 // to construct a CSeq_interval object. 59 CConstRef<CSeq_feat> FindBestFeatForLoc( const int start_pos, const int stop_pos ) const; 60 61 private: 62 63 class CSeqLocSort { 64 public: 65 bool operator()( const CConstRef<CSeq_loc> &loc1, const CConstRef<CSeq_loc> &loc2 ) const; 66 }; 67 68 typedef std::multimap< CConstRef<CSeq_loc>, CConstRef<CSeq_feat>, CSeqLocSort > TLocToFeatMap; 69 TLocToFeatMap loc_to_feat_map; 70 }; 71 72 END_SCOPE(objects) 73 END_NCBI_SCOPE 74 75 #endif // BEST_CDS_FINDER__HPP 76