-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoordinate_subset.c
49 lines (44 loc) · 1.25 KB
/
coordinate_subset.c
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
#include "main.h"
#include "coordinate.h"
#include "coordinate_set.h"
#include "coordinate_subset.h"
void coordinate_subset_deinit(coordinate_subset_t *obj, coordinate_set_t *parser) {
if (obj->prev) {
obj->prev->next = obj->next;
}
if (obj->next) {
obj->next->prev = obj->prev;
}
if (obj == parser->first_subset) {
parser->first_subset = obj->next;
}
if (obj == parser->last_subset) {
parser->last_subset = obj->prev;
}
coordinate_t *tmp;
coordinate_t *coordinate = obj->first;
while (obj->length) {
tmp = coordinate->next;
coordinate_deinit(coordinate);
coordinate = tmp;
}
parser->subset_count--;
free(obj);
}
void coordinate_subset_init(coordinate_subset_t *subset, coordinate_set_t *set, coordinate_t *coordinate) {
subset->length = 1;
subset->first = coordinate;
subset->last = coordinate;
subset->next = NULL;
subset->prev = set->last_subset;
if (subset->prev) {
subset->prev->next = subset;
}
set->last_subset = subset;
if (!set->first_subset) {
set->first_subset = subset;
}
}
uint64_t coordinate_subset_duration(coordinate_subset_t *obj) {
return (obj->last->timestamp - obj->first->timestamp);
}