Class: XorKnuthHash
- Inherits:
-
Object
- Object
- XorKnuthHash
- Defined in:
- lib/hideous/xor_knuth_hash.rb
Constant Summary collapse
- MAXID =
2147483647
Class Method Summary collapse
- .calculate_prime_inverse(prime) ⇒ Object
-
.hash(record_id, prime, prime_inverse, rndxor, base) ⇒ Object
Convience class method pointing to the instance method.
-
.reverse_hash(hash, prime, prime_inverse, rndxor, base) ⇒ Object
Convience class method pointing to the instance method.
Instance Method Summary collapse
-
#hash ⇒ Object
obfuscates an integer.
-
#initialize(id_or_hash, prime, prime_inverse, rndxor, base) ⇒ XorKnuthHash
constructor
A new instance of XorKnuthHash.
-
#reverse_hash ⇒ Object
de-obfuscates an integer.
Constructor Details
#initialize(id_or_hash, prime, prime_inverse, rndxor, base) ⇒ XorKnuthHash
Returns a new instance of XorKnuthHash.
17 18 19 20 21 22 23 |
# File 'lib/hideous/xor_knuth_hash.rb', line 17 def initialize(id_or_hash, prime, prime_inverse, rndxor, base) @id_or_hash = id_or_hash @prime = prime @prime_inverse = prime_inverse @rndxor = rndxor @base = base end |
Class Method Details
.calculate_prime_inverse(prime) ⇒ Object
13 14 15 |
# File 'lib/hideous/xor_knuth_hash.rb', line 13 def self.calculate_prime_inverse(prime) self.modinv(prime, MAXID+1) end |
.hash(record_id, prime, prime_inverse, rndxor, base) ⇒ Object
Convience class method pointing to the instance method
4 5 6 |
# File 'lib/hideous/xor_knuth_hash.rb', line 4 def self.hash(record_id, prime, prime_inverse, rndxor, base) new(record_id, prime, prime_inverse, rndxor, base).hash end |
.reverse_hash(hash, prime, prime_inverse, rndxor, base) ⇒ Object
Convience class method pointing to the instance method
9 10 11 |
# File 'lib/hideous/xor_knuth_hash.rb', line 9 def self.reverse_hash(hash, prime, prime_inverse, rndxor, base) new(hash, prime, prime_inverse, rndxor, base).reverse_hash end |
Instance Method Details
#hash ⇒ Object
obfuscates an integer
26 27 28 |
# File 'lib/hideous/xor_knuth_hash.rb', line 26 def hash (((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(@base) end |
#reverse_hash ⇒ Object
de-obfuscates an integer
31 32 33 |
# File 'lib/hideous/xor_knuth_hash.rb', line 31 def reverse_hash ((@id_or_hash.to_i(@base) ^ @rndxor) * @prime_inverse) & MAXID end |