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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: filter.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 19:55:02  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_UTILS___FILTER__HPP
  10. #define GUI_UTILS___FILTER__HPP
  11. /*  $Id: filter.hpp,v 1000.0 2004/06/01 19:55:02 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:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    CFilterSet -- container for a number of column filtering rules
  40.  *    CFilter -- encapsulates a single filter rule
  41.  */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/gui.hpp>
  44. #include <vector>
  45. #include <string>
  46. /** @addtogroup GUI_UTILS
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. //
  52. // class CFilter defines the interface for a single filter object.
  53. // This class represents a single filter rule, where a rule is defined as a
  54. // comparison operation performed on a single entry in a row of a table.  The
  55. // API assumes that a row can be expressed as a vector of strings, one string
  56. // per column; comparisons are then done on those strings in a format defined
  57. // by the caller.  Formats supported include string and numeric comparisons.
  58. //
  59. class NCBI_GUIOBJUTILS_EXPORT CFilter : public CObject
  60. {
  61. public:
  62.     // our modes of filtering
  63.     enum EMode {
  64.         ePass,
  65.         eContains,
  66.         eDoesntContain,
  67.         eEquals,
  68.         eDoesntEqual,
  69.         eLess,
  70.         eLessEquals,
  71.         eGreater,
  72.         eGreaterEquals
  73.     };
  74.     // the type of comparison we perform (numeric vs. string)
  75.     enum ECompare {
  76.         eString,
  77.         eNumeric
  78.     };
  79.     // default ctor
  80.     CFilter(const string& name,
  81.             int col, EMode mode,
  82.             const string& data);
  83.     // apply our filter to a single row
  84.     bool Filter(const vector<string>& row,
  85.                 ECompare comp) const;
  86.     //
  87.     // accessors
  88.     //
  89.     const string&   GetName(void) const         { return m_Name; }
  90.     void            SetName(const string& s)    { m_Name = s; }
  91.     int             GetColumn(void) const       { return m_Col; }
  92.     void            SetColumn(int col)          { m_Col = col; }
  93.     EMode           GetMode(void) const         { return m_Mode; }
  94.     void            SetMode(EMode mode)         { m_Mode = mode; }
  95.     const string&   GetData(void) const         { return m_Data; }
  96.     void            SetData(const string& s)    { m_Data = s; }
  97. private:
  98.     // a name for this filter
  99.     string m_Name;
  100.     // the column we compare (-1 = unassigned)
  101.     int m_Col;
  102.     // our comparison mode
  103.     EMode m_Mode;
  104.     // what we match / don't match
  105.     string m_Data;
  106. };
  107. //
  108. // class CFilterSet is a container of filters that permits row-by-row
  109. // application of all named filters.
  110. //
  111. // This is the main interface class for filtering tables.  This class maintains
  112. // a list of filters and applies each filter sequentially to a row as the row
  113. // is supplied to it.  Given its set of filters, this container will return
  114. // 'true' to indicate a row matches all filters or 'false' to indicate that a
  115. // row fails to match at least one filter.
  116. //
  117. class NCBI_GUIOBJUTILS_EXPORT CFilterSet
  118. {
  119. public:
  120.     typedef list< CRef<CFilter> > TFilters;
  121.     // filter a given row, returning true if a match exists for all filters in
  122.     // the set
  123.     bool Filter(const vector<string>& row) const;
  124.     // add a filter to the list
  125.     void Add(CFilter* filter);
  126.     // remove a named filter
  127.     void Remove(const string& name);
  128.     // remove a filter by pointer
  129.     void Remove(CFilter* filter);
  130.     // access the filters
  131.     const TFilters& GetFilters(void) const   { return m_Filters; }
  132.     // set the sorting mechanism for a numbered column
  133.     void SetColType(size_t col, CFilter::ECompare type);
  134. private:
  135.     // a notion of how our columns are to be sorted and compared
  136.     vector<CFilter::ECompare> m_ColTypes;
  137.     // our list of named filters
  138.     TFilters m_Filters;
  139. };
  140. END_NCBI_SCOPE
  141. /* @} */
  142. /*
  143.  * ===========================================================================
  144.  * $Log: filter.hpp,v $
  145.  * Revision 1000.0  2004/06/01 19:55:02  gouriano
  146.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  147.  *
  148.  * Revision 1.2  2004/05/03 12:41:35  dicuccio
  149.  * Fixed #includes and export specifiers
  150.  *
  151.  * Revision 1.1  2004/04/30 11:52:53  dicuccio
  152.  * Split out from gui/utils
  153.  *
  154.  * Revision 1.5  2004/04/16 14:27:17  dicuccio
  155.  * Added doxygen module tag
  156.  *
  157.  * Revision 1.4  2003/09/29 15:20:08  dicuccio
  158.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  159.  *
  160.  * Revision 1.3  2003/06/23 13:18:15  dicuccio
  161.  * Use size_t instead of int for indexing
  162.  *
  163.  * Revision 1.2  2003/01/13 13:11:42  dicuccio
  164.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  165.  * Moved all FLUID-generated code into namespace ncbi.
  166.  *
  167.  * Revision 1.1  2003/01/08 15:04:09  dicuccio
  168.  * Added filter classes for filtering tables composed of rows of strings
  169.  *
  170.  * ===========================================================================
  171.  */
  172. #endif  // GUI_UTILS___FILTER__HPP