Exemple #1
0
uint64_t
Floating_hash (Floating* self)
{
	if (CACHE(self)->hash) {
		return CACHE(self)->hash;
	}

	mpfr_exp_t exp;
	char*      string = mpfr_get_str(NULL, &exp, 32, 0, *self->value, MPFR_RNDN);
	size_t     size   = strlen(string);

	CACHE(self)->hash = SIPHASH(RUNTIME_FOR(self), string, size + 1) ^ ((VALUE_TYPE_FLOATING << 4) ^ exp);

	return CACHE(self)->hash;
}
Exemple #2
0
hash_t
Floating_hash (Floating* self)
{
	if (CACHE(self)->hash) {
		return CACHE(self)->hash;
	}

	murmur3_t* state = MURMUR3_INIT(RUNTIME_FOR(self));

	MURMUR3_UPDATE_WITH(state, VALUE_TYPE_FLOATING);

	mpfr_exp_t exp;
	char*      string = mpfr_get_str(NULL, &exp, 32, 0, *self->value, MPFR_RNDN);
	size_t     size   = strlen(string);

	MURMUR3_UPDATE_WITH(state, exp);
	MURMUR3_UPDATE(state, string, size);

	CACHE(self)->hash = MURMUR3_FINAL(state);

	free(string);

	return CACHE(self)->hash;
}
Exemple #3
0
void
Floating_destroy (Floating* self)
{
	GC_SAVE_FLOATING(RUNTIME_FOR(self), self->value);
}