#include "ringbuffer.h" #include "kmalloc.h" ringbuffer ringbuffer_init(uint32_t size) { ringbuffer f; f.data=kballoc(size); f.size=size*4096; f.front=f.size-1; f.back=f.size-1; return f; } void ringbuffer_free(ringbuffer *f) { kbfree(f->data); } bool ringbuffer_put(ringbuffer* f,uint8_t c) { if((f->back-1+f->size)%f->size==f->front) { return false; } f->data[f->back]=c; f->back--; f->back+=f->size; f->back%=f->size; return true; } bool ringbuffer_has(ringbuffer* f) { bool res=true; if(f->front==f->back) res=false; return res; } uint8_t ringbuffer_get(ringbuffer* f) { char c; if(f->front==f->back) { return 0; } c=f->data[f->front]; f->front--; f->front+=f->size; f->front%=f->size; return c; }