implemented all proper buffers in terms of a simple fixed-size ring buffer