Simple implementation of circular buffer.
Simple circular buffer written in python extension.
CircularBuffer will allocate requested size + 2 bytes for two sections of null terminated strings.
May temporary allocate another half of the allocated bytes if you used buffer protocol, I mostly used them for regex.
Simply pip install pycircularbuffer, compilation from downloaded source is probably needed.
from circularbuffer import CircularBuffer buf = CircularBuffer(1024) buf.write(b'some text') while len(buf) > 0: buf.read(1) from re import match buf.write(b'hallo') # python2 with buf: match_found = match(br'^ha', buf) # python3 match_found = match(br'^ha', buf) # use `result` immediately because regex didn't make memory copy of the # internal buffer, or run another `match()` on a memory copy, for example: match_found_str = buf.read(len(match_found.group(0))) independent_match_found = match(br'^ha', match_found_str)
Don’t to this in python 3: ‘a’ in buf, instead: b’a’ in buf.
Note: while string representation makes thing easier it always creates memory copy.
Note: for python version < 3, you need to use context manager, the with statement, to let CircularBuffer know when you are releasing the buffer.
Using buffer protocol will throw ReservedError exception for CircularBuffer.read().