Class: Digest::XXH64

Inherits:
XXHash show all
Defined in:
ext/digest/xxhash/ext.c,
ext/digest/xxhash/ext.c

Overview

This class implements XXH64.

Constant Summary

Constants inherited from XXHash

Digest::XXHash::VERSION, Digest::XXHash::XXH3_SECRET_SIZE_MIN

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from XXHash

#digest, digest, #hexdigest, hexdigest, idigest, #idigest, #idigest!, #initialize, #inspect

Constructor Details

This class inherits a constructor from Digest::XXHash

Class Method Details

.block_lengthInteger

Returns 8

Returns:

  • (Integer)


708
709
710
711
# File 'ext/digest/xxhash/ext.c', line 708

static VALUE _Digest_XXH64_singleton_block_length(VALUE self)
{
	return INT2FIX(_XXH64_BLOCK_SIZE);
}

.digest_lengthInteger

Returns 8

Returns:

  • (Integer)


698
699
700
701
# File 'ext/digest/xxhash/ext.c', line 698

static VALUE _Digest_XXH64_singleton_digest_length(VALUE self)
{
	return INT2FIX(_XXH64_DIGEST_SIZE);
}

Instance Method Details

#block_lengthInteger

Returns 8

Returns:

  • (Integer)


688
689
690
691
# File 'ext/digest/xxhash/ext.c', line 688

static VALUE _Digest_XXH64_block_length(VALUE self)
{
	return INT2FIX(_XXH64_BLOCK_SIZE);
}

#digest_lengthInteger

Returns 8

Returns:

  • (Integer)


678
679
680
681
# File 'ext/digest/xxhash/ext.c', line 678

static VALUE _Digest_XXH64_digest_length(VALUE self)
{
	return INT2FIX(_XXH64_DIGEST_SIZE);
}

#initialize_copy(orig) ⇒ self

This method is called when instances are cloned. It is responsible for replicating internal data.

Returns:

  • (self)


667
668
669
670
671
# File 'ext/digest/xxhash/ext.c', line 667

static VALUE _Digest_XXH64_initialize_copy(VALUE self, VALUE orig)
{
	XXH64_copyState(_get_state_xxh64(self), _get_state_xxh64(orig));
	return self;
}

#reset(seed = 0) ⇒ self

Resets state to initial form with seed.

This discards previous calculations with #update.

seed can be in the form of a string, a hex string, or a number. Its virtual length should be 64-bits.

If seed is not provided, the default value would be 0.

Returns:

  • (self)


614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
# File 'ext/digest/xxhash/ext.c', line 614

static VALUE _Digest_XXH64_reset(int argc, VALUE* argv, VALUE self)
{
	VALUE seed;

	if (rb_scan_args(argc, argv, "01", &seed) > 0) {
		switch (TYPE(seed)) {
		case T_STRING:
			{
				int len = RSTRING_LEN(seed);
				XXH64_hash_t decoded_seed;

				if (len == _TWICE(sizeof(XXH64_hash_t))) {
					unsigned char hex_decoded_seed[sizeof(XXH64_hash_t)];

					if (! hex_decode_str_implied(_RSTRING_PTR_U(seed), len, hex_decoded_seed))
						rb_raise(rb_eArgError, "Invalid hex string seed: %s\n",
								StringValueCStr(seed));

					decoded_seed = XXH_readBE64(hex_decoded_seed);
				} else if (len == sizeof(XXH64_hash_t)) {
					decoded_seed = XXH_readBE64(RSTRING_PTR(seed));
				} else {
					rb_raise(rb_eArgError, "Invalid seed length.  "
							"Expecting a 16-character hex string or an 8-byte string.");
				}

				_xxh64_reset(_get_state_xxh64(self), decoded_seed);
			}

			break;
		case T_FIXNUM:
			_xxh64_reset(_get_state_xxh64(self), FIX2UINT(seed));
			break;
		case T_BIGNUM:
			_xxh64_reset(_get_state_xxh64(self), NUM2ULL(seed));
			break;
		default:
			rb_raise(rb_eArgError, "Invalid argument type for 'seed'.  "
					"Expecting a string or a number.");
		}
	} else {
		_xxh64_reset(_get_state_xxh64(self), _XXH64_DEFAULT_SEED);
	}

	return self;
}

#update(str) ⇒ self

Updates current digest value with string.

Returns:

  • (self)


578
579
580
581
582
583
584
# File 'ext/digest/xxhash/ext.c', line 578

static VALUE _Digest_XXH64_update(VALUE self, VALUE str)
{
	if (XXH64_update(_get_state_xxh64(self), RSTRING_PTR(str), RSTRING_LEN(str)) != XXH_OK)
		rb_raise(rb_eRuntimeError, "Failed to update state.");

	return self;
}