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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: exceptions.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:39:22  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef DATATOOL_EXCEPTIONS_HPP
  10. #define DATATOOL_EXCEPTIONS_HPP
  11. /*  $Id: exceptions.hpp,v 1000.1 2004/06/01 19:39:22 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. * File Description:
  39. *   datatool exceptions
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: exceptions.hpp,v $
  43. * Revision 1000.1  2004/06/01 19:39:22  gouriano
  44. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  45. *
  46. * Revision 1.9  2004/05/12 18:33:23  gouriano
  47. * Added type conversion check (when using _type DEF file directive)
  48. *
  49. * Revision 1.8  2004/04/30 11:27:14  kuznets
  50. * Use THROWS macro to specify exceptions
  51. *
  52. * Revision 1.7  2003/03/10 18:53:15  gouriano
  53. * use new structured exceptions (based on CException)
  54. *
  55. * Revision 1.6  2000/04/07 19:26:08  vasilche
  56. * Added namespace support to datatool.
  57. * By default with argument -oR datatool will generate objects in namespace
  58. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  59. * Datatool's classes also moved to NCBI namespace.
  60. *
  61. * Revision 1.5  2000/03/16 17:43:54  vasilche
  62. * Added missing forward declaration.
  63. *
  64. * Revision 1.4  2000/03/16 17:41:13  vasilche
  65. * Missing USING_NCBI_SCOPE
  66. *
  67. * Revision 1.3  2000/03/16 17:27:02  vasilche
  68. * Added missing include <stdexcept>
  69. *
  70. * Revision 1.2  2000/03/15 21:23:59  vasilche
  71. * Error diagnostic about ambiguous types made more clear.
  72. *
  73. * Revision 1.1  2000/02/01 21:46:17  vasilche
  74. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  75. * Removed CMemberInfo subclasses.
  76. * Added support for DEFAULT/OPTIONAL members.
  77. * Changed class generation.
  78. * Moved datatool headers to include/internal/serial/tool.
  79. *
  80. * Revision 1.3  1999/11/15 19:36:14  vasilche
  81. * Fixed warnings on GCC
  82. *
  83. * ===========================================================================
  84. */
  85. #include <corelib/ncbistd.hpp>
  86. #include <corelib/ncbiexpt.hpp>
  87. #include <stdexcept>
  88. #include <list>
  89. BEGIN_NCBI_SCOPE
  90. class CDataType;
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CDatatoolException - datatool exceptions
  93. class CDatatoolException : public CException
  94. {
  95. public:
  96.     enum EErrCode {
  97.         eNotImplemented,
  98.         eWrongInput,
  99.         eInvalidData,
  100.         eIllegalCall,
  101.         eForbidden
  102.     };
  103.     virtual const char* GetErrCodeString(void) const
  104.     {
  105.         switch (GetErrCode()) {
  106.         case eNotImplemented: return "eNotImplemented";
  107.         case eWrongInput:     return "eWrongInput";
  108.         case eInvalidData:    return "eInvalidData";
  109.         case eIllegalCall:    return "eIllegalCall";
  110.         case eForbidden:      return "eForbidden";
  111.         default:              return CException::GetErrCodeString();
  112.         }
  113.     }
  114.     NCBI_EXCEPTION_DEFAULT(CDatatoolException,CException);
  115. };
  116. class CNotFoundException : public CDatatoolException
  117. {
  118. public:
  119.     enum EErrCode {
  120.         eType,
  121.         eModule
  122.     };
  123.     virtual const char* GetErrCodeString(void) const
  124.     {
  125.         switch (GetErrCode()) {
  126.         case eType:   return "eType";
  127.         case eModule: return "eModule";
  128.         default:      return CException::GetErrCodeString();
  129.         }
  130.     }
  131.     NCBI_EXCEPTION_DEFAULT(CNotFoundException,CDatatoolException);
  132. };
  133. class CAmbiguiousTypes : public CNotFoundException
  134. {
  135. public:
  136.     enum EErrCode {
  137.         eAmbiguious
  138.     };
  139.     virtual const char* GetErrCodeString(void) const
  140.     {
  141.         switch (GetErrCode()) {
  142.         case eAmbiguious:    return "eAmbiguious";
  143.         default:       return CException::GetErrCodeString();
  144.         }
  145.     }
  146.     CAmbiguiousTypes(const char* file,int line,
  147.         const CException* prev_exception,
  148.         EErrCode err_code,const string& message,
  149.         const list<CDataType*>& types) throw()
  150.         : CNotFoundException(file, line, prev_exception,
  151.             (CNotFoundException::EErrCode) CException::eInvalid,
  152.             message), m_Types(types)
  153.     NCBI_EXCEPTION_DEFAULT_IMPLEMENTATION(CAmbiguiousTypes, CNotFoundException);
  154. public:
  155.     const list<CDataType*>& GetTypes(void) const throw()
  156.     {
  157.         return m_Types;
  158.     }
  159. private:
  160.     list<CDataType*> m_Types;
  161. };
  162. class CResolvedTypeSet
  163. {
  164. public:
  165.     CResolvedTypeSet(const string& name);
  166.     CResolvedTypeSet(const string& module, const string& name);
  167.     ~CResolvedTypeSet(void);
  168.     void Add(CDataType* type);
  169.     void Add(const CAmbiguiousTypes& types);
  170.     CDataType* GetType(void) const THROWS((CDatatoolException));
  171. private:
  172.     string m_Module, m_Name;
  173.     list<CDataType*> m_Types;
  174. };
  175. END_NCBI_SCOPE
  176. #endif