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