リングバッファ作ってみた

30分プログラム、その616。Pythonでリングバッファ作ってみた。

Cの宿題/未分類 - C/C++の宿題を片付けます@wiki - アットウィキにインスパイアされて、リングバッファを実装してみました。

使い方

q = RingBuffer(4)
q.add(10)
q.add(11)
q.add(12)
q.add(13)

print q.get()
print q.get()
print q.get()
print q.get()
print q.get()

ソースコード

#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# ring.py -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/07/06 21:25:02
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

class RingBuffer:
    def __init__(self,size):
        self.buffer = [None for i in xrange(0,size)]
        self.start = 0
        self.end = 0

    def add(self,val):
        self.buffer[self.end] = val
        self.end = (self.end + 1) % len(self.buffer)

    def get(self):
        val = self.buffer[self.start]
        self.start =(self.start + 1) % len(self.buffer)
        return val

    def __len__(self):
        return self.end - self.start