Commit 0b569bb3 authored by Raymond Hettinger's avatar Raymond Hettinger

Stacks based on lists work better and read more clearly when they

grow and shrink on the right.
parent 2d5914b1
...@@ -38,13 +38,13 @@ class MultiFile: ...@@ -38,13 +38,13 @@ class MultiFile:
def __init__(self, fp, seekable=1): def __init__(self, fp, seekable=1):
self.fp = fp self.fp = fp
self.stack = [] # Grows down self.stack = []
self.level = 0 self.level = 0
self.last = 0 self.last = 0
if seekable: if seekable:
self.seekable = 1 self.seekable = 1
self.start = self.fp.tell() self.start = self.fp.tell()
self.posstack = [] # Grows down self.posstack = []
def tell(self): def tell(self):
if self.level > 0: if self.level > 0:
...@@ -88,8 +88,7 @@ class MultiFile: ...@@ -88,8 +88,7 @@ class MultiFile:
marker = line.rstrip() marker = line.rstrip()
# No? OK, try to match a boundary. # No? OK, try to match a boundary.
# Return the line (unstripped) if we don't. # Return the line (unstripped) if we don't.
for i in range(len(self.stack)): for i, sep in enumerate(reversed(self.stack)):
sep = self.stack[i]
if marker == self.section_divider(sep): if marker == self.section_divider(sep):
self.last = 0 self.last = 0
break break
...@@ -130,9 +129,9 @@ class MultiFile: ...@@ -130,9 +129,9 @@ class MultiFile:
def push(self, sep): def push(self, sep):
if self.level > 0: if self.level > 0:
raise Error, 'bad MultiFile.push() call' raise Error, 'bad MultiFile.push() call'
self.stack.insert(0, sep) self.stack.append(sep)
if self.seekable: if self.seekable:
self.posstack.insert(0, self.start) self.posstack.append(self.start)
self.start = self.fp.tell() self.start = self.fp.tell()
def pop(self): def pop(self):
...@@ -143,9 +142,9 @@ class MultiFile: ...@@ -143,9 +142,9 @@ class MultiFile:
else: else:
abslastpos = self.lastpos + self.start abslastpos = self.lastpos + self.start
self.level = max(0, self.level - 1) self.level = max(0, self.level - 1)
del self.stack[0] self.stack.pop()
if self.seekable: if self.seekable:
self.start = self.posstack.pop(0) self.start = self.posstack.pop()
if self.level > 0: if self.level > 0:
self.lastpos = abslastpos - self.start self.lastpos = abslastpos - self.start
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment