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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cav_asnio.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:57:21  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cav_asnio.hpp,v 1000.0 2003/10/29 20:57:21 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. *      template for reading/writing ASN data of any type from/to a file
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CAV_ASN_IO__HPP
  42. #define CAV_ASN_IO__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 <string>
  52. BEGIN_NCBI_SCOPE
  53. // a utility function for reading different types of ASN data from a file
  54. template < class ASNClass >
  55. bool ReadASNFromIstream(CNcbiIstream& inStream, ASNClass& ASNobject, bool isBinary, string& err)
  56. {
  57.     auto_ptr<CObjectIStream> inObject;
  58.     if (isBinary) {
  59.         // Associate ASN.1 binary serialization methods with the input
  60.         inObject.reset(new CObjectIStreamAsnBinary(inStream));
  61.     } else {
  62.         // Associate ASN.1 text serialization methods with the input
  63.         inObject.reset(new CObjectIStreamAsn(inStream));
  64.     }
  65.     // Read the data
  66.     try {
  67.         err.erase();
  68.         *inObject >> ASNobject;
  69.     } catch (exception& e) {
  70.         err = e.what();
  71.         return false;
  72.     }
  73.     return true;
  74. }
  75. // for writing ASN data
  76. template < class ASNClass >
  77. bool WriteASNToFile(const char *filename, ASNClass& mime, bool isBinary, string& err)
  78. {
  79.     // initialize a binary output stream
  80.     auto_ptr<CNcbiOstream> outStream;
  81.     outStream.reset(new CNcbiOfstream(filename, IOS_BASE::out | IOS_BASE::binary));
  82.     if (!(*outStream)) {
  83.         err = "Cannot open file for writing";
  84.         return false;
  85.     }
  86.     auto_ptr<CObjectOStream> outObject;
  87.     if (isBinary) {
  88.         // Associate ASN.1 binary serialization methods with the input
  89.         outObject.reset(new CObjectOStreamAsnBinary(*outStream));
  90.     } else {
  91.         // Associate ASN.1 text serialization methods with the input
  92.         outObject.reset(new CObjectOStreamAsn(*outStream));
  93.     }
  94.     // Read the CNcbi_mime_asn1 data
  95.     try {
  96.         *outObject << mime;
  97.     } catch (exception& e) {
  98.         err = e.what();
  99.         return false;
  100.     }
  101.     return true;
  102. }
  103. END_NCBI_SCOPE
  104. #endif // CAV_ASN_IO__HPP
  105. /*
  106. * ---------------------------------------------------------------------------
  107. * $Log: cav_asnio.hpp,v $
  108. * Revision 1000.0  2003/10/29 20:57:21  gouriano
  109. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  110. *
  111. * Revision 1.1  2003/03/19 19:05:31  thiessen
  112. * move again
  113. *
  114. * Revision 1.1  2003/03/19 05:33:43  thiessen
  115. * move to src/app/cddalignview
  116. *
  117. * Revision 1.6  2003/02/03 17:52:03  thiessen
  118. * move CVS Log to end of file
  119. *
  120. * Revision 1.5  2003/01/21 12:31:55  thiessen
  121. * move includes into src dir
  122. *
  123. * Revision 1.4  2001/01/25 20:18:39  thiessen
  124. * fix in-memory asn read/write
  125. *
  126. * Revision 1.3  2001/01/25 00:50:51  thiessen
  127. * add command-line args; can read asn data from stdin
  128. *
  129. * Revision 1.2  2001/01/22 15:54:11  thiessen
  130. * correctly set up ncbi namespacing
  131. *
  132. * Revision 1.1  2001/01/22 13:15:52  thiessen
  133. * initial checkin
  134. *
  135. */