#ifndef __SCIP_OBJDISP_H__
#define __SCIP_OBJDISP_H__
#include <cstring>
#include <utility>
#include "scip/scip.h"
#include "objscip/objcloneable.h"
namespace scip
{
class ObjDisp : public ObjCloneable
{
public:
SCIP* scip_;
char* scip_name_;
char* scip_desc_;
char* scip_header_;
const int scip_width_;
const int scip_priority_;
const int scip_position_;
const SCIP_Bool scip_stripline_;
ObjDisp(
SCIP* scip,
const char* name,
const char* desc,
const char* header,
int width,
int priority,
int position,
SCIP_Bool stripline
)
: scip_(scip),
scip_name_(0),
scip_desc_(0),
scip_header_(0),
scip_width_(width),
scip_priority_(priority),
scip_position_(position),
scip_stripline_(stripline)
{
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_name_, name, std::strlen(name)+1) );
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_desc_, desc, std::strlen(desc)+1) );
SCIP_CALL_ABORT( SCIPduplicateMemoryArray(scip_, &scip_header_, header, std::strlen(header)+1) );
}
ObjDisp(const ObjDisp& o)
: ObjDisp(o.scip_, o.scip_name_, o.scip_desc_, o.scip_header_, o.scip_width_, o.scip_priority_, o.scip_position_,
o.scip_stripline_)
{
}
ObjDisp(ObjDisp&& o)
: scip_(o.scip_),
scip_name_(0),
scip_desc_(0),
scip_header_(0),
scip_width_(o.scip_width_),
scip_priority_(o.scip_priority_),
scip_position_(o.scip_position_),
scip_stripline_(o.scip_stripline_)
{
std::swap(scip_name_, o.scip_name_);
std::swap(scip_desc_, o.scip_desc_);
std::swap(scip_header_, o.scip_header_);
}
virtual ~ObjDisp()
{
SCIPfreeMemoryArray(scip_, &scip_name_);
SCIPfreeMemoryArray(scip_, &scip_desc_);
SCIPfreeMemoryArray(scip_, &scip_header_);
}
ObjDisp& operator=(const ObjDisp& o) = delete;
ObjDisp& operator=(ObjDisp&& o) = delete;
virtual SCIP_DECL_DISPFREE(scip_free)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_DISPINIT(scip_init)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_DISPEXIT(scip_exit)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_DISPINITSOL(scip_initsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_DISPEXITSOL(scip_exitsol)
{
return SCIP_OKAY;
}
virtual SCIP_DECL_DISPOUTPUT(scip_output) = 0;
};
}
SCIP_EXPORT
SCIP_RETCODE SCIPincludeObjDisp(
SCIP* scip,
scip::ObjDisp* objdisp,
SCIP_Bool deleteobject
);
SCIP_EXPORT
scip::ObjDisp* SCIPfindObjDisp(
SCIP* scip,
const char* name
);
SCIP_EXPORT
scip::ObjDisp* SCIPgetObjDisp(
SCIP* scip,
SCIP_DISP* disp
);
#endif