Prev Next ErrorHandler.cpp Headings

Replacing The CppAD Error Handler: Example and Test


# include <cppad/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