Created
March 17, 2020 18:22
-
-
Save droidthings/77f9ccb9d8e376c3914e3e74eaa3dd31 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdbool.h> | |
#include <stdint.h> | |
typedef struct cache_t { | |
int timestamp; | |
float value; | |
} cache_t; | |
typedef struct cache_buffer_t { | |
cache_t *buff; | |
int start; | |
int end; | |
int size; | |
int count; | |
} cache_buffer_t; | |
cache_buffer_t* init_buffer(int size); | |
void push_to_buffer(cache_buffer_t *cb, cache_t cache); | |
void print_buffer(cache_buffer_t *cb); | |
int main() { | |
printf("Hello World\n"); | |
cache_buffer_t *cb = init_buffer(3); | |
cache_t data1; | |
data1.timestamp = 100; | |
data1.value = 10.20; | |
cache_t data2; | |
data2.timestamp = 200; | |
data2.value = 20.30; | |
cache_t data3; | |
data3.timestamp = 300; | |
data3.value = 30.40; | |
cache_t data4; | |
data4.timestamp = 400; | |
data4.value = 40.50; | |
cache_t data5; | |
data5.timestamp = 500; | |
data5.value = 500.60; | |
cache_t data6; | |
data6.timestamp = 600; | |
data6.value = 60.50; | |
push_to_buffer(cb, data1); | |
push_to_buffer(cb, data2); | |
push_to_buffer(cb, data3); | |
push_to_buffer(cb, data4); | |
push_to_buffer(cb, data5); | |
push_to_buffer(cb, data6); | |
printf("Add success\n"); | |
print_buffer(cb); | |
return 0; | |
} | |
cache_buffer_t* init_buffer(int size) { | |
cache_buffer_t *cb = (cache_buffer_t*) malloc(sizeof(cache_buffer_t)); | |
memset(cb, 0, sizeof(cache_buffer_t)); | |
cb->size = size; | |
cb->buff = (cache_t*) malloc(sizeof(cache_t) * size); | |
return cb; | |
} | |
void push_to_buffer(cache_buffer_t *cb, cache_t cache) { | |
int end = cb->end; | |
if (cb->count && (end % cb->size) == cb->start) { | |
printf("Overflow Elem[%d] %d lost\n", cb->start, | |
cb->buff[cb->start].timestamp); | |
cb->start = (cb->start + 1) % cb->size; | |
cb->count--; | |
} | |
printf("Added Elem[%d] = %d\n", cb->end, cache.timestamp); | |
cb->buff[cb->end] = cache; | |
cb->end = (cb->end + 1) % cb->size; | |
cb->count++; | |
} | |
void print_buffer(cache_buffer_t *cb) { | |
int start = cb->start; | |
int end = cb->end; | |
int i, count = 0; | |
for (i = start; count < cb->count; i = (i + 1) % cb->size) { | |
printf("Elem[%d] Timestamp = %d\n", i, cb->buff[i].timestamp); | |
printf("Elem[%d] Value = %f\n", i, cb->buff[i].value); | |
count++; | |
if (i == (end - 1)) { | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment