Class: Flare::Util::KeyResolver::Modular
- Inherits:
-
Object
- Object
- Flare::Util::KeyResolver::Modular
- Defined in:
- lib/flare/util/key_resolver.rb
Instance Method Summary collapse
- #calculate(psize) ⇒ Object
-
#initialize(params) ⇒ Modular
constructor
A new instance of Modular.
- #map(partition_size, virtual) ⇒ Object
- #resolve(key_hash_value, partition_size) ⇒ Object
Constructor Details
#initialize(params) ⇒ Modular
Returns a new instance of Modular.
10 11 12 13 14 15 16 17 |
# File 'lib/flare/util/key_resolver.rb', line 10 def initialize params @partition_size = params[:partition_size] || 1024 @virtual = params[:virtual] || 4096 @hint = params[:hint] || 1 @map = Array.new(@partition_size+1).map!{Array.new(@virtual, -1)} @next_calculate = 0 calculate 1 end |
Instance Method Details
#calculate(psize) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/flare/util/key_resolver.rb', line 19 def calculate psize return if psize < @next_calculate (@next_calculate..psize).each do |i| if i == 0 (0...@virtual).each do |j| @map[i][j] = 0 end else counter = Array.new(psize, 0) (0...@virtual).each do |j| if i <= @hint @map[i][j] = j % i else k = @map[i-1][j] counter[k] += 1 if (counter[k] % i) == (i - 1) @map[i][j] = i - 1 else @map[i][j] = @map[i-1][j] end end end end end @next_calculate = psize+1 end |
#map(partition_size, virtual) ⇒ Object
51 52 53 54 |
# File 'lib/flare/util/key_resolver.rb', line 51 def map partition_size, virtual calculate partition_size @map[partition_size][virtual] end |
#resolve(key_hash_value, partition_size) ⇒ Object
46 47 48 49 |
# File 'lib/flare/util/key_resolver.rb', line 46 def resolve key_hash_value, partition_size calculate partition_size @map[partition_size][key_hash_value % @virtual] end |