Created
June 28, 2022 16:23
-
-
Save lukilukeskywalker/1cf40acf982843713845e396e7641a26 to your computer and use it in GitHub Desktop.
Buffer circular
This file contains 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
/****************************************************************************** | |
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