[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