-
Notifications
You must be signed in to change notification settings - Fork 0
/
edge.c
82 lines (65 loc) · 1.53 KB
/
edge.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "edge.h"
#include "defs.h"
/**
* @brief
* @note Arista: Node (x1) -- Flow(f)[/Capacity(c)] -- Node (x2).
*
* Contiene los Nodos, la capacidad y el flujo de una arista.
*/
struct s_Edge {
Node x1;
Node x2;
Capacity c;
Flow f;
};
Edge *edge_create(Node x1, Node x2, Capacity c, Flow f) {
Edge *result = NULL;
assert(x1 != x2);/* No se puede hacer una arista a si mismo */
result = calloc(1, sizeof(*result));
if (result != NULL) {
result->x1 = x1;
result->x2 = x2;
result->c = c;
result->f = f;
}
return result;
}
Capacity edge_get_capacity(Edge *self) {
assert(self != NULL);
return self->c;
}
Flow edge_get_flow(Edge *self) {
assert(self != NULL);
return self->f;
}
Node *edge_get_first(Edge *self) {
assert(self != NULL);
return &self->x1;
}
Node *edge_get_second(Edge *self) {
assert(self != NULL);
return &self->x2;
}
void edge_set_flow(Edge *self, Flow f) {
assert(self != NULL);
self->f = f;
}
bool edge_cmp(const Edge *e1, const Edge *e2) {
assert(e1 != NULL && e2 != NULL);
return (e1->x1 == e2->x1 && e1->x2 == e2->x2);
}
void edge_pprint(const Edge *self) {
assert(self != NULL);
printf("%u %u %u (%u)\n", self->x1, self->x2, self->f, self->c);
}
void edge_destroy(Edge *self) {
assert(self != NULL);
free(self);
}
void edge_update_flow(Edge *self, unsigned int new_flow) {
assert(self != NULL);
self->f = new_flow;
}