5 * - Complex data type code
12 // --- Ring Buffers ---
13 tRingBuffer *RingBuffer_Create(size_t Space)
15 tRingBuffer *ret = malloc(sizeof(tRingBuffer)+Space);
22 size_t RingBuffer_Read(void *Dest, tRingBuffer *Buffer, size_t Length)
24 if(Length > Buffer->Length) Length = Buffer->Length;
26 if( Buffer->Start + Length > Buffer->Space )
28 int endData = Buffer->Space - Buffer->Start;
29 memcpy(Dest, &Buffer->Data[Buffer->Start], endData);
30 memcpy((Uint8*)Dest + endData, &Buffer->Data, Length - endData);
34 memcpy(Dest, &Buffer->Data[Buffer->Start], Length);
36 Buffer->Start += Length;
37 if( Buffer->Start > Buffer->Space )
38 Buffer->Start -= Buffer->Space;
39 Buffer->Length -= Length;
43 size_t RingBuffer_Write(tRingBuffer *Buffer, const void *Source, size_t Length)
45 size_t bufEnd = Buffer->Start + Buffer->Length;
46 size_t endSpace = Buffer->Space - bufEnd;
49 if(Length > Buffer->Space - Buffer->Length)
50 Length = Buffer->Space - Buffer->Length;
54 memcpy( &Buffer->Data[bufEnd], Source, endSpace );
55 memcpy( Buffer->Data, (Uint8*)Source + endSpace, Length - endSpace );
56 Buffer->Length = Length - endSpace;
60 memcpy( &Buffer->Data[bufEnd], Source, Length );
61 Buffer->Length += Length;