[Archipelago-submits] [184] trunk/oneliner/lib/oneliner/superstring.rb: slight optimizations
nobody at rubyforge.org
nobody at rubyforge.org
Mon Jan 22 11:10:15 EST 2007
Revision: 184
Author: zond
Date: 2007-01-22 11:10:14 -0500 (Mon, 22 Jan 2007)
Log Message:
-----------
slight optimizations
Modified Paths:
--------------
trunk/oneliner/lib/oneliner/superstring.rb
Modified: trunk/oneliner/lib/oneliner/superstring.rb
===================================================================
--- trunk/oneliner/lib/oneliner/superstring.rb 2007-01-22 14:12:30 UTC (rev 183)
+++ trunk/oneliner/lib/oneliner/superstring.rb 2007-01-22 16:10:14 UTC (rev 184)
@@ -84,17 +84,26 @@
:seed => the_seed
}
- found_new_block = decode_chunk(chunk_data)
-
+ first_decode = @known_blocks < @nr_of_blocks
+ @known_blocks += chunk_data[:blocks].size
@known_chunks.unshift(chunk_data)
- if found_new_block
- nil while do_decode(context)
- end
-
- if decode_done
- self.replace(compact(@blocks[0... at nr_of_data_blocks])[0...requested_size])
- return true
+ if @known_blocks > @nr_of_blocks
+
+ interesting = true
+ interesting = decode_chunk(chunk_data) unless first_decode
+
+ if interesting
+ nil while do_decode(context)
+ end
+
+ if decode_done
+ self.replace(compact(@blocks[0... at nr_of_data_blocks])[0...requested_size])
+ return true
+ else
+ return false
+ end
+
else
return false
end
@@ -185,35 +194,25 @@
aux_block = @blocks[i]
if aux_block
- print "looking at aux block [#{i}](#{aux_block.inspect}):" if $DEBUG
-
source_blocks = @aux_hash[i]
if source_blocks.size == 1
block_nr = source_blocks.first
- print " [#{block_nr}]" if $DEBUG
-
if @blocks[block_nr].nil?
@blocks[block_nr] = aux_block
got_new_block = true
- print "! => [#{block_nr}]=#{aux_block.inspect}" if $DEBUG
check_facit(block_nr)
- else
- print " => #{aux_block.inspect}" if $DEBUG
end
else
missing_blocks = source_blocks.size
missing_block = nil
xor_sum = aux_block
source_blocks.each do |block|
- print " [#{block}]" if $DEBUG
source_block = @blocks[block]
if source_block
missing_blocks -= 1
xor_sum ^= source_block
- print "!" if $DEBUG
else
- print "?" if $DEBUG
missing_block = block
end
end
@@ -221,12 +220,10 @@
if missing_blocks == 1
@blocks[missing_block] = xor_sum
got_new_block = true
- print " => [#{missing_block}]=#{xor_sum.inspect}" if $DEBUG
check_facit(missing_block)
end
end
end
- puts if $DEBUG
end
return got_new_block
@@ -238,38 +235,28 @@
chunk_data[:context].seed(chunk_data[:seed])
chunk_data[:blocks].each_with_index do |block, i|
- print "looking at check block [#{i}](#{block.inspect}):" if $DEBUG
degree = get_degree(chunk_data[:context].random)
if degree == 1
block_nr = chunk_data[:context].random(@nr_of_blocks)
- print " [#{block_nr}]" if $DEBUG
-
if @blocks[block_nr].nil?
@blocks[block_nr] = block
got_new_block = true
- print "! => [#{block_nr}]=#{block.inspect}" if $DEBUG
check_facit(block_nr)
- else
- print " => #{block.inspect}" if $DEBUG
end
else
missing_blocks = degree
missing_block_nr = nil
xor_sum = block
- degree.downto(1) do
+ degree.times do
block_nr = chunk_data[:context].random(@nr_of_blocks)
- print " [#{block_nr}]" if $DEBUG
-
if @blocks[block_nr]
- print "!" if $DEBUG
xor_sum ^= @blocks[block_nr]
missing_blocks -= 1
else
- print "?" if $DEBUG
missing_block_nr = block_nr
end
@@ -278,11 +265,9 @@
if missing_blocks == 1
@blocks[missing_block_nr] = xor_sum
got_new_block = true
- print " => [#{missing_block_nr}]=#{xor_sum.inspect}" if $DEBUG
check_facit(missing_block_nr)
end
end
- puts if $DEBUG
end
return got_new_block
@@ -315,7 +300,8 @@
@blocks += Array.new(@nr_of_aux_blocks)
set_nr_of_blocks
@aux_hash = generate_aux_hash
- @known_chunks ||= []
+ @known_chunks = []
+ @known_blocks = 0
end
end
@@ -335,17 +321,13 @@
def generate_check_block(context, n)
degree = get_degree(context.random)
- print "generating check block [#{n}]:" if $DEBUG
block_nr = context.random(@nr_of_blocks)
rval = @blocks[block_nr]
- print " [#{block_nr}](#{@blocks[block_nr].inspect}), " if $DEBUG
2.upto(degree) do
block_nr = context.random(@nr_of_blocks)
rval ^= @blocks[block_nr]
- print " [#{block_nr}](#{@blocks[block_nr].inspect}), " if $DEBUG
end
- puts " => #{rval.inspect}" if $DEBUG
return rval
end
@@ -356,7 +338,6 @@
context.seed(@nr_of_data_blocks)
@blocks.each_with_index do |b, i|
- print "generating aux blocks for [#{i}](#{b.inspect}):" if $DEBUG
1.upto(Q) do
aux_block_nr = context.random(@nr_of_aux_blocks)
if rval[aux_block_nr].nil?
@@ -364,9 +345,7 @@
else
rval[aux_block_nr] ^= b
end
- print " #{aux_block_nr} => #{rval[aux_block_nr].inspect}, " if $DEBUG
end
- puts if $DEBUG
end
return rval
More information about the Archipelago-submits
mailing list