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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: search_opts.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:06:55  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: search_opts.cpp,v 1000.2 2004/06/01 18:06:55 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Kevin Bealer
  35.  *
  36.  */
  37. /** @file search_opts.cpp
  38.  * Search-related options for remote_blast.
  39.  */
  40. static char const rcsid[] = 
  41.     "$Id: search_opts.cpp,v 1000.2 2004/06/01 18:06:55 gouriano Exp $";
  42. #include <ncbi_pch.hpp>
  43. #include "search_opts.hpp"
  44. BEGIN_NCBI_SCOPE
  45. USING_SCOPE(objects);
  46. bool trace_blast_api = false;
  47. //--------------------------------------------------------------------
  48. //  Structures and Prototypes
  49. //--------------------------------------------------------------------
  50. // Functor for option reading
  51. class COptionReader : public COptionWalker
  52. {
  53. public:
  54.     COptionReader(const CArgs & args)
  55.         : m_args(args)
  56.     {
  57.     }
  58.     
  59.     template <class ValueT, class MethodT, class OptsT>
  60.     void Same(ValueT    & valobj,
  61.                CUserOpt   user_opt,
  62.                MethodT,
  63.                CArgKey,
  64.                COptDesc,
  65.                OptsT    &)
  66.     {
  67.         ReadOpt(m_args, valobj, user_opt);
  68.     }
  69.     
  70.     template <class T>
  71.     void Local(T          & valobj,
  72.                CUserOpt   user_opt,
  73.                CArgKey,
  74.                COptDesc)
  75.     {
  76.         ReadOpt(m_args, valobj, user_opt);
  77.     }
  78.     
  79.     template <class ValueT, class MethodT, class OptsT>
  80.     void Remote(ValueT &,
  81.                 MethodT,
  82.                 OptsT &)
  83.     {
  84.     }
  85.     
  86.     bool NeedRemote(void)
  87.     {
  88.         return false;
  89.     }
  90.     
  91. private:
  92.     const CArgs & m_args;
  93. };
  94. CNetblastSearchOpts::CNetblastSearchOpts(const ncbi::CArgs & a)
  95. {
  96.     COptionReader optrd(a);
  97.     Apply(optrd);
  98. }
  99. class CInterfaceBuilder : public COptionWalker
  100. {
  101. public:
  102.     CInterfaceBuilder(CArgDescriptions & ui)
  103.         : m_ui(ui)
  104.     {}
  105.     
  106.     template <class ValueT, class MethodT, class OptsT>
  107.     void Same(ValueT   & valobj,
  108.               CUserOpt   user_opt,
  109.               MethodT,
  110.               CArgKey    arg_key,
  111.               COptDesc   descr,
  112.               OptsT    &)
  113.     {
  114.         AddOpt(m_ui, valobj, user_opt, arg_key, descr);
  115.     }
  116.     
  117.     template <class T> void
  118.     Local(T        & valobj,
  119.           CUserOpt   user_opt,
  120.           CArgKey    arg_key,
  121.           COptDesc   descr)
  122.     {
  123.         AddOpt(m_ui, valobj, user_opt, arg_key, descr);
  124.     }
  125.     
  126.     template <class ValueT, class MethodT, class OptsT>
  127.     void Remote(ValueT &,
  128.                 MethodT,
  129.                 OptsT &)
  130.     {
  131.     }
  132.     
  133.     bool NeedRemote(void) { return false; }
  134.     
  135. private:
  136.     CArgDescriptions & m_ui;
  137. };
  138. void CNetblastSearchOpts::x_CreateInterface2(CArgDescriptions & ui)
  139. {
  140.     CInterfaceBuilder make_ui(ui);
  141.     Apply(make_ui);
  142. }
  143. //--------------------------------------------------------------------
  144. // Helper functions
  145. //--------------------------------------------------------------------
  146. void CNetblastSearchOpts::CreateInterface(CArgDescriptions & ui)
  147. {
  148.     CNetblastSearchOpts dummy;
  149.     dummy.x_CreateInterface2(ui);
  150. }
  151. // AddOpt
  152. void COptionWalker::AddOpt(CArgDescriptions & ui,
  153.                            TOptBool         &,
  154.                            const char       * name,
  155.                            const char       * synop,
  156.                            const char       * comment)
  157. {
  158.     ui.AddOptionalKey(name, synop, comment, CArgDescriptions::eBoolean);
  159. }
  160. void COptionWalker::AddOpt(CArgDescriptions & ui,
  161.                            TOptDouble       &,
  162.                            const char       * name,
  163.                            const char       * synop,
  164.                            const char       * comment)
  165. {
  166.     ui.AddOptionalKey(name, synop, comment, CArgDescriptions::eDouble);
  167. }
  168. void COptionWalker::AddOpt(CArgDescriptions & ui,
  169.                            TOptInteger      &,
  170.                            const char       * name,
  171.                            const char       * synop,
  172.                            const char       * comment)
  173. {
  174.     ui.AddOptionalKey(name, synop, comment, CArgDescriptions::eInteger);
  175. }
  176. void COptionWalker::AddOpt(CArgDescriptions & ui,
  177.                            TOptString       &,
  178.                            const char       * name,
  179.                            const char       * synop,
  180.                            const char       * comment)
  181. {
  182.     ui.AddOptionalKey(name, synop, comment, CArgDescriptions::eString);
  183. }
  184. // ReadOpt
  185. void COptionWalker::ReadOpt(const ncbi::CArgs & args,
  186.                             TOptDouble        & field,
  187.                             const char        * key)
  188. {
  189.     field = CheckArgsDouble(args[key]);
  190. }
  191. void COptionWalker::ReadOpt(const ncbi::CArgs & args,
  192.                             TOptBool          & field,
  193.                             const char        * key)
  194. {
  195.     field = CheckArgsBool(args[key]);
  196. }
  197. void COptionWalker::ReadOpt(const ncbi::CArgs & args,
  198.                             TOptInteger       & field,
  199.                             const char        * key)
  200. {
  201.     field = CheckArgsInteger(args[key]);
  202. }
  203. void COptionWalker::ReadOpt(const ncbi::CArgs & args,
  204.                             TOptString        & field,
  205.                             const char        * key)
  206. {
  207.     field = CheckArgsString(args[key]);
  208. }
  209. END_NCBI_SCOPE
  210. /*
  211.  * ===========================================================================
  212.  *
  213.  * $Log: search_opts.cpp,v $
  214.  * Revision 1000.2  2004/06/01 18:06:55  gouriano
  215.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  216.  *
  217.  * Revision 1.6  2004/05/21 21:41:03  gorelenk
  218.  * Added PCH ncbi_pch.hpp
  219.  *
  220.  * Revision 1.5  2004/05/19 14:52:02  camacho
  221.  * 1. Added doxygen tags to enable doxygen processing of algo/blast/core
  222.  * 2. Standardized copyright, CVS $Id string, $Log and rcsid formatting and i
  223.  *    location
  224.  * 3. Added use of @todo doxygen keyword
  225.  *
  226.  * Revision 1.4  2004/04/15 21:18:56  bealer
  227.  * - Remove semi-colons so that solaris compiler will not choke.
  228.  *
  229.  * Revision 1.3  2004/03/22 20:46:22  bealer
  230.  * - Fix non-literate comments to look less like doxygen comments.
  231.  *
  232.  * Revision 1.2  2004/03/18 13:49:04  camacho
  233.  * Correct use of namespaces
  234.  *
  235.  * Revision 1.1  2004/02/18 17:04:42  bealer
  236.  * - Adapt blast_client code for Remote Blast API, merging code into the
  237.  *   remote_blast demo application.
  238.  *
  239.  * ===========================================================================
  240.  */