diff options
Diffstat (limited to 'arm9/source/types')
-rw-r--r-- | arm9/source/types/circbuf.c | 20 | ||||
-rw-r--r-- | arm9/source/types/circbuf.h | 16 |
2 files changed, 36 insertions, 0 deletions
diff --git a/arm9/source/types/circbuf.c b/arm9/source/types/circbuf.c new file mode 100644 index 0000000..532a5a0 --- /dev/null +++ b/arm9/source/types/circbuf.c @@ -0,0 +1,20 @@ +#include "circbuf.h" + +u8 cb_read_byte(CircBuf *buf) { + if (buf->front != buf->back) { + return buf->mem[buf->front++]; + } else { + return 0; + } +} + +void cb_write_byte(CircBuf *buf, u8 byte) { + if (((buf->back+1)&0xff) != buf->front) { + buf->mem[buf->back++] = byte; + } +} + +void cb_clear(CircBuf *buf) { + buf->front = 0; + buf->back = 0; +} diff --git a/arm9/source/types/circbuf.h b/arm9/source/types/circbuf.h new file mode 100644 index 0000000..305f8bf --- /dev/null +++ b/arm9/source/types/circbuf.h @@ -0,0 +1,16 @@ +#include <nds.h> + +#ifndef CIRCBUF_H_ + #define CIRCBUF_H_ + + typedef struct { + u8 mem[256]; + u8 front; // start of buffer, read from here until back + u8 back; // end of buffer, write past here until front + } CircBuf; + + u8 cb_read_byte(CircBuf *buf); + void cb_write_byte(CircBuf *buf, u8 byte); + void cb_clear(CircBuf *buf); + +#endif |