summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Erickson <jerickso@cs.unc.edu>2011-04-25 01:45:18 -0400
committerJeremy Erickson <jerickso@cs.unc.edu>2011-04-25 01:46:03 -0400
commitdd2836f4f4e1c2afd80d641112bcc3f3a6bc73fa (patch)
tree0ecc76c625fd9726496135169b81e0eddf6fdc99
parent0f1a6e73f10b8b5128b810aa0dd1f413132840f3 (diff)
Change to PQ
-rw-r--r--unit_trace/trace_reader.py28
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
28import struct 28import struct
29import sys 29import sys
30import 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.