diff options
| author | J08nY | 2018-03-28 19:09:06 +0200 |
|---|---|---|
| committer | J08nY | 2018-03-28 19:09:06 +0200 |
| commit | f75446e573fb7d06be668b1dcdeb418f89b81af1 (patch) | |
| tree | 36d30b5caf5970dfbb8eaf4f3da3577a97d22ff0 | |
| parent | 2f4a68259dec833c77a9598f9c1a5da547e9324d (diff) | |
| download | ecgen-f75446e573fb7d06be668b1dcdeb418f89b81af1.tar.gz ecgen-f75446e573fb7d06be668b1dcdeb418f89b81af1.tar.zst ecgen-f75446e573fb7d06be668b1dcdeb418f89b81af1.zip | |
| -rw-r--r-- | src/obj/curve.c | 15 | ||||
| -rw-r--r-- | src/obj/curve.h | 21 | ||||
| -rw-r--r-- | src/obj/obj.h | 58 | ||||
| -rw-r--r-- | src/obj/point.c | 43 | ||||
| -rw-r--r-- | src/obj/point.h | 63 | ||||
| -rw-r--r-- | src/obj/subgroup.c | 46 | ||||
| -rw-r--r-- | src/obj/subgroup.h | 63 |
7 files changed, 72 insertions, 237 deletions
diff --git a/src/obj/curve.c b/src/obj/curve.c index 8d54f50..4821442 100644 --- a/src/obj/curve.c +++ b/src/obj/curve.c @@ -1,12 +1,9 @@ #include "curve.h" #include "gen/seed.h" -#include "math/subgroup.h" -#include "misc/types.h" #include "obj/subgroup.h" -#include "util/memory.h" -curve_t *curve_new(void) { return try_calloc(sizeof(curve_t)); } +OBJ(curve, curve_t, curve_copy, curve_clone) curve_t *curve_copy(const curve_t *src, curve_t *dest) { if (src->seed) dest->seed = seed_new_copy(src->seed); @@ -22,11 +19,6 @@ curve_t *curve_copy(const curve_t *src, curve_t *dest) { return dest; } -curve_t *curve_new_copy(const curve_t *src) { - curve_t *result = curve_new(); - return curve_copy(src, result); -} - curve_t *curve_clone(const curve_t *src, curve_t *dest) { if (src->seed) dest->seed = seed_new_clone(src->seed); if (src->field) dest->field = gclone(src->field); @@ -41,11 +33,6 @@ curve_t *curve_clone(const curve_t *src, curve_t *dest) { return dest; } -curve_t *curve_new_clone(const curve_t *src) { - curve_t *result = curve_new(); - return curve_clone(src, result); -} - void curve_free(curve_t **curve) { if (*curve) { seed_free(&(*curve)->seed); diff --git a/src/obj/curve.h b/src/obj/curve.h index 5d8886b..99284f4 100644 --- a/src/obj/curve.h +++ b/src/obj/curve.h @@ -3,12 +3,9 @@ #define ECGEN_OBJ_CURVE_H #include "misc/types.h" +#include "obj.h" -/** - * Allocates and zeros out a new curve_t object. - * @return new curve - */ -curve_t *curve_new(void); +OBJ_H(curve, curve_t) /** * Copies parameters from src curve to dest curve, allocates space for points. @@ -23,26 +20,12 @@ curve_t *curve_copy(const curve_t *src, curve_t *dest); /** * * @param src - * @return - */ -curve_t *curve_new_copy(const curve_t *src); - -/** - * - * @param src * @param dest * @return */ curve_t *curve_clone(const curve_t *src, curve_t *dest); /** - * - * @param src - * @return - */ -curve_t *curve_new_clone(const curve_t *src); - -/** * Free a curve_t along with it's seed_t and point_ts. * @param curve to free */ diff --git a/src/obj/obj.h b/src/obj/obj.h new file mode 100644 index 0000000..5a7f9ab --- /dev/null +++ b/src/obj/obj.h @@ -0,0 +1,58 @@ + +#ifndef ECGEN_OBJ_H +#define ECGEN_OBJ_H + +#include "misc/types.h" +#include "util/memory.h" + +#define OBJ(obj_name, obj_type, copy_func, clone_func) \ + obj_type *obj_name##_new() { return try_calloc(sizeof(obj_type)); } \ + obj_type *obj_name##_new_copy(const obj_type *src) { \ + obj_type *result = obj_name##_new(); \ + return copy_func(src, result); \ + } \ + obj_type *obj_name##_new_clone(const obj_type *src) { \ + obj_type *result = obj_name##_new(); \ + return clone_func(src, result); \ + } + +#define OBJS(obj_name, obj_type, copy_func, clone_func) \ + obj_type **obj_name##s_new(size_t num) { \ + return try_calloc(num * sizeof(obj_type)); \ + } \ + obj_type **obj_name##s_copy(obj_type **const src, obj_type **dest, \ + size_t num) { \ + for (size_t i = 0; i < num; ++i) { \ + dest[i] = obj_name##_new_copy(src[i]); \ + } \ + return dest; \ + } \ + obj_type **obj_name##s_clone(obj_type **const src, obj_type **dest, \ + size_t num) { \ + for (size_t i = 0; i < num; ++i) { \ + dest[i] = obj_name##_new_clone(src[i]); \ + } \ + return dest; \ + } \ + obj_type **obj_name##s_new_copy(obj_type **const src, size_t num) { \ + obj_type **result = obj_name##s_new(num); \ + return obj_name##s_copy(src, result, num); \ + } \ + obj_type **obj_name##s_new_clone(obj_type **const src, size_t num) { \ + obj_type **result = obj_name##s_new(num); \ + return obj_name##s_clone(src, result, num); \ + } + +#define OBJ_H(obj_name, obj_type) \ + obj_type *obj_name##_new(); \ + obj_type *obj_name##_new_copy(const obj_type *src); \ + obj_type *obj_name##_new_clone(const obj_type *src); + +#define OBJS_H(obj_name, obj_type) \ + obj_type **obj_name##s_new(size_t num); \ + obj_type **obj_name##s_copy(obj_type **src, obj_type **dest, size_t num); \ + obj_type **obj_name##s_clone(obj_type **src, obj_type **dest, size_t num); \ + obj_type **obj_name##s_new_copy(obj_type **src, size_t num); \ + obj_type **obj_name##s_new_clone(obj_type **src, size_t num); + +#endif // ECGEN_OBJ_H diff --git a/src/obj/point.c b/src/obj/point.c index 9c9b37d..2b709dd 100644 --- a/src/obj/point.c +++ b/src/obj/point.c @@ -1,9 +1,8 @@ #include "point.h" -#include "misc/types.h" -#include "util/memory.h" -point_t *point_new(void) { return try_calloc(sizeof(point_t)); } +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); @@ -12,11 +11,6 @@ point_t *point_copy(const point_t *src, point_t *dest) { return dest; } -point_t *point_new_copy(const point_t *src) { - point_t *result = point_new(); - return point_copy(src, result); -} - 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); @@ -24,11 +18,6 @@ point_t *point_clone(const point_t *src, point_t *dest) { return dest; } -point_t *point_new_clone(const point_t *src) { - point_t *result = point_new(); - return point_clone(src, result); -} - void point_free(point_t **point) { if (*point) { if ((*point)->point && isclone((*point)->point)) { @@ -45,34 +34,6 @@ void point_free(point_t **point) { } } -point_t **points_new(unsigned long num) { - return try_calloc(num * sizeof(point_t *)); -} - -point_t **points_copy(point_t **const src, point_t **dest, unsigned long num) { - for (unsigned long i = 0; i < num; ++i) { - dest[i] = point_new_copy(src[i]); - } - return dest; -} - -point_t **points_new_copy(point_t **const src, unsigned long num) { - point_t **result = points_new(num); - return points_copy(src, result, num); -} - -point_t **points_clone(point_t **const src, point_t **dest, unsigned long num) { - for (unsigned long i = 0; i < num; ++i) { - dest[i] = point_new_clone(src[i]); - } - return dest; -} - -point_t **points_new_clone(point_t **const src, unsigned long num) { - point_t **result = points_new(num); - return points_clone(src, result, num); -} - void points_free(point_t ***points) { if (*points) { try_free(*points); diff --git a/src/obj/point.h b/src/obj/point.h index d6aa55e..619f0e2 100644 --- a/src/obj/point.h +++ b/src/obj/point.h @@ -3,12 +3,10 @@ #define ECGEN_OBJ_POINT_H #include "misc/types.h" +#include "obj.h" -/** - * - * @return - */ -point_t *point_new(void); +OBJ_H(point, point_t) +OBJS_H(point, point_t) /** * @@ -21,13 +19,6 @@ point_t *point_copy(const point_t *src, point_t *dest); /** * * @param src - * @return - */ -point_t *point_new_copy(const point_t *src); - -/** - * - * @param src * @param dest * @return */ @@ -35,60 +26,12 @@ point_t *point_clone(const point_t *src, point_t *dest); /** * - * @param src - * @return - */ -point_t *point_new_clone(const point_t *src); - -/** - * * @param point */ void point_free(point_t **point); /** * - * @param num - * @return - */ -point_t **points_new(unsigned long num); - -/** - * - * @param src - * @param dest - * @param num - * @return - */ -point_t **points_copy(point_t **src, point_t **dest, unsigned long num); - -/** - * - * @param src - * @param num - * @return - */ -point_t **points_new_copy(point_t **src, unsigned long num); - -/** - * - * @param src - * @param dest - * @param num - * @return - */ -point_t **points_clone(point_t **src, point_t **dest, unsigned long num); - -/** - * - * @param src - * @param num - * @return - */ -point_t **points_new_clone(point_t **src, unsigned long num); - -/** - * * @param point */ void points_free(point_t ***point); diff --git a/src/obj/subgroup.c b/src/obj/subgroup.c index 732e0a9..5e6d6e6 100644 --- a/src/obj/subgroup.c +++ b/src/obj/subgroup.c @@ -1,9 +1,9 @@ #include "subgroup.h" #include "point.h" -#include "util/memory.h" -subgroup_t *subgroup_new(void) { return try_calloc(sizeof(subgroup_t)); } +OBJ(subgroup, subgroup_t, subgroup_copy, subgroup_clone) +OBJS(subgroup, subgroup_t, subgroup_copy, subgroup_clone) subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst) { if (src->generator) dst->generator = point_new_copy(src->generator); @@ -14,11 +14,6 @@ subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst) { return dst; } -subgroup_t *subgroup_new_copy(const subgroup_t *src) { - subgroup_t *result = subgroup_new(); - return subgroup_copy(src, result); -} - subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst) { if (src->generator) dst->generator = point_new_clone(src->generator); if (src->points) { @@ -28,11 +23,6 @@ subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst) { return dst; } -subgroup_t *subgroup_new_clone(const subgroup_t *src) { - subgroup_t *result = subgroup_new(); - return subgroup_clone(src, result); -} - void subgroup_free(subgroup_t **subgroup) { if (*subgroup) { if ((*subgroup)->generator) { @@ -50,36 +40,6 @@ void subgroup_free_deep(subgroup_t **subgroup) { } } -subgroup_t **subgroups_new(size_t num) { - return try_calloc(num * sizeof(subgroup_t *)); -} - -subgroup_t **subgroups_copy(subgroup_t **const src, subgroup_t **dest, - size_t num) { - for (size_t i = 0; i < num; ++i) { - dest[i] = subgroup_new_copy(src[i]); - } - return dest; -} - -subgroup_t **subgroups_new_copy(subgroup_t **const src, size_t num) { - subgroup_t **result = subgroups_new(num); - return subgroups_copy(src, result, num); -} - -subgroup_t **subgroups_clone(subgroup_t **const src, subgroup_t **dest, - size_t num) { - for (size_t i = 0; i < num; ++i) { - dest[i] = subgroup_new_clone(src[i]); - } - return dest; -} - -subgroup_t **subgroups_new_clone(subgroup_t **const src, size_t num) { - subgroup_t **result = subgroups_new(num); - return subgroups_clone(src, result, num); -} - void subgroups_free(subgroup_t ***subgroups) { if (*subgroups) { try_free(*subgroups); @@ -90,7 +50,7 @@ void subgroups_free(subgroup_t ***subgroups) { void subgroups_free_deep(subgroup_t ***subgroups, size_t num) { if (*subgroups) { for (size_t i = 0; i < num; ++i) { - subgroup_free(&(*subgroups)[i]); + subgroup_free_deep(&(*subgroups)[i]); } subgroups_free(subgroups); } diff --git a/src/obj/subgroup.h b/src/obj/subgroup.h index 8c56f9c..fd1a117 100644 --- a/src/obj/subgroup.h +++ b/src/obj/subgroup.h @@ -3,12 +3,10 @@ #define ECGEN_OBJ_SUBGROUP_H #include "misc/types.h" +#include "obj.h" -/** - * @brief - * @return - */ -subgroup_t *subgroup_new(void); +OBJ_H(subgroup, subgroup_t) +OBJS_H(subgroup, subgroup_t) /** * @brief @@ -21,13 +19,6 @@ subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst); /** * @brief * @param src - * @return - */ -subgroup_t *subgroup_new_copy(const subgroup_t *src); - -/** - * @brief - * @param src * @param dst * @return */ @@ -35,13 +26,6 @@ subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst); /** * @brief - * @param src - * @return - */ -subgroup_t *subgroup_new_clone(const subgroup_t *src); - -/** - * @brief * @param subgroup */ void subgroup_free(subgroup_t **subgroup); @@ -54,47 +38,6 @@ void subgroup_free_deep(subgroup_t **subgroup); /** * @brief - * @param num - * @return - */ -subgroup_t **subgroups_new(size_t num); - -/** - * - * @param src - * @param dest - * @param num - * @return - */ -subgroup_t **subgroups_copy(subgroup_t **src, subgroup_t **dest, size_t num); - -/** - * - * @param src - * @param num - * @return - */ -subgroup_t **subgroups_new_copy(subgroup_t **src, size_t num); - -/** - * - * @param src - * @param dest - * @param num - * @return - */ -subgroup_t **subgroups_clone(subgroup_t **src, subgroup_t **dest, size_t num); - -/** - * - * @param src - * @param num - * @return - */ -subgroup_t **subgroups_new_clone(subgroup_t **src, size_t num); - -/** - * @brief * @param subgroups */ void subgroups_free(subgroup_t ***subgroups); |
