Crypt-xxHash
view release on metacpan or search on metacpan
xs/xxHash.xs view on Meta::CPAN
char*
xxhash32_hex ( const char *input, int length(input), UV seed )
CODE:
static char value32[9];
static const char *format = "%08x";
#ifdef CPP
sprintf(value32, format, (uint32_t) XXH32(input, STRLEN_length_of_input, move(seed)) );
#else
sprintf(value32, format, (uint32_t) XXH32(input, STRLEN_length_of_input, seed) );
#endif
RETVAL = value32;
OUTPUT:
RETVAL
char*
xxhash64_hex( const char *input, int length(input), UV seed )
CODE:
static char value64[17];
static const char *format = "%016" PRIx64;
#ifdef CPP
sprintf(value64, format, (uint64_t) XXH64(input, STRLEN_length_of_input, move(seed)) );
#else
sprintf(value64, format, (uint64_t) XXH64(input, STRLEN_length_of_input, seed) );
#endif
RETVAL = value64;
OUTPUT:
RETVAL
char*
xxhash3_64bits_hex( const char *input, int length(input), UV seed )
CODE:
static char value64[17];
static const char *format = "%016" PRIx64;
#ifdef CPP
sprintf(value64, format, (uint64_t) XXH3_64bits_withSeed(input, STRLEN_length_of_input, move(seed)) );
#else
sprintf(value64, format, (uint64_t) XXH3_64bits_withSeed(input, STRLEN_length_of_input, seed) );
#endif
RETVAL = value64;
OUTPUT:
RETVAL
char*
xxhash3_128bits_hex( const char *input, int length(input), UV seed )
CODE:
static char value64[33];
static const char *format = "%016" PRIx64 "%016" PRIx64;
#ifdef CPP
XXH128_hash_t hash = XXH3_128bits_withSeed(input, STRLEN_length_of_input, move(seed));
#else
XXH128_hash_t hash = XXH3_128bits_withSeed(input, STRLEN_length_of_input, seed);
#endif
sprintf(value64, format, (uint64_t) hash.high64, (uint64_t) hash.low64 );
RETVAL = value64;
OUTPUT:
RETVAL
void
xxhash3_64bits_stream( UV seed )
PPCODE:
XXH64_state_t * state = XXH64_createState();
if( !state )
croak("Allocate 64bits xxHash state failed.");
if( XXH64_reset(state, seed) == XXH_ERROR )
croak("Initialize 64bits xxHash state failed.");
SV *canceller = NEWSV(0, 0);
SvUPGRADE(canceller, SVt_PVMG);
sv_magicext(canceller, NULL, PERL_MAGIC_ext, &canceller_vtbl, (const char*)state, 0);
mPUSHs(newRV_noinc(canceller));
void
xxhash3_64bits_stream_update(SV * state_RV, SV * data_SV)
PPCODE:
if( !SvROK(state_RV) )
croak("This is not a 64bits xxHash state variable.");
MAGIC * mg = mg_findext(SvRV(state_RV), PERL_MAGIC_ext, &canceller_vtbl);
if( !mg )
croak("This is not a 64bits xxHash state variable.");
STRLEN len;
char * buf = SvPV(data_SV, len);
if( XXH64_update((XXH64_state_t*)mg->mg_ptr, buf, len) == XXH_ERROR )
croak("Update 64bits xxHash state failed.");
void
xxhash3_64bits_stream_digest(SV * state_RV)
PPCODE:
dXSTARG;
if( !SvROK(state_RV) )
croak("This is not a 64bits xxHash state variable.");
MAGIC * mg = mg_findext(SvRV(state_RV), PERL_MAGIC_ext, &canceller_vtbl);
if( !mg )
croak("This is not a 64bits xxHash state variable.");
PUSHu((UV) XXH64_digest((XXH64_state_t*)mg->mg_ptr));
void
xxhash3_64bits_stream_digest_hex(SV * state_RV)
PPCODE:
if( !SvROK(state_RV) )
croak("This is not a 64bits xxHash state variable.");
MAGIC * mg = mg_findext(SvRV(state_RV), PERL_MAGIC_ext, &canceller_vtbl);
if( !mg )
croak("This is not a 64bits xxHash state variable.");
mPUSHs(newSVpvf("%016" PRIx64, (uint64_t)XXH64_digest((XXH64_state_t*)mg->mg_ptr)));
( run in 0.921 second using v1.01-cache-2.11-cpan-71847e10f99 )