/** creates the integer objective value separator and includes it in SCIP */ SCIP_RETCODE SCIPincludeSepaIntobj( SCIP* scip /**< SCIP data structure */ ) { SCIP_SEPADATA* sepadata; SCIP_EVENTHDLRDATA* eventhdlrdata; /* create intobj separator data */ SCIP_CALL( sepadataCreate(scip, &sepadata) ); /* include separator */ SCIP_CALL( SCIPincludeSepa(scip, SEPA_NAME, SEPA_DESC, SEPA_PRIORITY, SEPA_FREQ, SEPA_MAXBOUNDDIST, SEPA_USESSUBSCIP, SEPA_DELAY, sepaCopyIntobj, sepaFreeIntobj, sepaInitIntobj, sepaExitIntobj, sepaInitsolIntobj, sepaExitsolIntobj, sepaExeclpIntobj, sepaExecsolIntobj, sepadata) ); /* include event handler for objective change events */ eventhdlrdata = (SCIP_EVENTHDLRDATA*)sepadata; SCIP_CALL( SCIPincludeEventhdlr(scip, EVENTHDLR_NAME, EVENTHDLR_DESC, NULL, eventFreeIntobj, eventInitIntobj, eventExitIntobj, eventInitsolIntobj, eventExitsolIntobj, eventDeleteIntobj, eventExecIntobj, eventhdlrdata) ); return SCIP_OKAY; }
/** creates the event handler for the given event handler object and includes it in SCIP */ SCIP_RETCODE SCIPincludeObjEventhdlr( SCIP* scip, /**< SCIP data structure */ scip::ObjEventhdlr* objeventhdlr, /**< event handler object */ SCIP_Bool deleteobject /**< should the event handler object be deleted when eventhdlristic is freed? */ ) { SCIP_EVENTHDLRDATA* eventhdlrdata; assert(scip != NULL); assert(objeventhdlr != NULL); /* create event handler data */ eventhdlrdata = new SCIP_EVENTHDLRDATA; eventhdlrdata->objeventhdlr = objeventhdlr; eventhdlrdata->deleteobject = deleteobject; /* include event handler */ SCIP_CALL( SCIPincludeEventhdlr(scip, objeventhdlr->scip_name_, objeventhdlr->scip_desc_, eventhdlrCopyObj, eventhdlrFreeObj, eventhdlrInitObj, eventhdlrExitObj, eventhdlrInitsolObj, eventhdlrExitsolObj, eventhdlrDeleteObj, eventhdlrExecObj, eventhdlrdata) ); /*lint !e429*/ return SCIP_OKAY; /*lint !e429*/ }
/** creates the event handler for the given event handler object and includes it in SCIP */ JNIEXPORT void JNISCIP(includeJavaEventhdlr)( JNIEnv* env, /**< JNI environment variable */ jobject jobj, /**< JNI class pointer */ jlong jscip, /**< SCIP data structure */ jclass javaeventhdlr, /**< event handler object */ jboolean deleteobject /**< should the event handler object be deleted when eventhdlristic is freed? */ ) { SCIP* scip; SCIP_EVENTHDLRDATA* eventhdlrdata; jstring jname; jstring jdesc; jboolean iscopy; jfieldID fieldID; const char* name; const char* desc; /* convert JNI pointer into C pointer */ scip = (SCIP*) (size_t) jscip; assert(scip != NULL); /* create event handler data */ JNISCIP_CALL( SCIPallocMemory(scip, &eventhdlrdata) ); /* store JNI environment */ eventhdlrdata->env = env; eventhdlrdata->jobj = jobj; /* store java class pointer */ eventhdlrdata->javaeventhdlr = javaeventhdlr; /* collect for all callback methods the methods id and store these in the event handler data */ eventhdlrdata->scip_free = (*env)->GetMethodID(env, javaeventhdlr, "scip_free", "(JJ)V"); eventhdlrdata->scip_init = (*env)->GetMethodID(env, javaeventhdlr, "scip_init", "(JJ)V"); eventhdlrdata->scip_exit = (*env)->GetMethodID(env, javaeventhdlr, "scip_exit", "(JJ)V"); eventhdlrdata->scip_initsol = (*env)->GetMethodID(env, javaeventhdlr, "scip_initsol", "(JJ)V"); eventhdlrdata->scip_exitsol = (*env)->GetMethodID(env, javaeventhdlr, "scip_exitsol", "(JJ)V"); eventhdlrdata->scip_delete = (*env)->GetMethodID(env, javaeventhdlr, "scip_delete", "(JJ)V"); eventhdlrdata->scip_exec = (*env)->GetMethodID(env, javaeventhdlr, "scip_exec", "(JJJJ)V"); eventhdlrdata->deleteobject = deleteobject; /* collect event handler name */ fieldID = (*env)->GetFieldID(env, javaeventhdlr, "name", "Ljava/lang/String;"); jname = (*env)->GetObjectField(env, jobj, fieldID); /* convert JNI string into const char* */ name = (*env)->GetStringUTFChars(env, jname, &iscopy); assert(name != NULL); assert(iscopy); /* collect event handler description */ fieldID = (*env)->GetFieldID(env, javaeventhdlr, "desc", "Ljava/lang/String;"); jdesc = (*env)->GetObjectField(env, jobj, fieldID); /* convert JNI string into const char* */ desc = (*env)->GetStringUTFChars(env, jdesc, &iscopy); assert(desc != NULL); assert(iscopy); /* include event handler */ JNISCIP_CALL( SCIPincludeEventhdlr(scip, name, desc, eventhdlrCopyJava, eventhdlrFreeJava, eventhdlrInitJava, eventhdlrExitJava, eventhdlrInitsolJava, eventhdlrExitsolJava, eventhdlrDeleteJava, eventhdlrExecJava, eventhdlrdata) ); /*lint !e429*/ (*env)->ReleaseStringUTFChars(env, jname, name); (*env)->ReleaseStringUTFChars(env, jdesc, desc); }