File: error_handler.cpp

package info (click to toggle)
cppad 2025.00.00.2-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 11,552 kB
  • sloc: cpp: 112,594; sh: 5,972; ansic: 179; python: 71; sed: 12; makefile: 10
file content (72 lines) | stat: -rw-r--r-- 1,844 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
// SPDX-FileCopyrightText: Bradley M. Bell <bradbell@seanet.com>
// SPDX-FileContributor: 2003-22 Bradley M. Bell
// ----------------------------------------------------------------------------

/*
{xrst_begin error_handler.cpp}

Replacing The CppAD Error Handler: Example and Test
###################################################

{xrst_literal
   // BEGIN C++
   // END C++
}

{xrst_end error_handler.cpp}
*/
// BEGIN C++

# 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;
}

// END C++