class Protocol::HPACK::Huffman::Generator::Node

def self.generate_machine

def self.generate_machine
	generate_tree
	
	# Using un-ordered sets (potentially) produces non-deterministic results:
	togo = Set[@root]
	@states = Set[@root]
	
	until togo.empty?
		node = togo.first
		togo.delete(node)
		
		next if node.transitions
		node.transitions = Array[1 << BITS_AT_ONCE]
		
		(1 << BITS_AT_ONCE).times do |input|
			n = node
			emit = +""
			(BITS_AT_ONCE - 1).downto(0) do |i|
				bit = (input & (1 << i)).zero? ? 0 : 1
				n = n.next[bit]
				next unless n.emit
				if n.emit == EOS
					emit = EOS # cause error on decoding
				else
					emit << n.emit.chr(Encoding::BINARY) unless emit == EOS
				end
				n = @root
			end
			node.transitions[input] = Transition.new(emit, n)
			togo << n
			@states << n
		end
	end
	puts "#{@states.size} states"
	@root
end