DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
// (C) Copyright Gennadiy Rozental 2001-2007. // (C) Copyright Beman Dawes 2001. // Distributed under 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/libs/test for the library home page. // // File : $RCSfile$ // // Version : $Revision: 41369 $ // // Description : defines abstract monitor interfaces and implements execution exception // The original Boost Test Library included an implementation detail function // named catch_exceptions() which caught otherwise uncaught C++ exceptions. // It was derived from an existing test framework by Beman Dawes. The // intent was to expand later to catch other detectable but platform dependent // error events like Unix signals or Windows structured C exceptions. // // Requests from early adopters of the Boost Test Library included // configurable levels of error message detail, elimination of templates, // separation of error reporting, and making the catch_exceptions() facilities // available as a public interface. Support for unit testing also stretched // the function based design. Implementation within the header became less // attractive due to the need to include many huge system dependent headers, // although still preferable in certain cases. // // All those issues have been addressed by introducing the class-based // design presented here. // *************************************************************************** #ifndef BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER #define BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER // Boost.Test #include
#include
#include
#include
// Boost #include
#include
#include
#include
#include
//____________________________________________________________________________// namespace boost { namespace detail { // ************************************************************************** // // ************** detail::translate_exception_base ************** // // ************************************************************************** // class BOOST_TEST_DECL translate_exception_base { public: // Constructor explicit translate_exception_base( boost::scoped_ptr
& next ) { next.swap( m_next ); } // Destructor virtual ~translate_exception_base() {} virtual int operator()( unit_test::callback0
const& F ) = 0; protected: // Data members boost::scoped_ptr
m_next; }; } // namespace detail // ************************************************************************** // // ************** execution_exception ************** // // ************************************************************************** // // design rationale: fear of being out (or nearly out) of memory. class BOOST_TEST_DECL execution_exception { typedef boost::unit_test::const_string const_string; public: enum error_code { // These values are sometimes used as program return codes. // The particular values have been chosen to avoid conflicts with // commonly used program return codes: values < 100 are often user // assigned, values > 255 are sometimes used to report system errors. // Gaps in values allow for orderly expansion. no_error = 0, // for completeness only; never returned user_error = 200, // user reported non-fatal error cpp_exception_error = 205, // see note (1) below system_error = 210, // see note (2) below timeout_error = 215, // only detectable on certain platforms user_fatal_error = 220, // user reported fatal error system_fatal_error = 225 // see note (2) below // Note 1: Only uncaught C++ exceptions are treated as errors. // If the application catches a C++ exception, it will never reach // the execution_monitor. // Note 2: These errors include Unix signals and Windows structured // exceptions. They are often initiated by hardware traps. // // The implementation decides what is a fatal_system_exception and what is // just a system_exception. Fatal errors are so likely to have corrupted // machine state (like a stack overflow or addressing exception) that it // is unreasonable to continue execution. }; // Constructor execution_exception( error_code ec_, const_string what_msg_ ) // max length 256 inc '\0' : m_error_code( ec_ ), m_what( what_msg_ ) {} // access methods error_code code() const { return m_error_code; } const_string what() const { return m_what; } private: // Data members error_code m_error_code; const_string m_what; }; // execution_exception // ************************************************************************** // // ************** execution_monitor ************** // // ************************************************************************** // class BOOST_TEST_DECL execution_monitor { public: // Constructor execution_monitor() : p_catch_system_errors( true ) , p_auto_start_dbg( false ) , p_timeout( 0 ) , p_use_alt_stack( true ) , p_detect_fp_exceptions( false ) {} // Public properties // The p_catch_system_errors parameter specifies whether the monitor should // try to catch system errors/exceptions that would cause program to crash // in regular case unit_test::readwrite_property
p_catch_system_errors; // The p_auto_start_dbg parameter specifies whether the monitor should // try to attach debugger in case of caught system error unit_test::readwrite_property
p_auto_start_dbg; // The p_timeout parameter specifies the seconds that elapse before // a timer_error occurs. May be ignored on some platforms. unit_test::readwrite_property
p_timeout; // The p_use_alt_stack parameter specifies whether the monitor should // use alternative stack for the signal catching unit_test::readwrite_property
p_use_alt_stack; // The p_detect_fp_exceptions parameter specifies whether the monitor should // try to detect hardware floating point exceptions unit_test::readwrite_property
p_detect_fp_exceptions; int execute( unit_test::callback0
const& F ); // Returns: Value returned by function call F(). // // Effects: Calls executes supplied function F inside a try/catch block which also may // include other unspecified platform dependent error detection code. // // Throws: execution_exception on an uncaught C++ exception, // a hardware or software signal, trap, or other exception. // // Note: execute() doesn't consider it an error for F to return a non-zero value. // register custom (user supplied) exception translator template
void register_exception_translator( ExceptionTranslator const& tr, boost::type
* = 0 ); private: // implementation helpers int catch_signals( unit_test::callback0
const& F ); // Data members boost::scoped_ptr
m_custom_translators; boost::scoped_array
m_alt_stack; }; // execution_monitor namespace detail { // ************************************************************************** // // ************** detail::translate_exception ************** // // ************************************************************************** // template
class translate_exception : public translate_exception_base { typedef boost::scoped_ptr
base_ptr; public: explicit translate_exception( ExceptionTranslator const& tr, base_ptr& next ) : translate_exception_base( next ), m_translator( tr ) {} int operator()( unit_test::callback0
const& F ) { try { return m_next ? (*m_next)( F ) : F(); } catch( Exception const& e ) { m_translator( e ); return boost::exit_exception_failure; } } private: // Data members ExceptionTranslator m_translator; }; } // namespace detail template
void execution_monitor::register_exception_translator( ExceptionTranslator const& tr, boost::type
* ) { m_custom_translators.reset( new detail::translate_exception
( tr,m_custom_translators ) ); } // ************************************************************************** // // ************** execution_aborted ************** // // ************************************************************************** // struct execution_aborted {}; // ************************************************************************** // // ************** system_error ************** // // ************************************************************************** // class system_error { public: // Constructor explicit system_error( char const* exp ); unit_test::readonly_property
p_errno; unit_test::readonly_property
p_failed_exp; }; #define BOOST_TEST_SYS_ASSERT( exp ) if( (exp) ) ; else throw ::boost::system_error( BOOST_STRINGIZE( exp ) ) } // namespace boost //____________________________________________________________________________// #include
#endif
execution_monitor.hpp
Page URL
File URL
Prev
5/28
Next
Download
( 10 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.