#ifndef __SCIP_OBJHEUR_H__
#define __SCIP_OBJHEUR_H__
#include <cstring>
#include <utility>
#include "scip/scip.h"
#include "objscip/objcloneable.h"
namespace scip
{
class ObjHeur : public ObjCloneable
{
public:
SCIP* scip_;
char* scip_name_;
char* scip_desc_;
const char scip_dispchar_;
const int scip_priority_;
const int scip_freq_;
const int scip_freqofs_;
const int scip_maxdepth_;
const SCIP_HEURTIMING scip_timingmask_;
const SCIP_Bool scip_usessubscip_;
ObjHeur(
SCIP* scip,
const char* name,
const char* desc,
char dispchar,
int priority,
int freq,
int freqofs,
int maxdepth,
SCIP_HEURTIMING timingmask,
SCIP_Bool usessubscip
)
: scip_(scip),
scip_name_(0),
scip_desc_(0),
scip_dispchar_(dispchar),
scip_priority_(priority),
scip_freq_(freq),
scip_freqofs_(freqofs),
scip_maxdepth_(maxdepth),
scip_timingmask_(timingmask),
scip_usessubscip_(usessubscip)
{
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_name_, name, std::strlen(name)+1) );
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_desc_, desc, std::strlen(desc)+1) );
}
ObjHeur(const ObjHeur& o)
: ObjHeur(o.scip_, o.scip_name_, o.scip_desc_, o.scip_dispchar_, o.scip_priority_, o.scip_freq_, o.scip_freqofs_,
o.scip_maxdepth_, o.scip_timingmask_, o.scip_usessubscip_)
{
}
ObjHeur(ObjHeur&& o)
: scip_(o.scip_),
scip_name_(0),
scip_desc_(0),
scip_dispchar_(o.scip_dispchar_),
scip_priority_(o.scip_priority_),
scip_freq_(o.scip_freq_),
scip_freqofs_(o.scip_freqofs_),
scip_maxdepth_(o.scip_maxdepth_),
scip_timingmask_(o.scip_timingmask_),
scip_usessubscip_(o.scip_usessubscip_)
{
std::swap(scip_name_, o.scip_name_);
std::swap(scip_desc_, o.scip_desc_);
}
virtual ~ObjHeur()
{
SCIPfreeMemoryArray(scip_, &scip_name_);
SCIPfreeMemoryArray(scip_, &scip_desc_);
}
ObjHeur& operator=(const ObjHeur& o) = delete;
ObjHeur& operator=(ObjHeur&& o) = delete;
virtual SCIP_DECL_HEURFREE(scip_free)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_HEURINIT(scip_init)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_HEUREXIT(scip_exit)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_HEURINITSOL(scip_initsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_HEUREXITSOL(scip_exitsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_HEUREXEC(scip_exec) = 0;
};
}
SCIP_EXPORT
SCIP_RETCODE SCIPincludeObjHeur(
SCIP* scip,
scip::ObjHeur* objheur,
SCIP_Bool deleteobject
);
SCIP_EXPORT
scip::ObjHeur* SCIPfindObjHeur(
SCIP* scip,
const char* name
);
SCIP_EXPORT
scip::ObjHeur* SCIPgetObjHeur(
SCIP* scip,
SCIP_HEUR* heur
);
#endif