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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: asn_reader.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:27:45  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: asn_reader.hpp,v 1000.2 2004/06/01 18:27:45 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. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      templates for reading/writing ASN data from/to a file, or copying
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_ASN_READER__HPP
  42. #define CN3D_ASN_READER__HPP
  43. #include <corelib/ncbistd.hpp>
  44. #include <corelib/ncbistl.hpp>
  45. #include <corelib/ncbistre.hpp>
  46. #include <serial/serial.hpp>
  47. #include <serial/objistrasn.hpp>
  48. #include <serial/objistrasnb.hpp>
  49. #include <serial/objostrasn.hpp>
  50. #include <serial/objostrasnb.hpp>
  51. #include <connect/ncbi_conn_stream.hpp>
  52. #include <connect/ncbi_core_cxx.hpp>
  53. #include <connect/ncbi_util.h>
  54. #include <string>
  55. #include <memory>
  56. #ifndef NS_AUTO_PTR
  57. #ifdef HAVE_NO_AUTO_PTR
  58. #define NS_AUTO_PTR ncbi::auto_ptr
  59. #else
  60. #define NS_AUTO_PTR std::auto_ptr
  61. #endif
  62. #endif
  63. BEGIN_SCOPE(Cn3D)
  64. // a utility function for reading different types of ASN data from a file
  65. template < class ASNClass >
  66. bool ReadASNFromFile(const char *filename, ASNClass *ASNobject, bool isBinary, std::string *err)
  67. {
  68.     err->erase();
  69.     // initialize the binary input stream
  70.     ncbi::CNcbiIfstream inStream(filename, IOS_BASE::in | IOS_BASE::binary);
  71.     if (!inStream) {
  72.         *err = "Cannot open file for reading";
  73.         return false;
  74.     }
  75.     NS_AUTO_PTR<ncbi::CObjectIStream> inObject;
  76.     if (isBinary) {
  77.         // Associate ASN.1 binary serialization methods with the input
  78.         inObject.reset(new ncbi::CObjectIStreamAsnBinary(inStream));
  79.     } else {
  80.         // Associate ASN.1 text serialization methods with the input
  81.         inObject.reset(new ncbi::CObjectIStreamAsn(inStream));
  82.     }
  83.     // Read the asn data
  84.     bool okay = true;
  85.     ncbi::SetDiagTrace(ncbi::eDT_Disable);
  86.     try {
  87.         *inObject >> *ASNobject;
  88.     } catch (std::exception& e) {
  89.         *err = e.what();
  90.         okay = false;
  91.     }
  92.     ncbi::SetDiagTrace(ncbi::eDT_Default);
  93.     inStream.close();
  94.     return okay;
  95. }
  96. // for writing ASN data
  97. template < class ASNClass >
  98. bool WriteASNToFile(const char *filename, const ASNClass& ASNobject, bool isBinary,
  99.     std::string *err, ncbi::EFixNonPrint fixNonPrint = ncbi::eFNP_Default)
  100. {
  101.     err->erase();
  102.     // initialize a binary output stream
  103.     ncbi::CNcbiOfstream outStream(filename,
  104.         isBinary ? (IOS_BASE::out | IOS_BASE::binary) : IOS_BASE::out);
  105.     if (!outStream) {
  106.         *err = "Cannot open file for writing";
  107.         return false;
  108.     }
  109.     NS_AUTO_PTR<ncbi::CObjectOStream> outObject;
  110.     if (isBinary) {
  111.         // Associate ASN.1 binary serialization methods with the input
  112.         outObject.reset(new ncbi::CObjectOStreamAsnBinary(outStream, fixNonPrint));
  113.     } else {
  114.         // Associate ASN.1 text serialization methods with the input
  115.         outObject.reset(new ncbi::CObjectOStreamAsn(outStream, fixNonPrint));
  116.     }
  117.     // write the asn data
  118.     bool okay = true;
  119.     ncbi::SetDiagTrace(ncbi::eDT_Disable);
  120.     try {
  121.         *outObject << ASNobject;
  122.         outStream.flush();
  123.     } catch (std::exception& e) {
  124.         *err = e.what();
  125.         okay = false;
  126.     }
  127.     ncbi::SetDiagTrace(ncbi::eDT_Default);
  128.     outStream.close();
  129.     return okay;
  130. }
  131. // for loading (binary) ASN data via HTTP connection
  132. template < class ASNClass >
  133. bool GetAsnDataViaHTTP(
  134.     const std::string& host, const std::string& path, const std::string& args,
  135.     ASNClass *asnObject, std::string *err,
  136.     bool binaryData = true, unsigned short port = 80)
  137. {
  138.     err->erase();
  139.     bool okay = false;
  140.     // set up registry field to set GET connection method for HTTP
  141.     ncbi::CNcbiRegistry* reg = new ncbi::CNcbiRegistry;
  142.     reg->Set(DEF_CONN_REG_SECTION, REG_CONN_DEBUG_PRINTOUT, "FALSE");
  143.     reg->Set(DEF_CONN_REG_SECTION, REG_CONN_REQ_METHOD,     "GET");
  144.     CORE_SetREG(REG_cxx2c(reg, true));
  145.     try {
  146.         // load data from stream using given URL params
  147.         ncbi::CConn_HttpStream httpStream(host, path, args, kEmptyStr, port);
  148.         NS_AUTO_PTR<ncbi::CObjectIStream> inObject;
  149.         if (binaryData)
  150.             inObject.reset(new ncbi::CObjectIStreamAsnBinary(httpStream));
  151.         else
  152.             inObject.reset(new ncbi::CObjectIStreamAsn(httpStream));
  153.         ncbi::SetDiagTrace(ncbi::eDT_Disable);
  154.         *inObject >> *asnObject;
  155.         okay = true;
  156.     } catch (std::exception& e) {
  157.         *err = e.what();
  158.     }
  159.     ncbi::SetDiagTrace(ncbi::eDT_Default);
  160.     CORE_SetREG(NULL);
  161.     return okay;
  162. }
  163. END_SCOPE(Cn3D)
  164. #endif // CN3D_ASN_READER__HPP
  165. /*
  166. * ---------------------------------------------------------------------------
  167. * $Log: asn_reader.hpp,v $
  168. * Revision 1000.2  2004/06/01 18:27:45  gouriano
  169. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  170. *
  171. * Revision 1.19  2004/05/25 17:48:19  ucko
  172. * Qualify diag-trace manipulation with ncbi::.
  173. *
  174. * Revision 1.18  2004/01/27 22:56:55  thiessen
  175. * remove auto_ptr from stream objects
  176. *
  177. * Revision 1.17  2003/10/20 16:53:54  thiessen
  178. * flush output after writing
  179. *
  180. * Revision 1.16  2003/08/22 14:33:38  thiessen
  181. * remove static decl from templates
  182. *
  183. * Revision 1.15  2003/03/19 14:43:50  thiessen
  184. * disable trace messages in object loaders for now
  185. *
  186. * Revision 1.14  2003/02/03 19:20:00  thiessen
  187. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  188. *
  189. * Revision 1.13  2002/10/25 19:00:02  thiessen
  190. * retrieve VAST alignment from vastalign.cgi on structure import
  191. *
  192. * Revision 1.12  2002/06/12 18:45:41  thiessen
  193. * more linux/gcc fixes
  194. *
  195. * Revision 1.11  2002/06/11 16:27:16  thiessen
  196. * use ncbi::auto_ptr
  197. *
  198. * Revision 1.10  2002/06/11 13:18:47  thiessen
  199. * fixes for gcc 3
  200. *
  201. * Revision 1.9  2002/05/29 23:58:06  thiessen
  202. * use text mode ostream for ascii asn
  203. *
  204. * Revision 1.8  2001/09/27 20:58:14  thiessen
  205. * add VisibleString filter option
  206. *
  207. * Revision 1.7  2001/09/24 13:16:53  thiessen
  208. * fix wxPanel issues
  209. *
  210. * Revision 1.6  2001/09/24 11:34:35  thiessen
  211. * add missing ncbi::
  212. *
  213. * Revision 1.5  2001/09/19 22:55:43  thiessen
  214. * add preliminary net import and BLAST
  215. *
  216. * Revision 1.4  2001/09/18 03:09:38  thiessen
  217. * add preliminary sequence import pipeline
  218. *
  219. * Revision 1.3  2001/07/12 17:34:22  thiessen
  220. * change domain mapping ; add preliminary cdd annotation GUI
  221. *
  222. * Revision 1.2  2000/12/22 19:25:46  thiessen
  223. * write cdd output files
  224. *
  225. * Revision 1.1  2000/12/21 23:42:24  thiessen
  226. * load structures from cdd's
  227. *
  228. */