Algorithm-PageRank-XS
view release on metacpan or search on metacpan
else
array_push(tmp, from);
}
void
iterate(SV * num)
CODE:
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"iterate() is not supported by Algorithm::PageRank::XS.");
SV *
result(pagerank p)
PREINIT:
HV * results;
SV * curkey, * curval;
int i;
char * reskey;
STRLEN len;
Array * result;
SV ** res;
INIT:
results = (AV *)sv_2mortal((SV *)newAV());
CODE:
if (p->num_elements < 2)
croak("Only one element in pagerank table.");
result = page_rank(p->main_table, p->num_elements, p->alpha, p->convergence,
p->max_tries);
if (!result) {
/* To prevent us from running twice. */
clear(aTHX_ p);
croak("pageRank calculation failed.");
}
results = newHV();
curkey = sv_newmortal();
for (i = 0; i < array_len(result); i++) {
sv_setuv(curkey, i);
reskey = SvPV(curkey, len);
res = hv_fetch(p->rev_map, reskey, len, 0);
if (res == NULL) {
clear(aTHX_ p);
croak("pageRank calculation failed -- couldn't find label");
}
reskey = SvPV(*res, len);
curval = newSVnv(array_get(result, i));
hv_store(results, reskey, len, curval, 0);
}
array_delete(result);
RETVAL = newRV((SV *)results);
clear(aTHX_ p);
OUTPUT:
RETVAL
void
DESTROY(pagerank p)
PREINIT:
SV *x;
PPCODE:
hv_undef(p->dim_map);
hv_undef(p->rev_map);
table_delete(p->main_table);
Safefree(p);
BOOT:
if (MAX_SIZE < 0) croak("signed size_t?");
( run in 2.360 seconds using v1.01-cache-2.11-cpan-71847e10f99 )