-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmove.c
More file actions
51 lines (38 loc) · 1.01 KB
/
move.c
File metadata and controls
51 lines (38 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "move.h"
#include <unistd.h>
MoveList* new_move_list() {
MoveList* ms = malloc(sizeof(MoveList));
*ms = (MoveList) {.latest = NULL, .oldest = NULL, .length = 0};
return ms;
}
void delete_move_list(MoveList* list) {
while(list->oldest != NULL) {
pop_move(list);
}
free(list);
}
void pop_move(MoveList* list) {
if (list->oldest == NULL) {
return;
}
if (list->oldest == list->latest) {
list->latest = NULL; // If there's only one element
}
MoveItem* old_oldest = list->oldest;
list->oldest = list->oldest->next;
if (list->oldest != NULL) {
list->oldest->prev = NULL;
}
free(old_oldest);
}
void push_move(MoveList* list, Direction direction) {
MoveItem* move = malloc(sizeof(MoveItem));
move->direction = direction;
move->age = 0;
move->prev = list->latest;
list->latest = move;
// If list is empty then oldest = latest
if (list->oldest == NULL) {
list->oldest = move;
}
}