Scippy

SCIP

Solving Constraint Integer Programs

objexprhdlr.h
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-2025 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 objexprhdlr.h
26 * @brief C++ wrapper for expression handlers
27 * @author Kevin Kofler
28 */
29
30/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
31
32#ifndef __SCIP_OBJEXPRHDLR_H__
33#define __SCIP_OBJEXPRHDLR_H__
34
35#include <cstring>
36#include <utility>
37
38#include "scip/scip.h"
40
41namespace scip
42{
43
44/** @brief C++ wrapper for expression handlers
45 *
46 * This class defines the interface for expression handlers implemented in C++. Note that there is a pure virtual
47 * function (which has to be implemented): the function scip_eval().
48 *
49 * - \ref EXPRHDLR "Instructions for implementing an expression handler"
50 * - \ref EXPRHDLRS "List of available expression handlers"
51 * - \ref type_expr.h "Corresponding C interface"
52 */
54{
55public:
56 /*lint --e{1540}*/
57
58 /** SCIP data structure */
60
61 /** name of the expression handler */
63
64 /** description of the expression handler */
66
67 /** precedence of expression operation relative to other expression (used for printing) */
68 const unsigned int scip_precedence_;
69
70 /** whether scip_copydata is implemented */
72
73 /** whether scip_freedata is implemented */
75
76 /** whether scip_simplify is implemented */
78
79 /** whether scip_compare is implemented */
81
82 /** whether scip_print is implemented */
84
85 /** whether scip_parse is implemented */
87
88 /** whether scip_bwdiff is implemented */
90
91 /** whether scip_fwdiff is implemented */
93
94 /** whether scip_bwfwdiff is implemented */
96
97 /** whether scip_inteval is implemented */
99
100 /** whether scip_estimate is implemented */
102
103 /** whether scip_initestimates is implemented */
105
106 /** whether scip_reverseprop is implemented */
108
109 /** whether scip_hash is implemented */
111
112 /** whether scip_curvature is implemented */
114
115 /** whether scip_monotonicity is implemented */
117
118 /** whether scip_integrality is implemented */
120
121 /** whether scip_getsymdata is implemented */
123
124 /** default constructor */
126 SCIP* scip, /**< SCIP data structure */
127 const char* name, /**< name of expression handler */
128 const char* desc, /**< description of expression handler */
129 unsigned int precedence, /**< precedence of expression operation */
130 SCIP_Bool has_copydata, /**< whether scip_copydata is implemented */
131 SCIP_Bool has_freedata, /**< whether scip_freedata is implemented */
132 SCIP_Bool has_simplify, /**< whether scip_simplify is implemented */
133 SCIP_Bool has_compare, /**< whether scip_compare is implemented */
134 SCIP_Bool has_print, /**< whether scip_print is implemented */
135 SCIP_Bool has_parse, /**< whether scip_parse is implemented */
136 SCIP_Bool has_bwdiff, /**< whether scip_bwdiff is implemented */
137 SCIP_Bool has_fwdiff, /**< whether scip_fwdiff is implemented */
138 SCIP_Bool has_bwfwdiff, /**< whether scip_bwfwdiff is implemented */
139 SCIP_Bool has_inteval, /**< whether scip_inteval is implemented */
140 SCIP_Bool has_estimate, /**< whether scip_estimate is implemented */
141 SCIP_Bool has_initestimates, /**< whether scip_initestimates is implemented */
142 SCIP_Bool has_reverseprop, /**< whether scip_reverseprop is implemented */
143 SCIP_Bool has_hash, /**< whether scip_hash is implemented */
144 SCIP_Bool has_curvature, /**< whether scip_curvature is implemented */
145 SCIP_Bool has_monotonicity, /**< whether scip_monotonicity is implemented */
146 SCIP_Bool has_integrality, /**< whether scip_integrality is implemented */
147 SCIP_Bool has_getsymdata /**< whether scip_getsymdata is implemented */
148 )
149 : scip_(scip),
150 scip_name_(0),
151 scip_desc_(0),
152 scip_precedence_(precedence),
153 scip_has_copydata_(has_copydata),
154 scip_has_freedata_(has_freedata),
155 scip_has_simplify_(has_simplify),
156 scip_has_compare_(has_compare),
157 scip_has_print_(has_print),
158 scip_has_parse_(has_parse),
159 scip_has_bwdiff_(has_bwdiff),
160 scip_has_fwdiff_(has_fwdiff),
161 scip_has_bwfwdiff_(has_bwfwdiff),
162 scip_has_inteval_(has_inteval),
163 scip_has_estimate_(has_estimate),
164 scip_has_initestimates_(has_initestimates),
165 scip_has_reverseprop_(has_reverseprop),
166 scip_has_hash_(has_hash),
167 scip_has_curvature_(has_curvature),
168 scip_has_monotonicity_(has_monotonicity),
169 scip_has_integrality_(has_integrality),
170 scip_has_getsymdata_(has_getsymdata)
171 {
172 /* the macro SCIPduplicateMemoryArray does not need the first argument: */
173 SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_name_, name, std::strlen(name)+1) );
174 SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_desc_, desc, std::strlen(desc)+1) );
175 }
176
177 /** copy constructor */
189 {
190 }
191
192 /** move constructor */
194 : scip_(o.scip_),
195 scip_name_(0),
196 scip_desc_(0),
216 {
217 std::swap(scip_name_, o.scip_name_);
218 std::swap(scip_desc_, o.scip_desc_);
219 }
220
221 /** destructor */
222 virtual ~ObjExprhdlr()
223 {
224 /* the macro SCIPfreeMemoryArray does not need the first argument: */
225 /*lint --e{64}*/
228 }
229
230 /** assignment of polymorphic classes causes slicing and is therefore disabled. */
231 ObjExprhdlr& operator=(const ObjExprhdlr& o) = delete;
232
233 /** assignment of polymorphic classes causes slicing and is therefore disabled. */
235
236 /** destructor of expression handler to free user data (called when SCIP is exiting)
237 *
238 * @see SCIP_DECL_EXPRFREEHDLR(x) in @ref type_expr.h
239 */
240 virtual SCIP_DECL_EXPRFREEHDLR(scip_freehdlr)
241 { /*lint --e{715}*/
242 return SCIP_OKAY;
243 }
244
245 /** point evaluation callback of expression handler
246 *
247 * @see SCIP_DECL_EXPREVAL(x) in @ref type_expr.h
248 */
249 virtual SCIP_DECL_EXPREVAL(scip_eval) = 0;
250
251 /** data copy callback of expression handler
252 *
253 * This method MUST be overridden if scip_has_copydata_ is TRUE.
254 *
255 * @see SCIP_DECL_EXPRCOPYDATA(x) in @ref type_expr.h
256 */
257 virtual SCIP_DECL_EXPRCOPYDATA(scip_copydata)
258 { /*lint --e{715}*/
259 /* This method MUST be overridden if scip_has_copydata_ is TRUE. */
260 return SCIP_NOTIMPLEMENTED;
261 }
262
263 /** data free callback of expression handler
264 *
265 * This method MUST be overridden if scip_has_freedata_ is TRUE.
266 *
267 * @see SCIP_DECL_EXPRFREEDATA(x) in @ref type_expr.h
268 */
269 virtual SCIP_DECL_EXPRFREEDATA(scip_freedata)
270 { /*lint --e{715}*/
271 /* This method MUST be overridden if scip_has_freedata_ is TRUE. */
272 return SCIP_NOTIMPLEMENTED;
273 }
274
275 /** simplify callback of expression handler
276 *
277 * This method MUST be overridden if scip_has_simplify_ is TRUE.
278 *
279 * @see SCIP_DECL_EXPRSIMPLIFY(x) in @ref type_expr.h
280 */
281 virtual SCIP_DECL_EXPRSIMPLIFY(scip_simplify)
282 { /*lint --e{715}*/
283 /* This method MUST be overridden if scip_has_simplify_ is TRUE. */
284 return SCIP_NOTIMPLEMENTED;
285 }
286
287 /** compare callback of expression handler
288 *
289 * This method MUST be overridden if scip_has_compare_ is TRUE.
290 *
291 * @see SCIP_DECL_EXPRCOMPARE(x) in @ref type_expr.h
292 */
293 virtual SCIP_DECL_EXPRCOMPARE(scip_compare)
294 { /*lint --e{715}*/
295 /* This method MUST be overridden if scip_has_compare_ is TRUE. */
296 return 0;
297 }
298
299 /** print callback of expression handler
300 *
301 * This method MUST be overridden if scip_has_print_ is TRUE.
302 *
303 * @see SCIP_DECL_EXPRPRINT(x) in @ref type_expr.h
304 */
305 virtual SCIP_DECL_EXPRPRINT(scip_print)
306 { /*lint --e{715}*/
307 /* This method MUST be overridden if scip_has_print_ is TRUE. */
308 return SCIP_NOTIMPLEMENTED;
309 }
310
311 /** parse callback of expression handler
312 *
313 * This method MUST be overridden if scip_has_parse_ is TRUE.
314 *
315 * @see SCIP_DECL_EXPRPARSE(x) in @ref type_expr.h
316 */
317 virtual SCIP_DECL_EXPRPARSE(scip_parse)
318 { /*lint --e{715}*/
319 /* This method MUST be overridden if scip_has_parse_ is TRUE. */
320 return SCIP_NOTIMPLEMENTED;
321 }
322
323 /** backward derivative evaluation callback of expression handler
324 *
325 * This method MUST be overridden if scip_has_bwdiff_ is TRUE.
326 *
327 * @see SCIP_DECL_EXPRBWDIFF(x) in @ref type_expr.h
328 */
329 virtual SCIP_DECL_EXPRBWDIFF(scip_bwdiff)
330 { /*lint --e{715}*/
331 /* This method MUST be overridden if scip_has_bwdiff_ is TRUE. */
332 return SCIP_NOTIMPLEMENTED;
333 }
334
335 /** forward derivative evaluation callback of expression handler
336 *
337 * This method MUST be overridden if scip_has_fwdiff_ is TRUE.
338 *
339 * @see SCIP_DECL_EXPRFWDIFF(x) in @ref type_expr.h
340 */
341 virtual SCIP_DECL_EXPRFWDIFF(scip_fwdiff)
342 { /*lint --e{715}*/
343 /* This method MUST be overridden if scip_has_fwdiff_ is TRUE. */
344 return SCIP_NOTIMPLEMENTED;
345 }
346
347 /** backward over forward derivative evaluation callback of expression handler
348 *
349 * This method MUST be overridden if scip_has_bwfwdiff_ is TRUE.
350 *
351 * @see SCIP_DECL_EXPRBWFWDIFF(x) in @ref type_expr.h
352 */
353 virtual SCIP_DECL_EXPRBWFWDIFF(scip_bwfwdiff)
354 { /*lint --e{715}*/
355 /* This method MUST be overridden if scip_has_bwfwdiff_ is TRUE. */
356 return SCIP_NOTIMPLEMENTED;
357 }
358
359 /** interval evaluation callback of expression handler
360 *
361 * This method MUST be overridden if scip_has_inteval_ is TRUE.
362 *
363 * @see SCIP_DECL_EXPRINTEVAL(x) in @ref type_expr.h
364 */
365 virtual SCIP_DECL_EXPRINTEVAL(scip_inteval)
366 { /*lint --e{715}*/
367 /* This method MUST be overridden if scip_has_inteval_ is TRUE. */
368 return SCIP_NOTIMPLEMENTED;
369 }
370
371 /** estimation callback of expression handler
372 *
373 * This method MUST be overridden if scip_has_estimate_ is TRUE.
374 *
375 * @see SCIP_DECL_EXPRESTIMATE(x) in @ref type_expr.h
376 */
377 virtual SCIP_DECL_EXPRESTIMATE(scip_estimate)
378 { /*lint --e{715}*/
379 /* This method MUST be overridden if scip_has_estimate_ is TRUE. */
380 return SCIP_NOTIMPLEMENTED;
381 }
382
383 /** initial estimators callback of expression handler
384 *
385 * This method MUST be overridden if scip_has_initestimates_ is TRUE.
386 *
387 * @see SCIP_DECL_EXPRINITESTIMATES(x) in @ref type_expr.h
388 */
389 virtual SCIP_DECL_EXPRINITESTIMATES(scip_initestimates)
390 { /*lint --e{715}*/
391 /* This method MUST be overridden if scip_has_initestimates_ is TRUE. */
392 return SCIP_NOTIMPLEMENTED;
393 }
394
395 /** reverse propagation callback of expression handler
396 *
397 * This method MUST be overridden if scip_has_reverseprop_ is TRUE.
398 *
399 * @see SCIP_DECL_EXPRREVERSEPROP(x) in @ref type_expr.h
400 */
401 virtual SCIP_DECL_EXPRREVERSEPROP(scip_reverseprop)
402 { /*lint --e{715}*/
403 /* This method MUST be overridden if scip_has_reverseprop_ is TRUE. */
404 return SCIP_NOTIMPLEMENTED;
405 }
406
407 /** hash callback of expression handler
408 *
409 * This method MUST be overridden if scip_has_hash_ is TRUE.
410 *
411 * @see SCIP_DECL_EXPRHASH(x) in @ref type_expr.h
412 */
413 virtual SCIP_DECL_EXPRHASH(scip_hash)
414 { /*lint --e{715}*/
415 /* This method MUST be overridden if scip_has_hash_ is TRUE. */
416 return SCIP_NOTIMPLEMENTED;
417 }
418
419 /** curvature callback of expression handler
420 *
421 * This method MUST be overridden if scip_has_curvature_ is TRUE.
422 *
423 * @see SCIP_DECL_EXPRCURVATURE(x) in @ref type_expr.h
424 */
425 virtual SCIP_DECL_EXPRCURVATURE(scip_curvature)
426 { /*lint --e{715}*/
427 /* This method MUST be overridden if scip_has_curvature_ is TRUE. */
428 return SCIP_NOTIMPLEMENTED;
429 }
430
431 /** monotonicity callback of expression handler
432 *
433 * This method MUST be overridden if scip_has_monotonicity_ is TRUE.
434 *
435 * @see SCIP_DECL_EXPRMONOTONICITY(x) in @ref type_expr.h
436 */
437 virtual SCIP_DECL_EXPRMONOTONICITY(scip_monotonicity)
438 { /*lint --e{715}*/
439 /* This method MUST be overridden if scip_has_monotonicity_ is TRUE. */
440 return SCIP_NOTIMPLEMENTED;
441 }
442
443 /** integrality callback of expression handler
444 *
445 * This method MUST be overridden if scip_has_integrality_ is TRUE.
446 *
447 * @see SCIP_DECL_EXPRINTEGRALITY(x) in @ref type_expr.h
448 */
449 virtual SCIP_DECL_EXPRINTEGRALITY(scip_integrality)
450 { /*lint --e{715}*/
451 /* This method MUST be overridden if scip_has_integrality_ is TRUE. */
452 return SCIP_NOTIMPLEMENTED;
453 }
454
455 /** symmetry information callback of expression handler
456 *
457 * This method MUST be overridden if scip_has_getsymdata_ is TRUE.
458 *
459 * @see SCIP_DECL_EXPRGETSYMDATA(x) in @ref type_expr.h
460 */
461 virtual SCIP_DECL_EXPRGETSYMDATA(scip_getsymdata)
462 { /*lint --e{715}*/
463 /* This method MUST be overridden if scip_has_getsymdata_ is TRUE. */
464 return SCIP_NOTIMPLEMENTED;
465 }
466};
467
468} /* namespace scip */
469
470
471
472/** creates the expression handler for the given expression handler object and includes it in SCIP
473 *
474 * The method should be called in one of the following ways:
475 *
476 * 1. The user is responsible of deleting the object:
477 * SCIP_CALL( SCIPcreate(&scip) );
478 * ...
479 * SCIP_EXPRHDLR* cexprhdlr;
480 * MyExprhdlr* myexprhdlr = new MyExprhdlr(...);
481 * SCIP_CALL( SCIPincludeObjExprhdlr(scip, &myexprhdlr, FALSE, &cexprhdlr) );
482 * ...
483 * SCIP_CALL( SCIPfree(&scip) );
484 * delete myexprhdlr; // delete exprhdlr AFTER SCIPfree() !
485 *
486 * 2. The object pointer is passed to SCIP and deleted by SCIP in the SCIPfree() call:
487 * SCIP_CALL( SCIPcreate(&scip) );
488 * ...
489 * SCIP_CALL( SCIPincludeObjExprhdlr(scip, new MyExprhdlr(...), TRUE) );
490 * ...
491 * SCIP_CALL( SCIPfree(&scip) ); // destructor of MyExprhdlr is called here
492 *
493 * Further, in case 1, the C plugin counterpart for myexprhdlr is stored in cexprhdlr.
494 */
495SCIP_EXPORT
497 SCIP* scip, /**< SCIP data structure */
498 scip::ObjExprhdlr* objexprhdlr, /**< expression handler object */
499 SCIP_Bool deleteobject, /**< should the expression handler object be deleted when exprhdlr is freed? */
500 SCIP_EXPRHDLR** cexprhdlr = 0 /**< buffer to store C plugin that corresponds to expression handler object, or 0 if not required */
501 );
502
503/** returns the exprhdlr object of the given name, or 0 if not existing */
504SCIP_EXPORT
506 SCIP* scip, /**< SCIP data structure */
507 const char* name /**< name of expression handler */
508 );
509
510/** returns the exprhdlr object for the given expression handler */
511SCIP_EXPORT
513 SCIP* scip, /**< SCIP data structure */
514 SCIP_EXPRHDLR* exprhdlr /**< expression handler */
515 );
516
517#endif
C++ wrapper for expression handlers.
Definition: objexprhdlr.h:54
virtual SCIP_DECL_EXPRSIMPLIFY(scip_simplify)
Definition: objexprhdlr.h:281
virtual SCIP_DECL_EXPRESTIMATE(scip_estimate)
Definition: objexprhdlr.h:377
virtual SCIP_DECL_EXPRCOPYDATA(scip_copydata)
Definition: objexprhdlr.h:257
virtual SCIP_DECL_EXPRGETSYMDATA(scip_getsymdata)
Definition: objexprhdlr.h:461
virtual ~ObjExprhdlr()
Definition: objexprhdlr.h:222
virtual SCIP_DECL_EXPRCOMPARE(scip_compare)
Definition: objexprhdlr.h:293
virtual SCIP_DECL_EXPRMONOTONICITY(scip_monotonicity)
Definition: objexprhdlr.h:437
ObjExprhdlr & operator=(const ObjExprhdlr &o)=delete
virtual SCIP_DECL_EXPRHASH(scip_hash)
Definition: objexprhdlr.h:413
const SCIP_Bool scip_has_reverseprop_
Definition: objexprhdlr.h:107
const unsigned int scip_precedence_
Definition: objexprhdlr.h:68
const SCIP_Bool scip_has_bwdiff_
Definition: objexprhdlr.h:89
const SCIP_Bool scip_has_hash_
Definition: objexprhdlr.h:110
virtual SCIP_DECL_EXPRFREEHDLR(scip_freehdlr)
Definition: objexprhdlr.h:240
ObjExprhdlr(ObjExprhdlr &&o)
Definition: objexprhdlr.h:193
const SCIP_Bool scip_has_fwdiff_
Definition: objexprhdlr.h:92
virtual SCIP_DECL_EXPRINITESTIMATES(scip_initestimates)
Definition: objexprhdlr.h:389
virtual SCIP_DECL_EXPRINTEGRALITY(scip_integrality)
Definition: objexprhdlr.h:449
const SCIP_Bool scip_has_bwfwdiff_
Definition: objexprhdlr.h:95
const SCIP_Bool scip_has_compare_
Definition: objexprhdlr.h:80
const SCIP_Bool scip_has_parse_
Definition: objexprhdlr.h:86
const SCIP_Bool scip_has_curvature_
Definition: objexprhdlr.h:113
ObjExprhdlr(const ObjExprhdlr &o)
Definition: objexprhdlr.h:178
ObjExprhdlr(SCIP *scip, const char *name, const char *desc, unsigned int precedence, SCIP_Bool has_copydata, SCIP_Bool has_freedata, SCIP_Bool has_simplify, SCIP_Bool has_compare, SCIP_Bool has_print, SCIP_Bool has_parse, SCIP_Bool has_bwdiff, SCIP_Bool has_fwdiff, SCIP_Bool has_bwfwdiff, SCIP_Bool has_inteval, SCIP_Bool has_estimate, SCIP_Bool has_initestimates, SCIP_Bool has_reverseprop, SCIP_Bool has_hash, SCIP_Bool has_curvature, SCIP_Bool has_monotonicity, SCIP_Bool has_integrality, SCIP_Bool has_getsymdata)
Definition: objexprhdlr.h:125
virtual SCIP_DECL_EXPRINTEVAL(scip_inteval)
Definition: objexprhdlr.h:365
ObjExprhdlr & operator=(ObjExprhdlr &&o)=delete
virtual SCIP_DECL_EXPRPRINT(scip_print)
Definition: objexprhdlr.h:305
const SCIP_Bool scip_has_initestimates_
Definition: objexprhdlr.h:104
virtual SCIP_DECL_EXPRCURVATURE(scip_curvature)
Definition: objexprhdlr.h:425
virtual SCIP_DECL_EXPRPARSE(scip_parse)
Definition: objexprhdlr.h:317
virtual SCIP_DECL_EXPRREVERSEPROP(scip_reverseprop)
Definition: objexprhdlr.h:401
const SCIP_Bool scip_has_integrality_
Definition: objexprhdlr.h:119
virtual SCIP_DECL_EXPREVAL(scip_eval)=0
const SCIP_Bool scip_has_freedata_
Definition: objexprhdlr.h:74
const SCIP_Bool scip_has_copydata_
Definition: objexprhdlr.h:71
virtual SCIP_DECL_EXPRFWDIFF(scip_fwdiff)
Definition: objexprhdlr.h:341
const SCIP_Bool scip_has_estimate_
Definition: objexprhdlr.h:101
virtual SCIP_DECL_EXPRBWDIFF(scip_bwdiff)
Definition: objexprhdlr.h:329
const SCIP_Bool scip_has_getsymdata_
Definition: objexprhdlr.h:122
virtual SCIP_DECL_EXPRFREEDATA(scip_freedata)
Definition: objexprhdlr.h:269
virtual SCIP_DECL_EXPRBWFWDIFF(scip_bwfwdiff)
Definition: objexprhdlr.h:353
const SCIP_Bool scip_has_print_
Definition: objexprhdlr.h:83
const SCIP_Bool scip_has_simplify_
Definition: objexprhdlr.h:77
const SCIP_Bool scip_has_monotonicity_
Definition: objexprhdlr.h:116
const SCIP_Bool scip_has_inteval_
Definition: objexprhdlr.h:98
#define SCIP_Bool
Definition: def.h:91
#define SCIP_CALL_ABORT(x)
Definition: def.h:334
#define SCIPduplicateMemoryArray(scip, ptr, source, num)
Definition: scip_mem.h:76
#define SCIPfreeMemoryArray(scip, ptr)
Definition: scip_mem.h:80
definition of base class for all clonable classes
scip::ObjExprhdlr * SCIPfindObjExprhdlr(SCIP *scip, const char *name)
scip::ObjExprhdlr * SCIPgetObjExprhdlr(SCIP *scip, SCIP_EXPRHDLR *exprhdlr)
SCIP_RETCODE SCIPincludeObjExprhdlr(SCIP *scip, scip::ObjExprhdlr *objexprhdlr, SCIP_Bool deleteobject, SCIP_EXPRHDLR **cexprhdlr=0)
SCIP callable library.
Definition of base class for all clonable classes.
Definition: objcloneable.h:48
@ SCIP_OKAY
Definition: type_retcode.h:42
@ SCIP_NOTIMPLEMENTED
Definition: type_retcode.h:61
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63