#ifndef __SCIP_OBJNODESEL_H__
#define __SCIP_OBJNODESEL_H__
#include <cstring>
#include <utility>
#include "scip/scip.h"
#include "objscip/objcloneable.h"
namespace scip
{
class ObjNodesel : public ObjCloneable
{
public:
SCIP* scip_;
char* scip_name_;
char* scip_desc_;
const int scip_stdpriority_;
const int scip_memsavepriority_;
ObjNodesel(
SCIP* scip,
const char* name,
const char* desc,
int stdpriority,
int memsavepriority
)
: scip_(scip),
scip_name_(0),
scip_desc_(0),
scip_stdpriority_(stdpriority),
scip_memsavepriority_(memsavepriority)
{
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_name_, name, std::strlen(name)+1) );
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_desc_, desc, std::strlen(desc)+1) );
}
ObjNodesel(const ObjNodesel& o)
: ObjNodesel(o.scip_, o.scip_name_, o.scip_desc_, o.scip_stdpriority_, o.scip_memsavepriority_)
{
}
ObjNodesel(ObjNodesel&& o)
: scip_(o.scip_),
scip_name_(0),
scip_desc_(0),
scip_stdpriority_(o.scip_stdpriority_),
scip_memsavepriority_(o.scip_memsavepriority_)
{
std::swap(scip_name_, o.scip_name_);
std::swap(scip_desc_, o.scip_desc_);
}
virtual ~ObjNodesel()
{
SCIPfreeMemoryArray(scip_, &scip_name_);
SCIPfreeMemoryArray(scip_, &scip_desc_);
}
ObjNodesel& operator=(const ObjNodesel& o) = delete;
ObjNodesel& operator=(ObjNodesel&& o) = delete;
virtual SCIP_DECL_NODESELFREE(scip_free)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_NODESELINIT(scip_init)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_NODESELEXIT(scip_exit)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_NODESELINITSOL(scip_initsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_NODESELEXITSOL(scip_exitsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_NODESELSELECT(scip_select) = 0;
virtual SCIP_DECL_NODESELCOMP(scip_comp) = 0;
};
}
SCIP_EXPORT
SCIP_RETCODE SCIPincludeObjNodesel(
SCIP* scip,
scip::ObjNodesel* objnodesel,
SCIP_Bool deleteobject
);
SCIP_EXPORT
scip::ObjNodesel* SCIPfindObjNodesel(
SCIP* scip,
const char* name
);
SCIP_EXPORT
scip::ObjNodesel* SCIPgetObjNodesel(
SCIP* scip,
SCIP_NODESEL* nodesel
);
#endif