Skip to content

Instantly share code, notes, and snippets.

@droidthings
Created March 17, 2020 18:22
Show Gist options
  • Save droidthings/77f9ccb9d8e376c3914e3e74eaa3dd31 to your computer and use it in GitHub Desktop.
Save droidthings/77f9ccb9d8e376c3914e3e74eaa3dd31 to your computer and use it in GitHub Desktop.
#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