class Build::Files::IOState

def added

def added
	@input_state.added + @output_state.added
end

def changed

def changed
	@input_state.changed + @output_state.changed
end

def dirty?

Output is dirty if files are missing or if latest input is older than any output.
def dirty?
	@dirty = []
	
	if @output_state.missing?
		# puts "Output file missing: #{output_state.missing.inspect}"
		
		return true
	end
	
	# If there are no inputs, we are always clean as long as outputs exist:
	# if @input_state.empty?
	#	return false
	# end
	
	oldest_output_time = @output_state.oldest_time
	newest_input_time = @input_state.newest_time
	
	if newest_input_time and oldest_output_time
		# if newest_input_time > oldest_output_time
		#	puts "Out of date file: #{newest_input_time.inspect} > #{oldest_output_time.inspect}"
		# end
		
		return newest_input_time > oldest_output_time
	end
	
	# puts "Missing file dates: #{newest_input_time.inspect} < #{oldest_output_time.inspect}"
	
	return true
end

def files

def files
	@input_state.files + @output_state.files
end

def fresh?

def fresh?
	not dirty?
end

def initialize(inputs, outputs)

def initialize(inputs, outputs)
	@input_state = State.new(inputs)
	@output_state = State.new(outputs)
end

def inspect

def inspect
	"<IOState Input:#{@input_state.inspect} Output:#{@output_state.inspect}>"
end

def intersects?(outputs)

def intersects?(outputs)
	@input_state.intersects?(outputs) or @output_state.intersects?(outputs)
end

def removed

def removed
	@input_state.removed + @output_state.removed
end

def update!

def update!
	input_changed = @input_state.update!
	output_changed = @output_state.update!

	input_changed or output_changed
end