From 333c37075ac05e4084aa2b98a180c9e8315e00f8 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 4 Mar 2010 11:37:21 +0100 Subject: [PATCH] add generic isl_obj --- Makefile.am | 2 + include/isl_obj.h | 35 ++++++++++++++++ isl_obj.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 include/isl_obj.h create mode 100644 isl_obj.c diff --git a/Makefile.am b/Makefile.am index 3be2705..0d2ab50 100644 --- a/Makefile.am +++ b/Makefile.am @@ -61,6 +61,7 @@ libisl_la_SOURCES = \ isl_mat.c \ isl_name.c \ isl_name.h \ + isl_obj.c \ isl_options.c \ isl_output.c \ isl_piplib.h \ @@ -157,6 +158,7 @@ pkginclude_HEADERS = \ include/isl_lp.h \ include/isl_mat.h \ include/isl_map.h \ + include/isl_obj.h \ include/isl_options.h \ include/isl_point.h \ include/isl_polynomial.h \ diff --git a/include/isl_obj.h b/include/isl_obj.h new file mode 100644 index 0000000..18044b8 --- /dev/null +++ b/include/isl_obj.h @@ -0,0 +1,35 @@ +#ifndef ISL_OBJ_H +#define ISL_OBJ_H + +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +struct isl_obj_vtable { + void *(*copy)(void *v1); + void *(*add)(void *v1, void *v2); + void (*print)(void *v, FILE *out); + void (*free)(void *v); +}; +typedef struct isl_obj_vtable *isl_obj_type; +extern isl_obj_type isl_obj_none; +extern struct isl_obj_vtable isl_obj_set_vtable; +#define isl_obj_set (&isl_obj_set_vtable) +extern struct isl_obj_vtable isl_obj_map_vtable; +#define isl_obj_map (&isl_obj_map_vtable) +extern struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable; +#define isl_obj_pw_qpolynomial (&isl_obj_pw_qpolynomial_vtable) +struct isl_obj { + isl_obj_type type; + void *v; +}; + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/isl_obj.c b/isl_obj.c new file mode 100644 index 0000000..ccd598f --- /dev/null +++ b/isl_obj.c @@ -0,0 +1,119 @@ +/* + * Copyright 2010 INRIA Saclay + * + * Use of this software is governed by the GNU LGPLv2.1 license + * + * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, + * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, + * 91893 Orsay, France + */ + +#include + +static void *isl_obj_map_copy(void *v) +{ + return isl_map_copy((struct isl_map *)v); +} + +static void isl_obj_map_free(void *v) +{ + isl_map_free((struct isl_map *)v); +} + +static void isl_obj_map_print(void *v, FILE *out) +{ + isl_map_print((struct isl_map *)v, out, 0, ISL_FORMAT_ISL); +} + +static void *isl_obj_map_add(void *v1, void *v2) +{ + return isl_map_union((struct isl_map *)v1, (struct isl_map *)v2); +} + +struct isl_obj_vtable isl_obj_map_vtable = { + isl_obj_map_copy, + isl_obj_map_add, + isl_obj_map_print, + isl_obj_map_free +}; + +static void *isl_obj_set_copy(void *v) +{ + return isl_set_copy((struct isl_set *)v); +} + +static void isl_obj_set_free(void *v) +{ + isl_set_free((struct isl_set *)v); +} + +static void isl_obj_set_print(void *v, FILE *out) +{ + isl_set_print((struct isl_set *)v, out, 0, ISL_FORMAT_ISL); +} + +static void *isl_obj_set_add(void *v1, void *v2) +{ + return isl_set_union((struct isl_set *)v1, (struct isl_set *)v2); +} + +struct isl_obj_vtable isl_obj_set_vtable = { + isl_obj_set_copy, + isl_obj_set_add, + isl_obj_set_print, + isl_obj_set_free +}; + +static void *isl_obj_none_copy(void *v) +{ + return v; +} + +static void isl_obj_none_free(void *v) +{ +} + +static void isl_obj_none_print(void *v, FILE *out) +{ +} + +static void *isl_obj_none_add(void *v1, void *v2) +{ +} + +static struct isl_obj_vtable obj_none = { + isl_obj_none_copy, + isl_obj_none_add, + isl_obj_none_print, + isl_obj_none_free +}; +isl_obj_type isl_obj_none = &obj_none; + +static void *isl_obj_pw_qp_copy(void *v) +{ + return isl_pw_qpolynomial_copy((struct isl_pw_qpolynomial *)v); +} + +static void isl_obj_pw_qp_free(void *v) +{ + isl_pw_qpolynomial_free((struct isl_pw_qpolynomial *)v); +} + +static void isl_obj_pw_qp_print(void *v, FILE *out) +{ + isl_pw_qpolynomial_print((struct isl_pw_qpolynomial *)v, out, + ISL_FORMAT_ISL); +} + +static void *isl_obj_pw_qp_add(void *v1, void *v2) +{ + return isl_pw_qpolynomial_add((struct isl_pw_qpolynomial *)v1, + (struct isl_pw_qpolynomial *)v2); +} + +struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable = { + isl_obj_pw_qp_copy, + isl_obj_pw_qp_add, + isl_obj_pw_qp_print, + isl_obj_pw_qp_free +}; -- 2.7.4