19 #include "absl/status/status.h"
24 #include "scip/scip.h"
25 #include "scip/scip_event.h"
26 #include "scip/type_event.h"
36 VLOG(3) <<
"EventExec";
37 CHECK_NE(scip,
nullptr);
38 CHECK_NE(eventhdlr,
nullptr);
39 CHECK_NE(event,
nullptr);
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";
51 CHECK_NE(scip,
nullptr);
52 CHECK_NE(eventhdlr,
nullptr);
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";
63 CHECK_NE(scip,
nullptr);
64 CHECK_NE(eventhdlr,
nullptr);
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";
77 CHECK_NE(scip,
nullptr);
78 CHECK_NE(eventhdlr,
nullptr);
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.";
94 CHECK_EQ(event_handler_,
nullptr);
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)));
106 CHECK_NE(event_handler_,
nullptr);
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));
121 CHECK_GE(filter_pos, 0);
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();
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
#define VLOG(verboselevel)