1b448a758a490864f990c7815b1804aa1c6794ab5Mussa# Copyright 2015 The Chromium OS Authors. All rights reserved. 2b448a758a490864f990c7815b1804aa1c6794ab5Mussa# Use of this source code is governed by a BSD-style license that can be 3b448a758a490864f990c7815b1804aa1c6794ab5Mussa# found in the LICENSE file. 4b448a758a490864f990c7815b1804aa1c6794ab5Mussa 5b448a758a490864f990c7815b1804aa1c6794ab5Mussa 6b448a758a490864f990c7815b1804aa1c6794ab5Mussaimport collections 7b448a758a490864f990c7815b1804aa1c6794ab5Mussa 8b448a758a490864f990c7815b1804aa1c6794ab5Mussa 9b448a758a490864f990c7815b1804aa1c6794ab5Mussadef checksum_counts(checksums): 10b448a758a490864f990c7815b1804aa1c6794ab5Mussa """ 11b448a758a490864f990c7815b1804aa1c6794ab5Mussa @param checksums: list of checksums, each checksum in a 4-tuple of ints 12b448a758a490864f990c7815b1804aa1c6794ab5Mussa @returns a dictionary of checksums as keys mapped to their respective 13b448a758a490864f990c7815b1804aa1c6794ab5Mussa count of occurance in the list. 14b448a758a490864f990c7815b1804aa1c6794ab5Mussa 15b448a758a490864f990c7815b1804aa1c6794ab5Mussa """ 16b448a758a490864f990c7815b1804aa1c6794ab5Mussa counts = {} 17b448a758a490864f990c7815b1804aa1c6794ab5Mussa 18b448a758a490864f990c7815b1804aa1c6794ab5Mussa for checksum in checksums: 19b448a758a490864f990c7815b1804aa1c6794ab5Mussa if checksum in counts: 20b448a758a490864f990c7815b1804aa1c6794ab5Mussa counts[checksum] += 1 21b448a758a490864f990c7815b1804aa1c6794ab5Mussa else: 22b448a758a490864f990c7815b1804aa1c6794ab5Mussa counts[checksum] = 1 23b448a758a490864f990c7815b1804aa1c6794ab5Mussa 24b448a758a490864f990c7815b1804aa1c6794ab5Mussa return counts 25b448a758a490864f990c7815b1804aa1c6794ab5Mussa 26b448a758a490864f990c7815b1804aa1c6794ab5Mussa 27b448a758a490864f990c7815b1804aa1c6794ab5Mussadef checksum_indices(checksums): 28b448a758a490864f990c7815b1804aa1c6794ab5Mussa """ 29b448a758a490864f990c7815b1804aa1c6794ab5Mussa @param checksums: list of checksums. 30b448a758a490864f990c7815b1804aa1c6794ab5Mussa @returns an OrderedDict containing checksums as keys and their respective 31b448a758a490864f990c7815b1804aa1c6794ab5Mussa first-occurance indices as values 32b448a758a490864f990c7815b1804aa1c6794ab5Mussa 33b448a758a490864f990c7815b1804aa1c6794ab5Mussa """ 34b448a758a490864f990c7815b1804aa1c6794ab5Mussa 35b448a758a490864f990c7815b1804aa1c6794ab5Mussa d = collections.OrderedDict() 36b448a758a490864f990c7815b1804aa1c6794ab5Mussa 37b448a758a490864f990c7815b1804aa1c6794ab5Mussa for i, checksum in enumerate(checksums): 38b448a758a490864f990c7815b1804aa1c6794ab5Mussa if checksum not in d: 39b448a758a490864f990c7815b1804aa1c6794ab5Mussa d[checksum] = i 40b448a758a490864f990c7815b1804aa1c6794ab5Mussa 41b448a758a490864f990c7815b1804aa1c6794ab5Mussa return d