blob: 2b709dd3c3d8dc15dc1514ccdda94a5d7eab3835 (
plain)
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 "point.h"
OBJ(point, point_t, point_copy, point_clone)
OBJS(point, point_t, point_copy, point_clone)
point_t *point_copy(const point_t *src, point_t *dest) {
if (src->point) dest->point = gcopy(src->point);
if (src->order) dest->order = gcopy(src->order);
if (src->cofactor) dest->cofactor = gcopy(src->cofactor);
return dest;
}
point_t *point_clone(const point_t *src, point_t *dest) {
if (src->point) dest->point = gclone(src->point);
if (src->order) dest->order = gclone(src->order);
if (src->cofactor) dest->cofactor = gclone(src->cofactor);
return dest;
}
void point_free(point_t **point) {
if (*point) {
if ((*point)->point && isclone((*point)->point)) {
gunclone((*point)->point);
}
if ((*point)->order && isclone((*point)->order)) {
gunclone((*point)->order);
}
if ((*point)->cofactor && isclone((*point)->cofactor)) {
gunclone((*point)->cofactor);
}
try_free(*point);
*point = NULL;
}
}
void points_free(point_t ***points) {
if (*points) {
try_free(*points);
*points = NULL;
}
}
void points_free_deep(point_t ***points, unsigned long npoints) {
if (*points) {
for (unsigned long i = 0; i < npoints; ++i) {
point_free(&(*points)[i]);
}
points_free(points);
}
}
|