source: NonGTP/Boost/boost/archive/archive_exception.hpp @ 857

Revision 857, 4.1 KB checked in by igarcia, 18 years ago (diff)
Line 
1#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
2#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
3
4// MS compatible compilers support #pragma once
5#if defined(_MSC_VER) && (_MSC_VER >= 1020)
6# pragma once
7#endif
8
9/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
10// archive/archive_exception.hpp:
11
12// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
13// Use, modification and distribution is subject to the Boost Software
14// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
15// http://www.boost.org/LICENSE_1_0.txt)
16
17//  See http://www.boost.org for updates, documentation, and revision history.
18
19#include <exception>
20#include <cassert>
21
22namespace boost {
23namespace archive {
24
25//////////////////////////////////////////////////////////////////////
26// exceptions thrown by archives
27//
28class archive_exception :
29    public virtual std::exception
30{
31public:
32    typedef enum {
33        no_exception,       // initialized without code
34        other_exception,    // any excepton not listed below
35        unregistered_class, // attempt to serialize a pointer of an
36                            // an unregistered class
37        invalid_signature,  // first line of archive does not contain
38                            // expected string
39        unsupported_version,// archive created with library version
40                            // subsequent to this one
41        pointer_conflict,   // an attempt has been made to directly
42                            // serialization::detail an object
43                            // after having already serialzed the same
44                            // object through a pointer.  Were this permited,
45                            // it the archive load would result in the
46                            // creation of an extra copy of the obect.
47        incompatible_native_format, // attempt to read native binary format
48                            // on incompatible platform
49        array_size_too_short,// array being loaded doesn't fit in array allocated
50        stream_error,       // i/o error on stream
51        invalid_class_name, // class name greater than the maximum permitted.
52                            // most likely a corrupted archive or an attempt
53                            // to insert virus via buffer overrun method.
54        unregistered_cast   // base - derived relationship not registered with
55                            // void_cast_register
56    } exception_code;
57    exception_code code;
58    archive_exception(exception_code c) :
59        code(c)
60    {}
61    virtual const char *what( ) const throw( )
62    {
63        const char *msg = "programming error";
64        switch(code){
65        case no_exception:
66            msg = "uninitialized exception";
67            break;
68        case unregistered_class:
69            msg = "unregistered class";
70            break;
71        case invalid_signature:
72            msg = "invalid signature";
73            break;
74        case unsupported_version:
75            msg = "unsupported version";
76            break;
77        case pointer_conflict:
78            msg = "pointer conflict";
79            break;
80        case incompatible_native_format:
81            msg = "incompatible native format";
82            break;
83        case array_size_too_short:
84            msg = "array size too short";
85            break;
86        case stream_error:
87            msg = "stream error";
88            break;
89        case invalid_class_name:
90            msg = "class name too long";
91            break;
92        case unregistered_cast:
93            msg = "unregistered void cast";
94            break;
95        case other_exception:
96            // if get here - it indicates a derived exception
97            // was sliced by passing by value in catch
98            msg = "unknown derived exception";
99            break;
100        default:
101            assert(false);
102            break;
103        }
104        return msg;
105    }
106protected:
107    archive_exception() :
108         code(no_exception)
109    {}
110};
111
112}// namespace archive
113}// namespace boost
114
115#endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
Note: See TracBrowser for help on using the repository browser.