Replacing The CppAD Error Handler: Example and Test
Keywords: replacing the cppad error handler: example test handler

| Prev | Next |  |  |  |  |  | error_handler.cpp | Headings

Replacing The CppAD Error Handler: Example and Test
`

    # include <cppad/utility/error_handler.hpp>
    # include <cstring>

    namespace {
    	void myhandler(
    		bool known       ,
    		int  line        ,
    		const char *file ,
    		const char *exp  ,
    		const char *msg  )
    	{	// error handler must not return, so throw an exception
    		throw line;
    	}
    }

    bool ErrorHandler(void)
    {	using CppAD::ErrorHandler;

    	int lineMinusFive = 0;

    	// replace the default CppAD error handler
    	ErrorHandler info(myhandler);

    	// set ok to false unless catch block is executed
    	bool ok = false;

    	// use try / catch because handler throws an exception
    	try {
    		// set the static variable Line to next source code line
    		lineMinusFive = __LINE__;

    		// can call myhandler anywhere that ErrorHandler is defined
    		ErrorHandler::Call(
    			true     , // reason for the error is known
    			__LINE__ , // current source code line number
    			__FILE__ , // current source code file name
    			"1 > 0"  , // an intentional error condition
    			"Testing ErrorHandler"     // reason for error
    		);
    	}
    	catch ( int line )
    	{	// check value of the line number that was passed to handler
    		ok = (line == lineMinusFive + 5);
    	}

    	// info drops out of scope and the default CppAD error handler
    	// is restored when this routine returns.
    	return ok;
    }

`

Input File: example/error_handler.cpp