Scippy

SCIP

Solving Constraint Integer Programs

objmessagehdlr.cpp
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program and library */
4 /* SCIP --- Solving Constraint Integer Programs */
5 /* */
6 /* Copyright (C) 2002-2022 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License. */
12 /* along with SCIP; see the file COPYING. If not visit scipopt.org. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file objmessagehdlr.cpp
17  * @brief C++ wrapper for message handlers
18  * @author Tobias Achterberg
19  */
20 
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
22 
23 #include <cassert>
24 
25 #include "objmessagehdlr.h"
26 
27 
28 
29 
30 /*
31  * Data structures
32  */
33 
34 /** message handler data */
35 struct SCIP_MessagehdlrData
36 {
37  scip::ObjMessagehdlr* objmessagehdlr; /**< message handler object */
38  SCIP_Bool deleteobject; /**< should the message handler object be deleted when message handler is freed? */
39 };
40 
41 
42 
43 
44 /*
45  * Callback methods of file reader
46  */
47 
48 extern "C"
49 {
50 /** error message print method of message handler */
51 static
52 SCIP_DECL_ERRORPRINTING(messagehdlrErrorObj)
53 {
54  assert( data != 0 );
55 
56  scip::ObjMessagehdlr* objmessagehdlr = static_cast<scip::ObjMessagehdlr*>(data);
57 
58  objmessagehdlr->scip_error(0, file, msg);
59 }
60 
61 /** warning message print method of message handler */
62 static
63 SCIP_DECL_MESSAGEWARNING(messagehdlrWarningObj)
64 { /*lint --e{715}*/
65  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
66 
67  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
68  assert(messagehdlrdata != NULL && messagehdlrdata->objmessagehdlr != NULL);
69 
70  /* call virtual method of messagehdlr object */
71  messagehdlrdata->objmessagehdlr->scip_warning(messagehdlr, file, msg);
72 }
73 
74 
75 /** dialog message print method of message handler */
76 static
77 SCIP_DECL_MESSAGEDIALOG(messagehdlrDialogObj)
78 { /*lint --e{715}*/
79  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
80 
81  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
82  assert(messagehdlrdata != NULL && messagehdlrdata->objmessagehdlr != NULL);
83 
84  /* call virtual method of messagehdlr object */
85  messagehdlrdata->objmessagehdlr->scip_dialog(messagehdlr, file, msg);
86 }
87 
88 
89 /** info message print method of message handler */
90 static
91 SCIP_DECL_MESSAGEINFO(messagehdlrInfoObj)
92 { /*lint --e{715}*/
93  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
94 
95  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
96  assert(messagehdlrdata != NULL && messagehdlrdata->objmessagehdlr != NULL);
97 
98  /* call virtual method of messagehdlr object */
99  messagehdlrdata->objmessagehdlr->scip_info(messagehdlr, file, msg);
100 }
101 
102 /** destructor of message handler to free message handler data */
103 static
105 { /*lint --e{715}*/
106  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
107 
108  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
109  assert(messagehdlrdata != NULL && messagehdlrdata->objmessagehdlr != NULL);
110 
111  /* call virtual method of messagehdlr object */
112  SCIP_CALL( messagehdlrdata->objmessagehdlr->scip_free(messagehdlr) );
113 
114  /* free message handler object */
115  if( messagehdlrdata->deleteobject )
116  delete messagehdlrdata->objmessagehdlr;
117 
118  /* free message handler data */
119  delete messagehdlrdata;
120  SCIP_CALL( SCIPmessagehdlrSetData(messagehdlr, NULL) ); /*lint !e64*/
121 
122  return SCIP_OKAY;
123 }
124 }
125 
126 
127 
128 /*
129  * message handler specific interface methods
130  */
131 
132 /** creates the message handler for the given message handler object */
134  SCIP_MESSAGEHDLR** messagehdlr, /**< pointer to store the message handler */
135  scip::ObjMessagehdlr* objmessagehdlr, /**< message handler object */
136  SCIP_Bool deleteobject /**< should the message handler object be deleted when message handler is freed? */
137  )
138 {
139  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
140  SCIP_RETCODE retcode;
141 
142  /* create file messagehdlr data */
143  messagehdlrdata = new SCIP_MESSAGEHDLRDATA;
144  messagehdlrdata->objmessagehdlr = objmessagehdlr;
145  messagehdlrdata->deleteobject = deleteobject;
146 
147  /* create message handler */
148  retcode = SCIPmessagehdlrCreate(messagehdlr, objmessagehdlr->scip_bufferedoutput_, (const char*)NULL, FALSE,
149  messagehdlrWarningObj, messagehdlrDialogObj, messagehdlrInfoObj,
150  messagehdlrFree, messagehdlrdata); /*lint !e429*/
151 
152  if( retcode != SCIP_OKAY )
153  {
154  /* free message handler object */
155  if( messagehdlrdata->deleteobject )
156  delete messagehdlrdata->objmessagehdlr;
157 
158  delete messagehdlrdata;
159  SCIP_CALL( retcode );
160  }
161 
162  return SCIP_OKAY; /*lint !e429 !e593*/
163 }
164 
165 /** returns the message handler object for the given message handler */
167  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
168  )
169 {
170  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
171 
172  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
173  assert(messagehdlrdata != NULL && messagehdlrdata->objmessagehdlr != NULL);
174 
175  return messagehdlrdata->objmessagehdlr;
176 }
177 
178 /** set static error output function to the corresponding function of message handler */
180  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
181  )
182 {
183  assert( messagehdlr != NULL );
184 
185  SCIPmessageSetErrorPrinting(messagehdlrErrorObj, (void*) SCIPgetObjMessagehdlr(messagehdlr));
186 }
static SCIP_DECL_MESSAGEWARNING(messagehdlrWarningObj)
struct SCIP_MessagehdlrData SCIP_MESSAGEHDLRDATA
Definition: type_message.h:51
C++ wrapper for message handlers.
SCIP_RETCODE SCIPmessagehdlrCreate(SCIP_MESSAGEHDLR **messagehdlr, SCIP_Bool bufferedoutput, const char *filename, SCIP_Bool quiet, SCIP_DECL_MESSAGEWARNING((*messagewarning)), SCIP_DECL_MESSAGEDIALOG((*messagedialog)), SCIP_DECL_MESSAGEINFO((*messageinfo)), SCIP_DECL_MESSAGEHDLRFREE((*messagehdlrfree)), SCIP_MESSAGEHDLRDATA *messagehdlrdata)
Definition: message.c:286
void SCIPsetStaticErrorPrintingMessagehdlr(SCIP_MESSAGEHDLR *messagehdlr)
#define FALSE
Definition: def.h:87
SCIP_RETCODE SCIPcreateObjMessagehdlr(SCIP_MESSAGEHDLR **messagehdlr, scip::ObjMessagehdlr *objmessagehdlr, SCIP_Bool deleteobject)
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:54
virtual void scip_error(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *msg)
static SCIP_DECL_ERRORPRINTING(messagehdlrErrorObj)
#define NULL
Definition: lpi_spx1.cpp:155
static SCIP_DECL_MESSAGEDIALOG(messagehdlrDialogObj)
static SCIP_DECL_MESSAGEINFO(messagehdlrInfoObj)
#define SCIP_CALL(x)
Definition: def.h:384
static SCIP_RETCODE messagehdlrFree(SCIP_MESSAGEHDLR **messagehdlr)
Definition: message.c:247
scip::ObjMessagehdlr * SCIPgetObjMessagehdlr(SCIP_MESSAGEHDLR *messagehdlr)
#define SCIP_Bool
Definition: def.h:84
C++ wrapper for message handlers.
SCIP_RETCODE SCIPmessagehdlrSetData(SCIP_MESSAGEHDLR *messagehdlr, SCIP_MESSAGEHDLRDATA *messagehdlrdata)
Definition: message.c:368
void SCIPmessageSetErrorPrinting(SCIP_DECL_ERRORPRINTING((*errorPrinting)), void *data)
Definition: message.c:842
const SCIP_Bool scip_bufferedoutput_
static SCIP_DECL_MESSAGEHDLRFREE(messagehdlrFree)
SCIP_MESSAGEHDLRDATA * SCIPmessagehdlrGetData(SCIP_MESSAGEHDLR *messagehdlr)
Definition: message.c:878