A python extension implementing a circular/ring buffer of characters as a C extension. It overwrites silently.
Currently, pyringbuf is available at https://pypi.python.org/pypi/pyringbuf, or via pip install pyringbuf
. As this is a C extension, there is a compilation step, so your system will need to be able to compile extension modules for python.
>>> from ringbuf import RingBuffer
>>> R = RingBuffer(5) #choose your buffer size
>>> R.push("a") #push a single character into the buffer
>>> R.pop() #pop a single character
'a'
>>> R.write("bcdef") #fill buffer with many characters at once
>>> R.read(4) #read many characters at once
'bcde'
>>> R.read(1)
'f'
>>> R.read(1) #returns an empty string if the buffer is empty
''
For the interested, this has been implemented as a pure C extension. The ring buffer itself is implemented as a fixed length array of chars (8-bit signed), dynamically allocated on the Python Heap on instantiation of a buffer. Read and write indexes both increase monotonically, and addresses in the array are determined using index % (modulo) buffer size. Writing more than the buffer size at once throws an exception, otherwise if writing overtakes the read index in the modulo space the buffer contents are silently overwritten.