#encoding:utf8

def analyze(filename):
	statics = {}
	with open(filename) as fh:
		for line in fh:
			infos = line.split()
			obj_name, obj_size, _, refs = infos[0:4]
			statics[obj_name] = [int(refs), int(obj_size)]
	return statics

def gen_diff(staticsA, staticsB):
	diff = {}
	new = {}
	for obj_name, recordB in staticsB.iteritems():
		if not staticsA.has_key(obj_name):
			new[obj_name] = recordB
			continue
		recordA = staticsA[obj_name]
		if recordB != recordA:
			diff[obj_name] = [recordB[0] - recordA[0], recordB[1] - recordA[1]]
	return diff, new

def gen_ref_report(diff):
	for obj_name in sorted(diff.iterkeys()):
		record = diff[obj_name]
		ref, size = record
		if (ref > 0):
			print "obj ", obj_name, "amount increase:", str(ref)

def gen_size_report(diff):
	for obj_name in sorted(diff.iterkeys()):
		record = diff[obj_name]
		ref, size = record
		if (size > 0):
			print "obj ", obj_name, "size increase:", str(size)

def gen_new_report(new):
	for obj_name in sorted(new.iterkeys()):
		record = new[obj_name]
		print "new obj:", obj_name, " ref:", record[0], " size:", record[1]

def print_time_diff(filename1, filename2):
	import os.path, datetime
	timestamp1 = os.path.getmtime(filename1)
	timestamp2 = os.path.getmtime(filename2)
	delta = datetime.timedelta(seconds = (timestamp2 - timestamp1))
	print "=" * 10, "In", delta, "=" * 10

def main(filename1, filename2):
	print_time_diff(filename1, filename2)
	staticsA = analyze(filename1)
	staticsB = analyze(filename2)
	diff, new = gen_diff(staticsA, staticsB)
	gen_ref_report(diff)
	gen_size_report(diff)
	gen_new_report(new)

if __name__ == "__main__":
	import argparse
	parser = argparse.ArgumentParser(description="gen diff from two obj_dump file")
	parser.add_argument("pathA", metavar="PATHA", type=str)
	parser.add_argument("pathB", metavar="PATHB", type=str)
	args = parser.parse_args()
	main(args.pathA, args.pathB)