20 std::unique_ptr<CallbackFactory> m_callback_factory;
22 CallbackAsBranchAndBoundCallback(
const CallbackAsBranchAndBoundCallback& t_src)
23 : m_callback_factory(t_src.m_callback_factory->clone()) {}
28 friend class ::idol::CallbackAsBranchAndBoundCallback<NodeInfoT>;
31 friend class Strategy;
35 explicit Interface(Strategy& t_parent) : m_parent(t_parent) {}
50 auto* info =
new NodeInfoT();
51 info->set_primal_solution(std::move(t_solution));
55 [[nodiscard]] PrimalPoint primal_solution()
const override {
56 return m_parent.
node().info().primal_solution();
59 [[nodiscard]]
const Timer &time()
const override {
60 return m_parent.time();
63 double best_obj()
const override {
64 return m_parent.best_obj();
67 double best_bound()
const override {
68 return m_parent.best_bound();
71 void terminate()
override {
77 Interface m_interface;
78 std::unique_ptr<Callback> m_callback;
80 explicit Strategy(
Callback* t_cb) : m_callback(t_cb), m_interface(*
this) {}
83 m_interface.execute(*m_callback, t_event);
88 : m_callback_factory(t_factory.clone()) {}
90 BranchAndBoundCallback<NodeInfoT> *operator()()
override {
91 auto* cb = m_callback_factory->operator()();
92 return new Strategy(cb);
95 BranchAndBoundCallbackFactory<NodeInfoT> *clone()
const override {
96 return new CallbackAsBranchAndBoundCallback<NodeInfoT>(*
this);