Skip to content

Instantly share code, notes, and snippets.

@lukilukeskywalker
Created June 28, 2022 16:23
Show Gist options
  • Save lukilukeskywalker/1cf40acf982843713845e396e7641a26 to your computer and use it in GitHub Desktop.
Save lukilukeskywalker/1cf40acf982843713845e396e7641a26 to your computer and use it in GitHub Desktop.
Buffer circular
/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char hora;
char min;
char seg;
char lum_cen; //‰ es un por millaje ...suck it
char lum_dec;
char lum_uni;
}time_lum_pack_t;
typedef struct{
char capacidad;
char elementos;
char ultima_entrada;
time_lum_pack_t* i_buffer_circ;
}buffer_t;
void print_buffer(buffer_t *buf);
static buffer_t* init_Buffer(buffer_t *buf, u_int16_t _capacidad);
static time_lum_pack_t * simulador(u_int16_t i);
static time_lum_pack_t* introducirDatoBuffer(buffer_t* buffer, time_lum_pack_t *dato);
static buffer_t *buf=NULL;
int main(){
printf("HOLA\n\r");
//print_buffer(buf);
buf=malloc(sizeof(buffer_t));
init_Buffer(buf, 99);
//TEST
for(int i=0; i< 120; i++){
introducirDatoBuffer(buf, simulador(i));
print_buffer(buf);
}
print_buffer(buf);
return 0;
}
void print_buffer(buffer_t *buf){
printf("Pointer buf: %p\n\r", buf);
printf("Contenido->\n capacidad: %u, elementos: %u, ultima_entrada: %u\n\r", buf->capacidad, buf->elementos, buf->ultima_entrada);
printf("Pointer a inicio de buffer circular: %p\n\r", buf->i_buffer_circ);
return;
}
static buffer_t* init_Buffer(buffer_t *buf, u_int16_t _capacidad){
buf->i_buffer_circ = malloc(_capacidad*sizeof(time_lum_pack_t));
if(buf->i_buffer_circ == NULL)printf("ERROR PUTO!\n\r");
buf->capacidad =_capacidad;
buf->elementos = 0;
buf->ultima_entrada = 0;
if(buf->capacidad == _capacidad && buf->elementos == 0 && buf->ultima_entrada == 0)return buf;
return NULL;
}
static time_lum_pack_t* introducirDatoBuffer(buffer_t* buffer, time_lum_pack_t *dato){
memcpy((buffer->i_buffer_circ + (buffer->ultima_entrada* sizeof(time_lum_pack_t))), dato, sizeof(time_lum_pack_t));
buffer->ultima_entrada = (buffer->ultima_entrada + 1) % buffer->capacidad;
if(buffer->elementos < buffer->capacidad)
buffer->elementos++;
return (buffer->i_buffer_circ + (buffer->ultima_entrada * sizeof(time_lum_pack_t)));
}
static time_lum_pack_t * simulador(u_int16_t i){
static time_lum_pack_t * data;
data = malloc(sizeof(time_lum_pack_t));
data->hora=23;
data->min=22;
data->seg=21;
data->lum_cen=i;
data->lum_dec=i+2;
data->lum_uni=i+4;
return data;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment