Home
Softono

Ring Buffer

Open source MIT C++
461
Stars
73
Forks
13
Issues
13
Watchers
2 years
Last Commit

 About Ring Buffer

simple C++11 ring buffer implementation, allocated and evaluated at compile time

Platforms

Web Self-hosted

Languages

C++

Links

Need Help Installing Ring Buffer?

We provide expert installation service for this software. Our team will install, configure, and secure Ring Buffer on your server. plans start at just $30.

Ring Buffer

View on GitHub

Ring Buffer

  • pure C++11, no OS dependency
  • lock and wait free bounded SPSC operation
  • no exceptions, RTTI, virtual functions and dynamic memory allocation
  • designed for compile time (static) allocation and type evaluation
  • no wasted slots (in powers of 2 granularity)
  • underrun and overrun checks in insert/remove functions
  • highly efficient on most microcontroller architectures (nearly equal performance as in 'wasted-slot' implemetation)

notes

  • index_t of size less than architecture reg size (size_t) might not be most efficient (known gcc bug)
  • Only lamda expressions or functor callbacks can be inlined into buffWrite/buffRead functions
  • 8 bit architectures are not supported in master branch at the moment. Broken code is likely to be generated
  • relaxed atomic stores on RISC-V gcc port may be inefficient
  • the DEC Alpha ultra-weak memory model is not supported

example

jnk0le::Ringbuffer<const char*, 256> message;

int main()
{
	//...
	while(1)
	{
		const char* tmp = nullptr;
		while(!message.remove(tmp));
		printf("%s fired\n", tmp);
		//...
	}
}

extern "C" void SysTick_Handler(void)
{
	message.insert("SysTick_Handler");
}