1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB) */ 7 /* */ 8 /* Licensed under the Apache License, Version 2.0 (the "License"); */ 9 /* you may not use this file except in compliance with the License. */ 10 /* You may obtain a copy of the License at */ 11 /* */ 12 /* http://www.apache.org/licenses/LICENSE-2.0 */ 13 /* */ 14 /* Unless required by applicable law or agreed to in writing, software */ 15 /* distributed under the License is distributed on an "AS IS" BASIS, */ 16 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ 17 /* See the License for the specific language governing permissions and */ 18 /* limitations under the License. */ 19 /* */ 20 /* You should have received a copy of the Apache-2.0 license */ 21 /* along with SCIP; see the file LICENSE. If not visit scipopt.org. */ 22 /* */ 23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 24 25 /**@file scip_message.h 26 * @ingroup PUBLICCOREAPI 27 * @brief public methods for message handling 28 * @author Tobias Achterberg 29 * @author Timo Berthold 30 * @author Thorsten Koch 31 * @author Alexander Martin 32 * @author Marc Pfetsch 33 * @author Kati Wolter 34 * @author Gregor Hendel 35 * @author Leona Gottwald 36 */ 37 38 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 39 40 #ifndef __SCIP_SCIP_MESSAGE_H__ 41 #define __SCIP_SCIP_MESSAGE_H__ 42 43 44 #include "scip/def.h" 45 #include "scip/type_message.h" 46 #include "scip/type_retcode.h" 47 #include "scip/type_scip.h" 48 49 #ifdef __cplusplus 50 extern "C" { 51 #endif 52 53 /**@addtogroup MessageOutputMethods 54 * 55 * @{ 56 */ 57 58 /* if we have a C99 compiler */ 59 #ifdef SCIP_HAVE_VARIADIC_MACROS 60 61 /** prints a debugging message if SCIP_DEBUG flag is set */ 62 #ifdef SCIP_DEBUG 63 #define SCIPdebugMsg(scip, ...) SCIPprintDebugMessage(scip, __FILE__, __LINE__, __VA_ARGS__) 64 #define SCIPdebugMsgPrint(scip, ...) SCIPdebugMessagePrint(scip, __VA_ARGS__) 65 #else 66 #define SCIPdebugMsg(scip, ...) while ( FALSE ) SCIPprintDebugMessage(scip, __FILE__, __LINE__, __VA_ARGS__) 67 #define SCIPdebugMsgPrint(scip, ...) while ( FALSE ) SCIPdebugMessagePrint(scip, __VA_ARGS__) 68 #endif 69 70 #else 71 /* if we do not have a C99 compiler, use a workaround that prints a message, but not the file and linenumber */ 72 73 /** prints a debugging message if SCIP_DEBUG flag is set */ 74 #ifdef SCIP_DEBUG 75 #define SCIPdebugMsg printf("debug: "), SCIPdebugMessagePrint 76 #define SCIPdebugMsgPrint SCIPdebugMessagePrint 77 #else 78 #define SCIPdebugMsg while ( FALSE ) SCIPdebugMessagePrint 79 #define SCIPdebugMsgPrint while ( FALSE ) SCIPdebugMessagePrint 80 #endif 81 82 #endif 83 84 85 /** installs the given message handler, such that all messages are passed to this handler. A messages handler can be 86 * created via SCIPmessagehdlrCreate(). 87 * 88 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref 89 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. 90 * 91 * @pre this method can be called in one of the following stages of the SCIP solving process: 92 * - \ref SCIP_STAGE_INIT 93 * - \ref SCIP_STAGE_PROBLEM 94 * 95 * @note The currently installed messages handler gets freed if this SCIP instance is its last user (w.r.t. capture/release). 96 */ 97 SCIP_EXPORT 98 SCIP_RETCODE SCIPsetMessagehdlr( 99 SCIP* scip, /**< SCIP data structure */ 100 SCIP_MESSAGEHDLR* messagehdlr /**< message handler to install, or NULL to suppress all output */ 101 ); 102 103 /** returns the currently installed message handler 104 * 105 * @return the currently installed message handler, or NULL if messages are currently suppressed 106 */ 107 SCIP_EXPORT 108 SCIP_MESSAGEHDLR* SCIPgetMessagehdlr( 109 SCIP* scip /**< SCIP data structure */ 110 ); 111 112 /** sets the log file name for the currently installed message handler */ 113 SCIP_EXPORT 114 void SCIPsetMessagehdlrLogfile( 115 SCIP* scip, /**< SCIP data structure */ 116 const char* filename /**< name of log file, or NULL (no log) */ 117 ); 118 119 /** sets the currently installed message handler to be quiet (or not) */ 120 SCIP_EXPORT 121 void SCIPsetMessagehdlrQuiet( 122 SCIP* scip, /**< SCIP data structure */ 123 SCIP_Bool quiet /**< should screen messages be suppressed? */ 124 ); 125 126 /** prints a warning message via the message handler */ 127 #ifdef __GNUC__ 128 __attribute__((format(printf, 2, 3))) 129 #endif 130 SCIP_EXPORT 131 void SCIPwarningMessage( 132 SCIP* scip, /**< SCIP data structure */ 133 const char* formatstr, /**< format string like in printf() function */ 134 ... /**< format arguments line in printf() function */ 135 ); 136 137 /** prints a debug message */ 138 #ifdef __GNUC__ 139 __attribute__((format(printf, 4, 5))) 140 #endif 141 SCIP_EXPORT 142 void SCIPprintDebugMessage( 143 SCIP* scip, /**< SCIP data structure */ 144 const char* sourcefile, /**< name of the source file that called the function */ 145 int sourceline, /**< line in the source file where the function was called */ 146 const char* formatstr, /**< format string like in printf() function */ 147 ... /**< format arguments line in printf() function */ 148 ); 149 150 /** prints a debug message without precode */ 151 #ifdef __GNUC__ 152 __attribute__((format(printf, 2, 3))) 153 #endif 154 SCIP_EXPORT 155 void SCIPdebugMessagePrint( 156 SCIP* scip, /**< SCIP data structure */ 157 const char* formatstr, /**< format string like in printf() function */ 158 ... /**< format arguments line in printf() function */ 159 ); 160 161 /** prints a dialog message that requests user interaction or is a direct response to a user interactive command */ 162 #ifdef __GNUC__ 163 __attribute__((format(printf, 3, 4))) 164 #endif 165 SCIP_EXPORT 166 void SCIPdialogMessage( 167 SCIP* scip, /**< SCIP data structure */ 168 FILE* file, /**< file stream to print into, or NULL for stdout */ 169 const char* formatstr, /**< format string like in printf() function */ 170 ... /**< format arguments line in printf() function */ 171 ); 172 173 /** prints a message */ 174 #ifdef __GNUC__ 175 __attribute__((format(printf, 3, 4))) 176 #endif 177 SCIP_EXPORT 178 void SCIPinfoMessage( 179 SCIP* scip, /**< SCIP data structure */ 180 FILE* file, /**< file stream to print into, or NULL for stdout */ 181 const char* formatstr, /**< format string like in printf() function */ 182 ... /**< format arguments line in printf() function */ 183 ); 184 185 /** prints a message depending on the verbosity level */ 186 #ifdef __GNUC__ 187 __attribute__((format(printf, 4, 5))) 188 #endif 189 SCIP_EXPORT 190 void SCIPverbMessage( 191 SCIP* scip, /**< SCIP data structure */ 192 SCIP_VERBLEVEL msgverblevel, /**< verbosity level of this message */ 193 FILE* file, /**< file stream to print into, or NULL for stdout */ 194 const char* formatstr, /**< format string like in printf() function */ 195 ... /**< format arguments line in printf() function */ 196 ); 197 198 /** returns the current message verbosity level 199 * 200 * @return message verbosity level of SCIP 201 * 202 * @see \ref SCIP_VerbLevel "SCIP_VERBLEVEL" for a list of all verbosity levels 203 */ 204 SCIP_EXPORT 205 SCIP_VERBLEVEL SCIPgetVerbLevel( 206 SCIP* scip /**< SCIP data structure */ 207 ); 208 209 210 /**@} */ 211 212 #ifdef __cplusplus 213 } 214 #endif 215 216 #endif 217