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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: nodemap.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/04/01 21:02:06  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CORE_002] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef HTML___NODEMAP__HPP
  10. #define HTML___NODEMAP__HPP
  11. /*  $Id: nodemap.hpp,v 1000.3 2004/04/01 21:02:06 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:  Eugene Vasilchenko
  37.  *
  38.  */
  39. /// @file nodemap.hpp 
  40. /// Various tag mappers classes.
  41. #include <corelib/ncbistd.hpp>
  42. #include <html/node.hpp>
  43. /** @addtogroup TagMapper
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. class CNCBINode;
  49. struct NCBI_XHTML_EXPORT BaseTagMapper
  50. {
  51.     virtual ~BaseTagMapper(void);
  52.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const = 0;
  53. };
  54. struct NCBI_XHTML_EXPORT StaticTagMapper : public BaseTagMapper
  55. {
  56.     StaticTagMapper(CNCBINode* (*function)(void));
  57.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  58. private:
  59.     CNCBINode* (*m_Function)(void);
  60. };
  61. struct NCBI_XHTML_EXPORT StaticTagMapperByName : public BaseTagMapper
  62. {
  63.     StaticTagMapperByName(CNCBINode* (*function)(const string& name));
  64.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  65. private:
  66.     CNCBINode* (*m_Function)(const string& name);
  67. };
  68. struct NCBI_XHTML_EXPORT StaticTagMapperByData : public BaseTagMapper
  69. {
  70.     StaticTagMapperByData(CNCBINode* (*function)(void* data), void* data);
  71.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  72. private:
  73.     CNCBINode* (*m_Function)(void* data);
  74.     void* m_Data;
  75. };
  76. struct NCBI_XHTML_EXPORT StaticTagMapperByDataAndName : public BaseTagMapper
  77. {
  78.     StaticTagMapperByDataAndName(
  79.         CNCBINode* (*function)(void* data, const string& name), void* data);
  80.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  81. private:
  82.     CNCBINode* (*m_Function)(void* data, const string& name);
  83.     void* m_Data;
  84. };
  85. template<class C>
  86. struct StaticTagMapperByNode : public BaseTagMapper
  87. {
  88.     StaticTagMapperByNode(CNCBINode* (*function)(C* node));
  89.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  90. private:
  91.     CNCBINode* (*m_Function)(C* node);
  92. };
  93. template<class C>
  94. struct StaticTagMapperByNodeAndName : public BaseTagMapper
  95. {
  96.     StaticTagMapperByNodeAndName(
  97.         CNCBINode* (*function)(C* node, const string& name));
  98.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  99. private:
  100.     CNCBINode* (*m_Function)(C* node, const string& name);
  101. };
  102. template<class C, typename T>
  103. struct StaticTagMapperByNodeAndData : public BaseTagMapper
  104. {
  105.     StaticTagMapperByNodeAndData(
  106.         CNCBINode* (*function)(C* node, T data), T data);
  107.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  108. private:
  109.     CNCBINode* (*m_Function)(C* node, T data);
  110.     T m_Data;
  111. };
  112. template<class C, typename T>
  113. struct StaticTagMapperByNodeAndDataAndName : public BaseTagMapper
  114. {
  115.     StaticTagMapperByNodeAndDataAndName(
  116.         CNCBINode* (*function)(C* node, T data, const string& name), T data);
  117.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  118. private:
  119.     CNCBINode* (*m_Function)(C* node, T data, const string& name);
  120.     T m_Data;
  121. };
  122. struct NCBI_XHTML_EXPORT ReadyTagMapper : public BaseTagMapper
  123. {
  124.     ReadyTagMapper(CNCBINode* node);
  125.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  126. private:
  127.     mutable CNodeRef m_Node;
  128. };
  129. template<class C>
  130. struct TagMapper : public BaseTagMapper
  131. {
  132.     TagMapper(CNCBINode* (C::*method)(void));
  133.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  134. private:
  135.     CNCBINode* (C::*m_Method)(void);
  136. };
  137. template<class C>
  138. struct TagMapperByName : public BaseTagMapper
  139. {
  140.     TagMapperByName(CNCBINode* (C::*method)(const string& name));
  141.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  142. private:
  143.     CNCBINode* (C::*m_Method)(const string& name);
  144. };
  145. template<class C, typename T>
  146. struct TagMapperByData : public BaseTagMapper
  147. {
  148.     TagMapperByData(CNCBINode* (C::*method)(T data), T data);
  149.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  150. private:
  151.     CNCBINode* (C::*m_Method)(T data);
  152.     T m_Data;
  153. };
  154. template<class C, typename T>
  155. struct TagMapperByDataAndName : public BaseTagMapper
  156. {
  157.     TagMapperByDataAndName(
  158.         CNCBINode* (C::*method)(T data, const string& name), T data);
  159.     virtual CNCBINode* MapTag(CNCBINode* _this, const string& name) const;
  160. private:
  161.     CNCBINode* (C::*m_Method)(T data, const string& name);
  162.     T m_Data;
  163. };
  164. #include <html/nodemap.inl>
  165. inline
  166. BaseTagMapper* CreateTagMapper(CNCBINode* node)
  167. {
  168.     return new ReadyTagMapper(node);
  169. }
  170. inline
  171. BaseTagMapper* CreateTagMapper(
  172.     CNCBINode* (*function)(void))
  173. {
  174.     return new StaticTagMapper(function);
  175. }
  176. inline
  177. BaseTagMapper* CreateTagMapper(
  178.     CNCBINode* (*function)(const string& name))
  179. {
  180.     return new StaticTagMapperByName(function);
  181. }
  182. inline
  183. BaseTagMapper* CreateTagMapper(
  184.     CNCBINode* (*function)(void* data), void* data)
  185. {
  186.     return new StaticTagMapperByData(function, data);
  187. }
  188. inline
  189. BaseTagMapper* CreateTagMapper(
  190.     CNCBINode* (*function)(void* data, const string& name), void* data)
  191. {
  192.     return new StaticTagMapperByDataAndName(function, data);
  193. }
  194. template<class C>
  195. BaseTagMapper* CreateTagMapper(CNCBINode* (*function)(C* node))
  196. {
  197.     return new StaticTagMapperByNode<C>(function);
  198. }
  199. template<class C>
  200. BaseTagMapper* CreateTagMapper(
  201.     CNCBINode* (*function)(C* node, const string& name))
  202. {
  203.     return new StaticTagMapperByNodeAndName<C>(function);
  204. }
  205. template<class C, typename T>
  206. BaseTagMapper* CreateTagMapper(
  207.     CNCBINode* (*function)(C* node, T data), T data)
  208. {
  209.     return new StaticTagMapperByNodeAndData<C,T>(function, data);
  210. }
  211. template<class C, typename T>
  212. BaseTagMapper* CreateTagMapper(
  213.     CNCBINode* (*function)(C* node, T data, const string& name), T data)
  214. {
  215.     return new StaticTagMapperByNodeAndDataAndName<C,T>(function, data);
  216. }
  217. template<class C>
  218. BaseTagMapper* CreateTagMapper(const C*, CNCBINode* (C::*method)(void))
  219. {
  220.     return new TagMapper<C>(method);
  221. }
  222. template<class C>
  223. BaseTagMapper* CreateTagMapper(
  224.     const C*, CNCBINode* (C::*method)(const string& name))
  225. {
  226.     return new TagMapperByName<C>(method);
  227. }
  228. template<class C, typename T>
  229. BaseTagMapper* CreateTagMapper(CNCBINode* (C::*method)(T data), T data)
  230. {
  231.     return new TagMapperByData<C,T>(method, data);
  232. }
  233. template<class C, typename T>
  234. BaseTagMapper* CreateTagMapper(
  235.     CNCBINode* (C::*method)(T data, const string& name), T data)
  236. {
  237.     return new TagMapperByDataAndName<C,T>(method, data);
  238. }
  239. END_NCBI_SCOPE
  240. /* @} */
  241. /*
  242.  * ===========================================================================
  243.  * $Log: nodemap.hpp,v $
  244.  * Revision 1000.3  2004/04/01 21:02:06  gouriano
  245.  * PRODUCTION: UPGRADED [CORE_002] Dev-tree R1.15
  246.  *
  247.  * Revision 1.15  2004/02/02 14:14:15  ivanov
  248.  * Added TagMapper to functons and class methods which used a data parameter
  249.  *
  250.  * Revision 1.14  2004/01/16 15:12:32  ivanov
  251.  * Minor cosmetic changes
  252.  *
  253.  * Revision 1.13  2003/11/05 18:41:06  dicuccio
  254.  * Added export specifiers
  255.  *
  256.  * Revision 1.12  2003/11/03 17:02:53  ivanov
  257.  * Some formal code rearrangement. Move log to end.
  258.  *
  259.  * Revision 1.11  2003/04/25 13:45:35  siyan
  260.  * Added doxygen groupings
  261.  *
  262.  * Revision 1.10  1999/10/28 13:40:31  vasilche
  263.  * Added reference counters to CNCBINode.
  264.  *
  265.  * Revision 1.9  1999/09/03 21:27:28  vakatov
  266.  * + #include <memory>
  267.  *
  268.  * Revision 1.8  1999/07/08 18:05:13  vakatov
  269.  * Fixed compilation warnings
  270.  *
  271.  * Revision 1.7  1999/05/28 16:32:10  vasilche
  272.  * Fixed memory leak in page tag mappers.
  273.  *
  274.  * Revision 1.6  1999/04/27 14:49:58  vasilche
  275.  * Added FastCGI interface.
  276.  * CNcbiContext renamed to CCgiContext.
  277.  *
  278.  * Revision 1.5  1998/12/28 20:29:13  vakatov
  279.  * New CVS and development tree structure for the NCBI C++ projects
  280.  *
  281.  * Revision 1.4  1998/12/24 16:15:37  vasilche
  282.  * Added CHTMLComment class.
  283.  * Added TagMappers from static functions.
  284.  *
  285.  * Revision 1.3  1998/12/23 21:20:59  vasilche
  286.  * Added more HTML tags (almost all).
  287.  * Importent ones: all lists (OL, UL, DIR, MENU), fonts (FONT, BASEFONT).
  288.  *
  289.  * Revision 1.2  1998/12/22 16:39:11  vasilche
  290.  * Added ReadyTagMapper to map tags to precreated nodes.
  291.  *
  292.  * Revision 1.1  1998/12/21 22:24:58  vasilche
  293.  * A lot of cleaning.
  294.  *
  295.  * ===========================================================================
  296.  */
  297. #endif  /* HTML___NODEMAP__HPP */