Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "buffer.h"
- #include <stdlib.h>
- #include <stdio.h>
- char* codes_names[] = { "open", "wait_for_request", "get_request", "find_handler", "send_response", "send_error", "close" };
- char* return_codes_names[] = { "error", "no_request", "request_available", "no_handler", "handler_available", "done" };
- //inkrementacja wskaznika bufora cyklicznego
- void increment_pointer(cyclic_buffer* buffer, transition** pointer) {
- if (*(pointer) == buffer->end) {
- (*(pointer)) = buffer->start;
- }
- else {
- (*(pointer))++;
- }
- }
- transition* create_transition(codes c, return_codes rc) {
- transition* new_transition = malloc(sizeof(transition));
- new_transition->current = c;
- new_transition->return_value = rc;
- //funkcja zwraca wskaznik na strukture 'transition'
- return new_transition;
- }
- cyclic_buffer* init_buffer() {
- cyclic_buffer* new_buffer = malloc(sizeof(cyclic_buffer));
- new_buffer->start = &new_buffer->elements[0];
- new_buffer->end = &new_buffer->elements[63];
- new_buffer->write_pointer = new_buffer->start;
- new_buffer->read_pointer = new_buffer->start;
- return new_buffer;
- }
- void write_to_buffer(cyclic_buffer* buffer, transition* element) {
- //tworzenie nowego wskaznika na miejsce do zapisu nowego elementu
- transition* temp = buffer->write_pointer;
- //inkrementacja tymczasowego wskaznika
- increment_pointer(buffer, &temp);
- //jesli bufor jest zapelniony to 10 elementow zapisywanych do pliku
- if (temp == buffer->read_pointer) {
- //otwarcie pliku z przejsciami stanow
- FILE* transitions;
- fopen_s(&transitions, "transitions.txt", "w");
- for (int i = 0; i < 10; i++) {
- char file_buffer[64];
- sprintf_s(file_buffer, sizeof(file_buffer), "Current state: %s\nReturn code: %s\n", codes_names[buffer->read_pointer->current], return_codes_names[buffer->read_pointer->return_value]);
- //zapisanie przejscia do pliku
- fputs(file_buffer, transitions);
- //inkrementacja wskaznika odczytu z bufora
- increment_pointer(buffer, &(buffer->read_pointer));
- }
- //zamkniecie pliku
- fclose(transitions);
- }
- //zapisanie nowego elementu do bufora
- *(buffer->write_pointer) = *element;
- free(element);
- element = NULL;
- //inkrementacja wskaznika zapisu do bufora
- increment_pointer(buffer, &(buffer->write_pointer));
- }
- void clean_buffer(cyclic_buffer* buffer) {
- FILE* transitions;
- fopen_s(&transitions, "transitions.txt", "w");
- while(buffer->read_pointer != buffer->write_pointer) {
- char file_buffer[64];
- sprintf_s(file_buffer, sizeof(file_buffer), "Current state: %s\nReturn code: %s\n", codes_names[buffer->read_pointer->current], return_codes_names[buffer->read_pointer->return_value]);
- //zapisanie przejscia do pliku
- fputs(file_buffer, transitions);
- //inkrementacja wskaznika odczytu z bufora
- increment_pointer(buffer, &(buffer->read_pointer));
- }
- //zamkniecie pliku
- fclose(transitions);
- free(buffer);
- buffer = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement