116 lines
4.1 KiB
C++
Executable File
116 lines
4.1 KiB
C++
Executable File
#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
|
|
#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
|
|
|
|
// MS compatible compilers support #pragma once
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
|
# pragma once
|
|
#endif
|
|
|
|
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
|
// archive/archive_exception.hpp:
|
|
|
|
// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
|
|
// Use, modification and distribution is subject to the Boost Software
|
|
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
// See http://www.boost.org for updates, documentation, and revision history.
|
|
|
|
#include <exception>
|
|
#include <cassert>
|
|
|
|
namespace boost {
|
|
namespace archive {
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// exceptions thrown by archives
|
|
//
|
|
class archive_exception :
|
|
public virtual std::exception
|
|
{
|
|
public:
|
|
typedef enum {
|
|
no_exception, // initialized without code
|
|
other_exception, // any excepton not listed below
|
|
unregistered_class, // attempt to serialize a pointer of an
|
|
// an unregistered class
|
|
invalid_signature, // first line of archive does not contain
|
|
// expected string
|
|
unsupported_version,// archive created with library version
|
|
// subsequent to this one
|
|
pointer_conflict, // an attempt has been made to directly
|
|
// serialization::detail an object
|
|
// after having already serialzed the same
|
|
// object through a pointer. Were this permited,
|
|
// it the archive load would result in the
|
|
// creation of an extra copy of the obect.
|
|
incompatible_native_format, // attempt to read native binary format
|
|
// on incompatible platform
|
|
array_size_too_short,// array being loaded doesn't fit in array allocated
|
|
stream_error, // i/o error on stream
|
|
invalid_class_name, // class name greater than the maximum permitted.
|
|
// most likely a corrupted archive or an attempt
|
|
// to insert virus via buffer overrun method.
|
|
unregistered_cast // base - derived relationship not registered with
|
|
// void_cast_register
|
|
} exception_code;
|
|
exception_code code;
|
|
archive_exception(exception_code c) :
|
|
code(c)
|
|
{}
|
|
virtual const char *what( ) const throw( )
|
|
{
|
|
const char *msg = "programming error";
|
|
switch(code){
|
|
case no_exception:
|
|
msg = "uninitialized exception";
|
|
break;
|
|
case unregistered_class:
|
|
msg = "unregistered class";
|
|
break;
|
|
case invalid_signature:
|
|
msg = "invalid signature";
|
|
break;
|
|
case unsupported_version:
|
|
msg = "unsupported version";
|
|
break;
|
|
case pointer_conflict:
|
|
msg = "pointer conflict";
|
|
break;
|
|
case incompatible_native_format:
|
|
msg = "incompatible native format";
|
|
break;
|
|
case array_size_too_short:
|
|
msg = "array size too short";
|
|
break;
|
|
case stream_error:
|
|
msg = "stream error";
|
|
break;
|
|
case invalid_class_name:
|
|
msg = "class name too long";
|
|
break;
|
|
case unregistered_cast:
|
|
msg = "unregistered void cast";
|
|
break;
|
|
case other_exception:
|
|
// if get here - it indicates a derived exception
|
|
// was sliced by passing by value in catch
|
|
msg = "unknown derived exception";
|
|
break;
|
|
default:
|
|
assert(false);
|
|
break;
|
|
}
|
|
return msg;
|
|
}
|
|
protected:
|
|
archive_exception() :
|
|
code(no_exception)
|
|
{}
|
|
};
|
|
|
|
}// namespace archive
|
|
}// namespace boost
|
|
|
|
#endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
|