#ifndef __SCIP_OBJBENDERSCUT_H__
#define __SCIP_OBJBENDERSCUT_H__
#include <cassert>
#include <cstring>
#include <utility>
#include "scip/scip.h"
#include "objscip/objcloneable.h"
#include "objscip/objbenders.h"
namespace scip
{
class ObjBenderscut : public ObjCloneable
{
public:
SCIP* scip_;
char* scip_name_;
char* scip_desc_;
const int scip_priority_;
const SCIP_Bool scip_islpcut_;
ObjBenderscut(
SCIP* scip,
const char* name,
const char* desc,
int priority,
SCIP_Bool islpcut
)
: scip_(scip),
scip_name_(0),
scip_desc_(0),
scip_priority_(priority),
scip_islpcut_(islpcut)
{
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_name_, name, std::strlen(name)+1) );
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_desc_, desc, std::strlen(desc)+1) );
}
ObjBenderscut(const ObjBenderscut& o)
: ObjBenderscut(o.scip_, o.scip_name_, o.scip_desc_, o.scip_priority_, o.scip_islpcut_)
{
}
ObjBenderscut(ObjBenderscut&& o)
: scip_(o.scip_), scip_name_(0), scip_desc_(0), scip_priority_(o.scip_priority_), scip_islpcut_(o.scip_islpcut_)
{
std::swap(scip_name_, o.scip_name_);
std::swap(scip_desc_, o.scip_desc_);
}
virtual ~ObjBenderscut()
{
SCIPfreeMemoryArray(scip_, &scip_name_);
SCIPfreeMemoryArray(scip_, &scip_desc_);
}
ObjBenderscut& operator=(const ObjBenderscut& o) = delete;
ObjBenderscut& operator=(ObjBenderscut&& o) = delete;
virtual SCIP_DECL_BENDERSCUTCOPY(scip_copy)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTFREE(scip_free)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTINIT(scip_init)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTEXIT(scip_exit)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTINITSOL(scip_initsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTEXITSOL(scip_exitsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_BENDERSCUTEXEC(scip_exec) = 0;
};
}
SCIP_EXPORT
SCIP_RETCODE SCIPincludeObjBenderscut(
SCIP* scip,
scip::ObjBenders* objbenders,
scip::ObjBenderscut* objbenderscut,
SCIP_Bool deleteobject
);
SCIP_EXPORT
scip::ObjBenderscut* SCIPfindObjBenderscut(
scip::ObjBenders* objbenders,
const char* name
);
SCIP_EXPORT
scip::ObjBenderscut* SCIPgetObjBenderscut(
SCIP* scip,
SCIP_BENDERSCUT* benderscut
);
#endif