1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 10
typedef struct
{
float buffer[BUFFER_SIZE];
int inptr;
int outptr;
} BUFFER;
BUFFER* bufferCreate(void)
{
BUFFER* pBuffer = malloc(sizeof(BUFFER));
if(pBuffer != NULL)
{
pBuffer->inptr = 0;
pBuffer->outptr = 0;
}
return pBuffer;
}
void bufferDestroy(BUFFER* pbuf)
{
if(pbuf != NULL)
free(pbuf);
}
void bufferPut(float value, BUFFER* pbuf)
{
pbuf->buffer[pbuf->inptr] = value;
pbuf->inptr = (pbuf->inptr + 1) % BUFFER_SIZE;
}
float bufferGet(BUFFER* pbuf)
{
float value;
while(pbuf->outptr == pbuf->inptr)
/* do nothing, just wait */;
value = pbuf->buffer[pbuf->outptr];
pbuf->outptr = (pbuf->outptr +1) % BUFFER_SIZE;
return value;
}
int main(void)
{
float input[]={1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0 ,5.0, 5.0, 5.0, 5.0, 5.0 };
int index;
float value;
float total;
BUFFER* pbuf = bufferCreate();
if(pbuf != NULL)
{
for(index = 0; index < 15; index++)
{
value = input[index];
total += value;
bufferPut(total, pbuf);
printf("%f\n", bufferGet(pbuf));
}
}
bufferDestroy(pbuf);
return 0;
} |
Partager