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-2017 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 email to scip@zib.de. */
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);
69  assert(messagehdlrdata->objmessagehdlr != NULL);
70 
71  /* call virtual method of messagehdlr object */
72  messagehdlrdata->objmessagehdlr->scip_warning(messagehdlr, file, msg);
73 }
74 
75 
76 /** dialog message print method of message handler */
77 static
78 SCIP_DECL_MESSAGEDIALOG(messagehdlrDialogObj)
79 { /*lint --e{715}*/
80  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
81 
82  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
83  assert(messagehdlrdata != NULL);
84  assert(messagehdlrdata->objmessagehdlr != NULL);
85 
86  /* call virtual method of messagehdlr object */
87  messagehdlrdata->objmessagehdlr->scip_dialog(messagehdlr, file, msg);
88 }
89 
90 
91 /** info message print method of message handler */
92 static
93 SCIP_DECL_MESSAGEINFO(messagehdlrInfoObj)
94 { /*lint --e{715}*/
95  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
96 
97  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
98  assert(messagehdlrdata != NULL);
99  assert(messagehdlrdata->objmessagehdlr != NULL);
100 
101  /* call virtual method of messagehdlr object */
102  messagehdlrdata->objmessagehdlr->scip_info(messagehdlr, file, msg);
103 }
104 
105 /** destructor of message handler to free message handler data */
106 static
108 { /*lint --e{715}*/
109  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
110 
111  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
112  assert(messagehdlrdata != NULL);
113  assert(messagehdlrdata->objmessagehdlr != NULL);
114 
115  /* call virtual method of messagehdlr object */
116  SCIP_CALL( messagehdlrdata->objmessagehdlr->scip_free(messagehdlr) );
117 
118  /* free message handler object */
119  if( messagehdlrdata->deleteobject )
120  delete messagehdlrdata->objmessagehdlr;
121 
122  /* free message handler data */
123  delete messagehdlrdata;
124  SCIP_CALL( SCIPmessagehdlrSetData(messagehdlr, NULL) ); /*lint !e64*/
125 
126  return SCIP_OKAY;
127 }
128 }
129 
130 
131 
132 /*
133  * message handler specific interface methods
134  */
135 
136 /** creates the message handler for the given message handler object */
138  SCIP_MESSAGEHDLR** messagehdlr, /**< pointer to store the message handler */
139  scip::ObjMessagehdlr* objmessagehdlr, /**< message handler object */
140  SCIP_Bool deleteobject /**< should the message handler object be deleted when message handler is freed? */
141  )
142 {
143  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
144  SCIP_RETCODE retcode;
145 
146  /* create file messagehdlr data */
147  messagehdlrdata = new SCIP_MESSAGEHDLRDATA;
148  messagehdlrdata->objmessagehdlr = objmessagehdlr;
149  messagehdlrdata->deleteobject = deleteobject;
150 
151  /* create message handler */
152  retcode = SCIPmessagehdlrCreate(messagehdlr, objmessagehdlr->scip_bufferedoutput_, (const char*)NULL, FALSE,
153  messagehdlrWarningObj, messagehdlrDialogObj, messagehdlrInfoObj,
154  messagehdlrFree, messagehdlrdata); /*lint !e429*/
155 
156  if( retcode != SCIP_OKAY )
157  {
158  /* free message handler object */
159  if( messagehdlrdata->deleteobject )
160  delete messagehdlrdata->objmessagehdlr;
161 
162  delete messagehdlrdata;
163  SCIP_CALL( retcode );
164  }
165 
166  return SCIP_OKAY; /*lint !e429 !e593*/
167 }
168 
169 /** returns the message handler object for the given message handler */
171  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
172  )
173 {
174  SCIP_MESSAGEHDLRDATA* messagehdlrdata;
175 
176  messagehdlrdata = SCIPmessagehdlrGetData(messagehdlr);
177  assert(messagehdlrdata != NULL);
178 
179  return messagehdlrdata->objmessagehdlr;
180 }
181 
182 /** set static error output function to the corresponding function of message handler */
184  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
185  )
186 {
187  assert( messagehdlr != NULL );
188 
189  SCIPmessageSetErrorPrinting(messagehdlrErrorObj, (void*) SCIPgetObjMessagehdlr(messagehdlr));
190 }
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:285
void SCIPsetStaticErrorPrintingMessagehdlr(SCIP_MESSAGEHDLR *messagehdlr)
#define FALSE
Definition: def.h:64
SCIP_RETCODE SCIPcreateObjMessagehdlr(SCIP_MESSAGEHDLR **messagehdlr, scip::ObjMessagehdlr *objmessagehdlr, SCIP_Bool deleteobject)
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
virtual void scip_error(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *msg)
static SCIP_DECL_ERRORPRINTING(messagehdlrErrorObj)
#define NULL
Definition: lpi_spx1.cpp:137
static SCIP_DECL_MESSAGEDIALOG(messagehdlrDialogObj)
static SCIP_DECL_MESSAGEINFO(messagehdlrInfoObj)
#define SCIP_CALL(x)
Definition: def.h:306
static SCIP_RETCODE messagehdlrFree(SCIP_MESSAGEHDLR **messagehdlr)
Definition: message.c:246
scip::ObjMessagehdlr * SCIPgetObjMessagehdlr(SCIP_MESSAGEHDLR *messagehdlr)
#define SCIP_Bool
Definition: def.h:61
C++ wrapper for message handlers.
SCIP_RETCODE SCIPmessagehdlrSetData(SCIP_MESSAGEHDLR *messagehdlr, SCIP_MESSAGEHDLRDATA *messagehdlrdata)
Definition: message.c:367
void SCIPmessageSetErrorPrinting(SCIP_DECL_ERRORPRINTING((*errorPrinting)), void *data)
Definition: message.c:841
const SCIP_Bool scip_bufferedoutput_
static SCIP_DECL_MESSAGEHDLRFREE(messagehdlrFree)
SCIP_MESSAGEHDLRDATA * SCIPmessagehdlrGetData(SCIP_MESSAGEHDLR *messagehdlr)
Definition: message.c:877