Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

リングバッファと計算

# -*- 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()