diff options
author | Jeremy Erickson <jerickso@cs.unc.edu> | 2011-04-25 01:45:18 -0400 |
---|---|---|
committer | Jeremy Erickson <jerickso@cs.unc.edu> | 2011-04-25 01:46:03 -0400 |
commit | dd2836f4f4e1c2afd80d641112bcc3f3a6bc73fa (patch) | |
tree | 0ecc76c625fd9726496135169b81e0eddf6fdc99 | |
parent | 0f1a6e73f10b8b5128b810aa0dd1f413132840f3 (diff) |
Change to PQ
-rw-r--r-- | unit_trace/trace_reader.py | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/unit_trace/trace_reader.py b/unit_trace/trace_reader.py index c895cf2..dc7cb11 100644 --- a/unit_trace/trace_reader.py +++ b/unit_trace/trace_reader.py | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | import struct | 28 | import struct |
29 | import sys | 29 | import sys |
30 | import heapq | ||
30 | 31 | ||
31 | 32 | ||
32 | ############################################################################### | 33 | ############################################################################### |
@@ -59,7 +60,8 @@ def trace_reader(files, buffsize): | |||
59 | file_iter = _get_file_iter(file) | 60 | file_iter = _get_file_iter(file) |
60 | file_iters.append(file_iter) | 61 | file_iters.append(file_iter) |
61 | try: | 62 | try: |
62 | file_iter_buff.append([file_iter.next()]) | 63 | rec = file_iter.next() |
64 | file_iter_buff.append([(rec.when, rec)]) | ||
63 | # What if there isn't a single valid record in a trace file? | 65 | # What if there isn't a single valid record in a trace file? |
64 | # file_iter.next() will raise a StopIteration that we need to catch | 66 | # file_iter.next() will raise a StopIteration that we need to catch |
65 | except: | 67 | except: |
@@ -75,11 +77,13 @@ def trace_reader(files, buffsize): | |||
75 | for x in range(0,len(file_iter_buff)): | 77 | for x in range(0,len(file_iter_buff)): |
76 | try: | 78 | try: |
77 | for y in range(0,buffsize): | 79 | for y in range(0,buffsize): |
78 | file_iter_buff[x].append(file_iters[x].next()) | 80 | rec = file_iters[x].next() |
81 | heapq.heappush(file_iter_buff[x], (rec.when, rec)) | ||
79 | except StopIteration: | 82 | except StopIteration: |
80 | pass | 83 | pass |
81 | for x in range(0,len(file_iter_buff)): | 84 | #Obsolete when using heap |
82 | file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when) | 85 | #for x in range(0,len(file_iter_buff)): |
86 | # file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when) | ||
83 | 87 | ||
84 | # Remember the time of the last record. This way, we can make sure records | 88 | # Remember the time of the last record. This way, we can make sure records |
85 | # truly are produced in monotonically increasing order by time and terminate | 89 | # truly are produced in monotonically increasing order by time and terminate |
@@ -95,19 +99,23 @@ def trace_reader(files, buffsize): | |||
95 | earliest = -1 | 99 | earliest = -1 |
96 | buff_to_refill = -1 | 100 | buff_to_refill = -1 |
97 | for x in range(0,len(file_iter_buff)): | 101 | for x in range(0,len(file_iter_buff)): |
98 | if earliest==-1 or file_iter_buff[x][0].when < earliest.when: | 102 | if earliest==-1 or file_iter_buff[x][0][1].when < earliest.when: |
99 | earliest = file_iter_buff[x][0] | 103 | earliest = file_iter_buff[x][0][1] |
100 | buff_to_refill = x | 104 | buff_to_refill = x |
101 | 105 | ||
102 | # Take it out of the buffer | 106 | # Take it out of the buffer |
103 | del file_iter_buff[buff_to_refill][0] | 107 | #del file_iter_buff[buff_to_refill][0] |
108 | heapq.heappop(file_iter_buff[buff_to_refill]) | ||
104 | 109 | ||
105 | # Try to append a new record to the buffer (if there is another) and | 110 | # Try to append a new record to the buffer (if there is another) and |
106 | # then keep the buffer sorted | 111 | # then keep the buffer sorted |
107 | try: | 112 | try: |
108 | file_iter_buff[buff_to_refill].append(file_iters[buff_to_refill].next()) | 113 | rec = file_iters[buff_to_refill].next() |
109 | file_iter_buff[buff_to_refill] = sorted(file_iter_buff[buff_to_refill], | 114 | rec_tup = (rec.when, rec) |
110 | key=lambda rec: rec.when) | 115 | heapq.heappush(file_iter_buff[buff_to_refill], rec_tup) |
116 | #file_iter_buff[buff_to_refill].append(file_iters[buff_to_refill].next()) | ||
117 | #file_iter_buff[buff_to_refill] = sorted(file_iter_buff[buff_to_refill], | ||
118 | # key=lambda rec: rec.when) | ||
111 | 119 | ||
112 | # If there aren't any more records, fine. Unless the buffer is also empty. | 120 | # If there aren't any more records, fine. Unless the buffer is also empty. |
113 | # If that is the case, delete the buffer. | 121 | # If that is the case, delete the buffer. |