HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Exception.h
Go to the documentation of this file.
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 
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  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  : std::string( str ), std::exception() {}
68 
69  //! \brief Copies exception.
70  //! ...
71  Exception( const Exception &exc ) throw()
72  : 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  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  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 #define ABC_THROW( TEXT ) \
88 do \
89 { \
90  std::stringstream sstr; \
91  sstr << TEXT; \
92  Alembic::Util::Exception exc( sstr.str() ); \
93  throw( exc ); \
94 } \
95 while( 0 )
96 
97 //-*****************************************************************************
98 //! \brief convenient macro which may be used with std::iostream syntax
99 //! \details Same as \ref ABC_THROW
100 #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
virtual ~Exception()
Destructor is empty, but virtual to support polymorphic destruction of data in any derived classes...
Definition: Exception.h:76
GLsizei const GLchar *const * string
Definition: glcorearb.h:814
Exception(const Exception &exc)
Copies exception. ...
Definition: Exception.h:71
Exception(const std::string &str)
Creates exception with an explicit message string. ...
Definition: Exception.h:66
Exception()
default constructor creates exception with empty message string
Definition: Exception.h:62
virtual const char * what() const
Inherited from std::exception, this returns a non-modifiable character string describing the nature o...
Definition: Exception.h:80
Base class for all exceptions in the Alembic libraries. Derived from both std::exception and std::str...
Definition: Exception.h:57
#define ALEMBIC_VERSION_NS
Definition: Foundation.h:88