TPCircularBuffer.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // original source from Michael Tyson
  2. //
  3. // modified by adding additional functions to produce and consume without checking for buffer underflow
  4. // for delay lines
  5. // tz 11/2011
  6. //
  7. // TPCircularBuffer.h
  8. // Circular buffer implementation
  9. //
  10. // Created by Michael Tyson on 19/03/2011.
  11. // Copyright 2011 A Tasty Pixel. All rights reserved.
  12. //
  13. #include <libkern/OSAtomic.h>
  14. typedef struct {
  15. int32_t head;
  16. int32_t tail;
  17. volatile int32_t fillCount;
  18. int32_t length;
  19. } TPCircularBufferRecord;
  20. void TPCircularBufferInit(TPCircularBufferRecord *record, int length);
  21. void TPCircularBufferClear(TPCircularBufferRecord *record);
  22. int TPCircularBufferFillCount(TPCircularBufferRecord *record);
  23. int TPCircularBufferFillCountContiguous(TPCircularBufferRecord *record);
  24. int TPCircularBufferSpace(TPCircularBufferRecord *record);
  25. int TPCircularBufferSpaceContiguous(TPCircularBufferRecord *record);
  26. // Reading (consuming)
  27. int TPCircularBufferTail(TPCircularBufferRecord *record);
  28. void TPCircularBufferConsume(TPCircularBufferRecord *record, int amount);
  29. void TPCircularBufferConsumeSingleThread(TPCircularBufferRecord *record, int amount);
  30. // Writing (producing)
  31. int TPCircularBufferHead(TPCircularBufferRecord *record);
  32. void TPCircularBufferProduce(TPCircularBufferRecord *record, int amount);
  33. void TPCircularBufferProduceSingleThread(TPCircularBufferRecord *record, int amount);
  34. int TPCircularBufferProduceBytes(TPCircularBufferRecord *record, void* dst, const void* src, int count, int len);
  35. // tz for resetting tail
  36. void TPCircularBufferSetTail(TPCircularBufferRecord *record, int32_t position, int32_t count);
  37. int TPCircularBufferLength(TPCircularBufferRecord *record );
  38. void TPCircularBufferProduceAnywhere(TPCircularBufferRecord *record, int amount);
  39. void TPCircularBufferConsumeAnywhere(TPCircularBufferRecord *record, int amount);
  40. void TPCircularBufferSetTailAnywhere(TPCircularBufferRecord *record, int32_t position );