Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / archive / archive_exception.hpp
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
22 namespace boost {
23 namespace archive {
24
25 //////////////////////////////////////////////////////////////////////
26 // exceptions thrown by archives
27 //
28 class archive_exception : 
29     public virtual std::exception
30 {
31 public:
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     }
106 protected:
107     archive_exception() : 
108          code(no_exception)
109     {}
110 };
111
112 }// namespace archive
113 }// namespace boost
114
115 #endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP