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