# -*- coding: utf-8 -*-
class RingBuffer():
def __init__(self,bufferSize):
self.size = bufferSize
self.pc= 0 #次に使うバッファの番号
self.data=[None]*self.size #固定長さのリスト
self.valid=False #リングバッファがいっぱいになったらTrueにする。
def push(self,value):
print("pc=",self.pc)
self.data[self.pc]=value
self.pc=self.pc+1
if self.pc==self.size:
self.pc=0
self.valid=True
def max(self):
if self.valid:
return max(self.data)
else:
if self.pc==0:
return None
else:
print("pc=",self.pc)
return max(self.data[0:self.pc-1])
def min(self):
if self.valid:
return min(self.data)
else:
if self.pc==0:
return None
else:
print("pc=",self.pc)
return min(self.data[0:self.pc-1])
def average(self):
if self.valid:
return sum(self.data)/self.size
else:
if self.pc==0:
return None
else:
print("pc=",self.pc)
return sum(self.data[0:self.pc-1])/self.size
def dump(self):
return self.data
def main():
rb=RingBuffer(5)
print(rb.dump())
print(rb.max()) #バッファ内の最大を返す
print(rb.min()) #バッファ内の最小を返す
rb.push(1)
rb.push(2)
rb.push(3)
rb.push(4)
print(rb.dump())
print("max=",rb.max()) #バッファ内の最大を返す
print("min=",rb.min()) #バッファ内の最小を返す
rb.push(1)
rb.push(1)
rb.push(2)
rb.push(2)
print(rb.dump())
print(rb.max()) #バッファ内の最大を返す
print(rb.min()) #バッファ内の最小を返す
print(rb.average()) #バッファ内の最小を返す
if __name__== '__main__':
main()