Prev Next error_handler.cpp Headings

@(@\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }@)@
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/utility/error_handler.cpp