/src/alembic/lib/Alembic/Util/Exception.h
Line | Count | Source (jump to first uncovered line) |
1 | | //-***************************************************************************** |
2 | | // |
3 | | // Copyright (c) 2009-2011, |
4 | | // Sony Pictures Imageworks Inc. and |
5 | | // Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. |
6 | | // |
7 | | // All rights reserved. |
8 | | // |
9 | | // Redistribution and use in source and binary forms, with or without |
10 | | // modification, are permitted provided that the following conditions are |
11 | | // met: |
12 | | // * Redistributions of source code must retain the above copyright |
13 | | // notice, this list of conditions and the following disclaimer. |
14 | | // * Redistributions in binary form must reproduce the above |
15 | | // copyright notice, this list of conditions and the following disclaimer |
16 | | // in the documentation and/or other materials provided with the |
17 | | // distribution. |
18 | | // * Neither the name of Industrial Light & Magic nor the names of |
19 | | // its contributors may be used to endorse or promote products derived |
20 | | // from this software without specific prior written permission. |
21 | | // |
22 | | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
23 | | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
24 | | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
25 | | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
26 | | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
27 | | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
28 | | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
29 | | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
30 | | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
31 | | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
32 | | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | | // |
34 | | //-***************************************************************************** |
35 | | |
36 | | //-***************************************************************************** |
37 | | //! \file Alembic/Util/Exception.h |
38 | | //! \brief Header file containing class definition for class |
39 | | //! \ref Alembic::Util::Exception |
40 | | //-***************************************************************************** |
41 | | |
42 | | #ifndef Alembic_Util_Exception_h |
43 | | #define Alembic_Util_Exception_h |
44 | | |
45 | | #include <Alembic/Util/Foundation.h> |
46 | | |
47 | | //! \brief Alembic namespace |
48 | | //! ... |
49 | | namespace Alembic { |
50 | | namespace Util { |
51 | | namespace ALEMBIC_VERSION_NS { |
52 | | |
53 | | //-***************************************************************************** |
54 | | //! \brief Base class for all exceptions in the Alembic libraries. Derived |
55 | | //! from both std::exception and std::string, publicly |
56 | | //! It is mostly commonly thrown using the macros |
57 | | class Exception : public std::string, public std::exception |
58 | | { |
59 | | public: |
60 | | //! \brief default constructor creates exception with |
61 | | //! empty message string |
62 | 0 | Exception() throw() : std::string( "" ), std::exception() {} |
63 | | |
64 | | //! \brief Creates exception with an explicit message string. |
65 | | //! ... |
66 | | explicit Exception( const std::string &str ) throw() |
67 | 87 | : std::string( str ), std::exception() {} |
68 | | |
69 | | //! \brief Copies exception. |
70 | | //! ... |
71 | | Exception( const Exception &exc ) throw() |
72 | 87 | : std::string( exc.c_str() ), std::exception() {} |
73 | | |
74 | | //! \brief Destructor is empty, but virtual to support polymorphic |
75 | | //! destruction of data in any derived classes. |
76 | 174 | virtual ~Exception() throw() {} |
77 | | |
78 | | //! \brief Inherited from std::exception, this returns a non-modifiable |
79 | | //! character string describing the nature of the exception |
80 | 87 | virtual const char *what() const throw() { return c_str(); } |
81 | | }; |
82 | | |
83 | | //-***************************************************************************** |
84 | | //! \brief convenient macro which may be used with std::iostream syntax |
85 | | //! \details Same as \ref ALEMBIC_THROW |
86 | | |
87 | 97 | #define ABC_THROW( TEXT ) \ |
88 | 97 | do \ |
89 | 97 | { \ |
90 | 97 | std::stringstream sstr; \ |
91 | 97 | sstr << TEXT; \ |
92 | 97 | Alembic::Util::Exception exc( sstr.str() ); \ |
93 | 97 | throw( exc ); \ |
94 | 97 | } \ |
95 | 97 | while( 0 ) |
96 | | |
97 | | //-***************************************************************************** |
98 | | //! \brief convenient macro which may be used with std::iostream syntax |
99 | | //! \details Same as \ref ABC_THROW |
100 | 0 | #define ALEMBIC_THROW( TEXT ) ABC_THROW( TEXT ) |
101 | | |
102 | | } // End namespace ALEMBIC_VERSION_NS |
103 | | |
104 | | using namespace ALEMBIC_VERSION_NS; |
105 | | |
106 | | } // End namespace Util |
107 | | } // End namespace Alembic |
108 | | |
109 | | #endif |