#!/usr/bin/python3
# ========================================================
# my LIFO queue/stack (because I wanted to)
# ========================================================
from copy import deepcopy
# --------------------------------------------------------
# ---- my lifo queue/stack
# --------------------------------------------------------
class my_lifo_queue:
def __init__(self):
self.lifo = []
def empty(self):
l = len(self.lifo)
if l < 1:
return True
return False
def length(self):
return(len(self.lifo))
def pop(self):
if len(self.lifo) > 0:
obj = self.lifo.pop(-1)
return obj
else:
return None
def push(self,obj):
self.lifo.append(obj)
def copy(self):
if len(self.lifo) < 1:
return None
return deepcopy(self.lifo[-1])
def state(self):
if len(self.lifo) < 1:
return -1
return self.lifo[-1][0]
def dump(self):
l = len(self.lifo)
print(f'lifo length {l}')
if l < 1:
return
top = True # mark top of queue?
i = 0
while l:
l -= 1
obj = self.lifo[l]
if top:
print(f'[{i:2}] {obj} (top of queue)')
top = False
else:
print(f'[{i:2}] {obj}')
i += 1