19#include "absl/status/status.h"
25#include "scip/scip_event.h"
26#include "scip/type_event.h"
36 VLOG(3) <<
"EventExec";
41 SCIP_EVENTHDLRDATA*
const event_handler_data =
42 SCIPeventhdlrGetData(eventhdlr);
43 CHECK_NE(event_handler_data,
nullptr);
45 return event_handler_data->handler->Execute(
46 {event_handler_data->gscip, SCIPeventGetType(event)});
50 VLOG(3) <<
"EventInit";
54 SCIP_EVENTHDLRDATA*
const event_handler_data =
55 SCIPeventhdlrGetData(eventhdlr);
56 CHECK_NE(event_handler_data,
nullptr);
58 return event_handler_data->handler->Init(event_handler_data->gscip);
62 VLOG(3) <<
"EventExit";
66 SCIP_EVENTHDLRDATA*
const event_handler_data =
67 SCIPeventhdlrGetData(eventhdlr);
68 CHECK_NE(event_handler_data,
nullptr);
72 return event_handler_data->handler->Exit(event_handler_data->gscip);
76 VLOG(3) <<
"EventFree";
80 SCIP_EVENTHDLRDATA*
const event_handler_data =
81 SCIPeventhdlrGetData(eventhdlr);
82 CHECK_NE(event_handler_data,
nullptr);
84 delete event_handler_data;
85 SCIPeventhdlrSetData(eventhdlr,
nullptr);
93 CHECK_EQ(gscip_,
nullptr) <<
"Already registered.";
99 SCIP_EVENTHDLRDATA*
const event_handler_data =
new SCIP_EVENTHDLRDATA;
100 event_handler_data->gscip = gscip;
101 event_handler_data->handler =
this;
104 gscip->
scip(), &event_handler_, description_.
name.c_str(),
105 description_.
description.c_str(), EventExec, event_handler_data)));
109 SCIPsetEventhdlrInit(gscip->
scip(), event_handler_, EventInit)));
111 SCIPsetEventhdlrExit(gscip->
scip(), event_handler_, EventExit)));
113 SCIPsetEventhdlrFree(gscip->
scip(), event_handler_, EventFree)));
119 SCIP_CALL(SCIPcatchEvent(gscip_->
scip(), event_type, event_handler_,
120 nullptr, &filter_pos));
123 caught_events_.emplace_back(event_type, filter_pos);
129 for (
const GScipEventHandler::CaughtEvent& caught_event :
130 handler.caught_events_) {
131 SCIP_CALL(SCIPdropEvent(handler.gscip_->
scip(), caught_event.event_type,
132 handler.event_handler_,
133 nullptr, caught_event.filter_pos));
136 handler.caught_events_.clear();
#define CHECK_EQ(val1, val2)
#define CHECK_GE(val1, val2)
#define CHECK_NE(val1, val2)
#define VLOG(verboselevel)
void Register(GScip *gscip)
SCIP_RETCODE CatchEvent(SCIP_EVENTTYPE event_type)
static SCIP_DECL_EVENTEXIT(EventExit)
static SCIP_DECL_EVENTFREE(EventFree)
static SCIP_DECL_EVENTEXEC(EventExec)
static SCIP_DECL_EVENTINIT(EventInit)
Collection of objects used to extend the Constraint Solver library.
SCIP_RETCODE DropAllEvents(GScipEventHandler &handler)
#define SCIP_TO_STATUS(x)
operations_research::GScip * gscip
operations_research::GScipEventHandler * handler