Algorithm-ConsistentHash-Ketama
view release on metacpan or search on metacpan
xs/Ketama.xs view on Meta::CPAN
found = 1;
j = ketama->numpoints;
}
}
if (! found) {
croak("SANITY CHECK FAILED: Should not get here");
}
}
}
newketama->numbuckets = ketama->numbuckets;
}
return newketama;
}
static int
PerlKetama_mg_dup(pTHX_ MAGIC* const mg, CLONE_PARAMS* const param){
PERL_UNUSED_VAR(param);
#ifdef USE_ITHREADS /* single threaded perl has no "xxx_dup()" APIs */
PerlKetama* const ketama = (PerlKetama*)mg->mg_ptr;
mg->mg_ptr = (char *) PerlKetama_clone(ketama);
#else
PERL_UNUSED_VAR(mg);
#endif
return 0;
}
static MGVTBL PerlKetama_vtbl = { /* for identity */
NULL, /* get */
NULL, /* set */
NULL, /* len */
NULL, /* clear */
PerlKetama_mg_free, /* free */
NULL, /* copy */
PerlKetama_mg_dup, /* dup */
NULL, /* local */
};
MODULE = Algorithm::ConsistentHash::Ketama PACKAGE = Algorithm::ConsistentHash::Ketama PREFIX=PerlKetama_
PROTOTYPES: DISABLE
PerlKetama *
PerlKetama_xs_create(class_sv, hashfunc)
SV *class_sv;
int hashfunc;
void
PerlKetama_add_bucket(ketama, label, weight)
PerlKetama *ketama;
char *label;
int weight;
void
PerlKetama_remove_bucket(ketama, label)
PerlKetama *ketama;
char *label;
void
PerlKetama_buckets(ketama)
PerlKetama *ketama;
PPCODE:
/* since PerlKetama_buckets may push an unknown number of items
into the Perl stash, this is required */
XSRETURN( PerlKetama_buckets(ketama) );
char *
PerlKetama_hash(ketama, thing)
PerlKetama* ketama;
SV *thing;
void
PerlKetama_hash_with_hashnum(ketama, thing)
PerlKetama* ketama;
SV *thing;
PREINIT:
unsigned int hash;
char *ptr;
STRLEN len;
char *label;
PPCODE:
ptr = SvPV(thing, len);
label = ketama->hashfunc(ketama, ptr, len, &hash);
mXPUSHp(label, strlen(label));
mXPUSHu(hash);
XSRETURN(2);
void
PerlKetama_label_from_hashnum(ketama, thing)
PerlKetama* ketama;
unsigned int thing;
PREINIT:
char *label;
PPCODE:
label = ketama->hashfunc(ketama, NULL, 0, &thing);
XPUSHs(sv_2mortal(newSVpv(label, strlen(label))));
XSRETURN(1);
PerlKetama *
PerlKetama_clone(ketama)
PerlKetama *ketama;
PREINIT:
SV *class_sv = ST(0);
( run in 1.567 second using v1.01-cache-2.11-cpan-71847e10f99 )