diff options
author | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-05-24 12:40:58 +0200 |
---|---|---|
committer | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-05-24 12:40:58 +0200 |
commit | f8a88b6a4aba1f66d04711a9330eaba49a50c463 (patch) | |
tree | d9f9969e485ad510a31c2f017d1af3edcb15c124 /Semestr 4/sieci/pracownia3/window.c | |
parent | f0bd9763ea4be22f0f235c0f3aa6628944a56c7e (diff) |
update
Diffstat (limited to 'Semestr 4/sieci/pracownia3/window.c')
-rw-r--r-- | Semestr 4/sieci/pracownia3/window.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Semestr 4/sieci/pracownia3/window.c b/Semestr 4/sieci/pracownia3/window.c new file mode 100644 index 0000000..c8bffad --- /dev/null +++ b/Semestr 4/sieci/pracownia3/window.c @@ -0,0 +1,42 @@ +/* Projekt: Transport + * Autor: Franciszek Malinka 316093 + */ + +#include "window.h" +#include <stdlib.h> +#include <strings.h> + +void init_window(window_t *w, int window_size, int window_width) { + w->ar = malloc(window_size * sizeof(char *)); + for (int i = 0; i < window_size; i++) + w->ar[i] = malloc(window_width * sizeof(char)); + w->uptodate = malloc(window_size); + bzero (w->uptodate, window_size); + w->first_pos = 0; + w->size = window_size; +} + +void destroy_window(window_t *w) { + for (int i = 0; i < w->size; i++) + free(w->ar[i]); + free(w->ar); + free(w->uptodate); +} + +void shift_while_uptodate(window_t *w) { + while (w->uptodate[w->first_pos]) { + w->uptodate[w->first_pos] = false; + w->first_pos = (w->first_pos + 1) % w->size; + } +} + +void shift(window_t *w) { + w->uptodate[w->first_pos] = false; + w->first_pos = (w->first_pos + 1) % w->size; +} + +void update(window_t *w, int pos, char *buffer, size_t buf_size) { + pos = (w->first_pos + pos) % w->size; + for (int i = 0; i < buf_size; i++) w->ar[pos][i] = buffer[i]; + w->uptodate[pos] = true; +}
\ No newline at end of file |