Algorithm-CP-IZ
view release on metacpan or search on metacpan
PUSHMARK(sp);
PUTBACK;
count = call_sv(maxFailPerlFunc, G_SCALAR);
SPAGAIN;
ret = -1;
if (count <= 0) {
croak("search: MaxFailFunc returns nothing");
}
{
SV* v = POPs;
if (!SvIOK(v)) {
croak("search: MaxFailFunc returns bad value");
}
ret = (int)SvIV(v);
}
FREETMPS;
LEAVE;
return ret;
}
static IZBOOL noGoodSetFilterMethod(const char* meth,
CSnoGoodSet* ngs, CSnoGood* ng, CSint** vars, int size, void* ext)
{
SV* ngsObj = (SV*)ext;
IZBOOL ret = FALSE;
{
int i, n;
AV* elements;
SV* r;
HV* ngeh;
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(ngsObj);
elements = newAV();
n = cs_getNbNoGoodElements(ng);
ngeh = gv_stashpv("Algorithm::CP::IZ::NoGoodElement", 0);
for (i = 0; i < n; i++) {
AV* elem = newAV();
int idx;
CSvalueSelection vs;
cs_getNoGoodElementAt(&idx, &vs, ng, i);
av_push(elem, newSViv(idx));
av_push(elem, newSViv(vs.method));
av_push(elem, newSViv(vs.value));
r = (SV*)newRV_noinc((SV*)elem);
r = sv_bless(r, ngeh);
av_push(elements, r);
}
r = newRV_noinc((SV*)elements);
XPUSHs(sv_2mortal((SV*)r));
PUTBACK;
{
int count = call_method(meth, G_ARRAY);
SPAGAIN;
if (count > 0) {
ret = sv_true(POPs);
}
}
FREETMPS;
LEAVE;
}
return ret;
}
static IZBOOL noGoodSetPrefilterPerlWrapper(CSnoGoodSet* ngs, CSnoGood* ng, CSint** vars, int size, void* ext)
{
return noGoodSetFilterMethod("_prefilter", ngs, ng, vars, size, ext);
}
static IZBOOL noGoodSetFilterPerlWrapper(CSnoGoodSet* ngs, CSnoGood* ng, CSint** vars, int size, void* ext)
{
return noGoodSetFilterMethod("_filter", ngs, ng, vars, size, ext);
}
static void noGoodSetDestoryPerlWrapper(CSnoGoodSet* ngs, void* ext)
{
SV* ngsObj = (SV*)ext;
{
dTHX;
SvREFCNT_dec(ngsObj);
}
}
static void searchNotify_searchStart(int maxFails, CSint** allvars, int nbVars, void* ext) {
dTHX;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal((SV*)newRV(ext)));
XPUSHs(sv_2mortal((SV*)newSViv(maxFails)));
PUTBACK;
call_method("search_start", G_DISCARD);
FREETMPS;
LEAVE;
}
( run in 0.683 second using v1.01-cache-2.11-cpan-e1769b4cff6 )