/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // archive_exception.cpp: // (C) Copyright 2009 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. #if (defined _MSC_VER) && (_MSC_VER == 1200) # pragma warning (disable : 4786) // too long name, harmless warning #endif #include //#include #include #define BOOST_ARCHIVE_SOURCE #include namespace boost { namespace archive { unsigned int archive_exception::append(unsigned int l, const char * a){ while(l < (sizeof(m_buffer) - 1)){ char c = *a++; if('\0' == c) break; m_buffer[l++] = c; } m_buffer[l] = '\0'; return l; } BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) archive_exception::archive_exception( exception_code c, const char * e1, const char * e2 ) : code(c) { unsigned int length = 0; switch(code){ case no_exception: length = append(length, "uninitialized exception"); break; case unregistered_class: length = append(length, "unregistered class"); if(NULL != e1){ length = append(length, " - "); length = append(length, e1); } break; case invalid_signature: length = append(length, "invalid signature"); break; case unsupported_version: length = append(length, "unsupported version"); break; case pointer_conflict: length = append(length, "pointer conflict"); break; case incompatible_native_format: length = append(length, "incompatible native format"); if(NULL != e1){ length = append(length, " - "); length = append(length, e1); } break; case array_size_too_short: length = append(length, "array size too short"); break; case input_stream_error: length = append(length, "input stream error"); break; case invalid_class_name: length = append(length, "class name too long"); break; case unregistered_cast: length = append(length, "unregistered void cast "); length = append(length, (NULL != e1) ? e1 : "?"); length = append(length, "<-"); length = append(length, (NULL != e2) ? e2 : "?"); break; case unsupported_class_version: length = append(length, "class version "); length = append(length, (NULL != e1) ? e1 : ""); break; case other_exception: // if get here - it indicates a derived exception // was sliced by passing by value in catch length = append(length, "unknown derived exception"); break; case multiple_code_instantiation: length = append(length, "code instantiated in more than one module"); if(NULL != e1){ length = append(length, " - "); length = append(length, e1); } break; case output_stream_error: length = append(length, "output stream error"); break; default: BOOST_ASSERT(false); length = append(length, "programming error"); break; } } BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) archive_exception::~archive_exception() throw() {} BOOST_ARCHIVE_DECL(const char *) archive_exception::what( ) const throw() { return m_buffer; } BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) archive_exception::archive_exception() : code(no_exception) {} } // archive } // boost