Coverage Report

Created: 2025-08-25 06:16

/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