Crypt-xxHash

 view release on metacpan or  search on metacpan

xs/xxHash.xs  view on Meta::CPAN

#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 2.647 seconds using v1.01-cache-2.11-cpan-71847e10f99 )