366 lines · c
1/*2 * Copyright 2010 INRIA Saclay3 * Copyright 2014 Ecole Normale Superieure4 * Copyright 2014 INRIA Rocquencourt5 *6 * Use of this software is governed by the MIT license7 *8 * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,9 * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,10 * 91893 Orsay, France 11 * and Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France12 * and Inria Paris - Rocquencourt, Domaine de Voluceau - Rocquencourt,13 * B.P. 105 - 78153 Le Chesnay, France14 */15 16#include <isl/val.h>17#include <isl/aff.h>18#include <isl/set.h>19#include <isl/map.h>20#include <isl/union_set.h>21#include <isl/union_map.h>22#include <isl/polynomial.h>23#include <isl/schedule.h>24#include <isl/obj.h>25 26static void *isl_obj_val_copy(void *v)27{28 return isl_val_copy((isl_val *)v);29}30 31static void isl_obj_val_free(void *v)32{33 isl_val_free((isl_val *)v);34}35 36static __isl_give isl_printer *isl_obj_val_print(__isl_take isl_printer *p,37 void *v)38{39 return isl_printer_print_val(p, (isl_val *)v);40}41 42static void *isl_obj_val_add(void *v1, void *v2)43{44 return isl_val_add((isl_val *) v1, (isl_val *) v2);45}46 47struct isl_obj_vtable isl_obj_val_vtable = {48 isl_obj_val_copy,49 isl_obj_val_add,50 isl_obj_val_print,51 isl_obj_val_free52};53 54static void *isl_obj_map_copy(void *v)55{56 return isl_map_copy((struct isl_map *)v);57}58 59static void isl_obj_map_free(void *v)60{61 isl_map_free((struct isl_map *)v);62}63 64static __isl_give isl_printer *isl_obj_map_print(__isl_take isl_printer *p,65 void *v)66{67 return isl_printer_print_map(p, (struct isl_map *)v);68}69 70static void *isl_obj_map_add(void *v1, void *v2)71{72 return isl_map_union((struct isl_map *)v1, (struct isl_map *)v2);73}74 75struct isl_obj_vtable isl_obj_map_vtable = {76 isl_obj_map_copy,77 isl_obj_map_add,78 isl_obj_map_print,79 isl_obj_map_free80};81 82static void *isl_obj_union_map_copy(void *v)83{84 return isl_union_map_copy((isl_union_map *)v);85}86 87static void isl_obj_union_map_free(void *v)88{89 isl_union_map_free((isl_union_map *)v);90}91 92static __isl_give isl_printer *isl_obj_union_map_print(__isl_take isl_printer *p,93 void *v)94{95 return isl_printer_print_union_map(p, (isl_union_map *)v);96}97 98static void *isl_obj_union_map_add(void *v1, void *v2)99{100 return isl_union_map_union((isl_union_map *)v1, (isl_union_map *)v2);101}102 103struct isl_obj_vtable isl_obj_union_map_vtable = {104 isl_obj_union_map_copy,105 isl_obj_union_map_add,106 isl_obj_union_map_print,107 isl_obj_union_map_free108};109 110static void *isl_obj_set_copy(void *v)111{112 return isl_set_copy((struct isl_set *)v);113}114 115static void isl_obj_set_free(void *v)116{117 isl_set_free((struct isl_set *)v);118}119 120static __isl_give isl_printer *isl_obj_set_print(__isl_take isl_printer *p,121 void *v)122{123 return isl_printer_print_set(p, (struct isl_set *)v);124}125 126static void *isl_obj_set_add(void *v1, void *v2)127{128 return isl_set_union((struct isl_set *)v1, (struct isl_set *)v2);129}130 131struct isl_obj_vtable isl_obj_set_vtable = {132 isl_obj_set_copy,133 isl_obj_set_add,134 isl_obj_set_print,135 isl_obj_set_free136};137 138static void *isl_obj_union_set_copy(void *v)139{140 return isl_union_set_copy((isl_union_set *)v);141}142 143static void isl_obj_union_set_free(void *v)144{145 isl_union_set_free((isl_union_set *)v);146}147 148static __isl_give isl_printer *isl_obj_union_set_print(__isl_take isl_printer *p,149 void *v)150{151 return isl_printer_print_union_set(p, (isl_union_set *)v);152}153 154static void *isl_obj_union_set_add(void *v1, void *v2)155{156 return isl_union_set_union((isl_union_set *)v1, (isl_union_set *)v2);157}158 159struct isl_obj_vtable isl_obj_union_set_vtable = {160 isl_obj_union_set_copy,161 isl_obj_union_set_add,162 isl_obj_union_set_print,163 isl_obj_union_set_free164};165 166static void *isl_obj_pw_multi_aff_copy(void *v)167{168 return isl_pw_multi_aff_copy((isl_pw_multi_aff *) v);169}170 171static void isl_obj_pw_multi_aff_free(void *v)172{173 isl_pw_multi_aff_free((isl_pw_multi_aff *) v);174}175 176static __isl_give isl_printer *isl_obj_pw_multi_aff_print(177 __isl_take isl_printer *p, void *v)178{179 return isl_printer_print_pw_multi_aff(p, (isl_pw_multi_aff *) v);180}181 182static void *isl_obj_pw_multi_aff_add(void *v1, void *v2)183{184 return isl_pw_multi_aff_add((isl_pw_multi_aff *) v1,185 (isl_pw_multi_aff *) v2);186}187 188struct isl_obj_vtable isl_obj_pw_multi_aff_vtable = {189 isl_obj_pw_multi_aff_copy,190 isl_obj_pw_multi_aff_add,191 isl_obj_pw_multi_aff_print,192 isl_obj_pw_multi_aff_free193};194 195static void *isl_obj_none_copy(void *v)196{197 return v;198}199 200static void isl_obj_none_free(void *v)201{202}203 204static __isl_give isl_printer *isl_obj_none_print(__isl_take isl_printer *p,205 void *v)206{207 return p;208}209 210static void *isl_obj_none_add(void *v1, void *v2)211{212 return NULL;213}214 215struct isl_obj_vtable isl_obj_none_vtable = {216 isl_obj_none_copy,217 isl_obj_none_add,218 isl_obj_none_print,219 isl_obj_none_free220};221 222static void *isl_obj_pw_qp_copy(void *v)223{224 return isl_pw_qpolynomial_copy((struct isl_pw_qpolynomial *)v);225}226 227static void isl_obj_pw_qp_free(void *v)228{229 isl_pw_qpolynomial_free((struct isl_pw_qpolynomial *)v);230}231 232static __isl_give isl_printer *isl_obj_pw_qp_print(__isl_take isl_printer *p,233 void *v)234{235 return isl_printer_print_pw_qpolynomial(p,236 (struct isl_pw_qpolynomial *)v);237}238 239static void *isl_obj_pw_qp_add(void *v1, void *v2)240{241 return isl_pw_qpolynomial_add((struct isl_pw_qpolynomial *)v1,242 (struct isl_pw_qpolynomial *)v2);243}244 245struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable = {246 isl_obj_pw_qp_copy,247 isl_obj_pw_qp_add,248 isl_obj_pw_qp_print,249 isl_obj_pw_qp_free250};251 252static void *isl_obj_union_pw_qp_copy(void *v)253{254 return isl_union_pw_qpolynomial_copy((struct isl_union_pw_qpolynomial *)v);255}256 257static void isl_obj_union_pw_qp_free(void *v)258{259 isl_union_pw_qpolynomial_free((struct isl_union_pw_qpolynomial *)v);260}261 262static __isl_give isl_printer *isl_obj_union_pw_qp_print(263 __isl_take isl_printer *p, void *v)264{265 return isl_printer_print_union_pw_qpolynomial(p,266 (struct isl_union_pw_qpolynomial *)v);267}268 269static void *isl_obj_union_pw_qp_add(void *v1, void *v2)270{271 return isl_union_pw_qpolynomial_add(272 (struct isl_union_pw_qpolynomial *)v1,273 (struct isl_union_pw_qpolynomial *)v2);274}275 276struct isl_obj_vtable isl_obj_union_pw_qpolynomial_vtable = {277 isl_obj_union_pw_qp_copy,278 isl_obj_union_pw_qp_add,279 isl_obj_union_pw_qp_print,280 isl_obj_union_pw_qp_free281};282 283static void *isl_obj_pw_qpf_copy(void *v)284{285 return isl_pw_qpolynomial_fold_copy((struct isl_pw_qpolynomial_fold *)v);286}287 288static void isl_obj_pw_qpf_free(void *v)289{290 isl_pw_qpolynomial_fold_free((struct isl_pw_qpolynomial_fold *)v);291}292 293static __isl_give isl_printer *isl_obj_pw_qpf_print(__isl_take isl_printer *p,294 void *v)295{296 return isl_printer_print_pw_qpolynomial_fold(p,297 (struct isl_pw_qpolynomial_fold *)v);298}299 300static void *isl_obj_pw_qpf_add(void *v1, void *v2)301{302 return isl_pw_qpolynomial_fold_fold((struct isl_pw_qpolynomial_fold *)v1,303 (struct isl_pw_qpolynomial_fold *)v2);304}305 306struct isl_obj_vtable isl_obj_pw_qpolynomial_fold_vtable = {307 isl_obj_pw_qpf_copy,308 isl_obj_pw_qpf_add,309 isl_obj_pw_qpf_print,310 isl_obj_pw_qpf_free311};312 313static void *isl_obj_union_pw_qpf_copy(void *v)314{315 return isl_union_pw_qpolynomial_fold_copy((struct isl_union_pw_qpolynomial_fold *)v);316}317 318static void isl_obj_union_pw_qpf_free(void *v)319{320 isl_union_pw_qpolynomial_fold_free((struct isl_union_pw_qpolynomial_fold *)v);321}322 323static __isl_give isl_printer *isl_obj_union_pw_qpf_print(324 __isl_take isl_printer *p, void *v)325{326 return isl_printer_print_union_pw_qpolynomial_fold(p,327 (struct isl_union_pw_qpolynomial_fold *)v);328}329 330static void *isl_obj_union_pw_qpf_add(void *v1, void *v2)331{332 return isl_union_pw_qpolynomial_fold_fold(333 (struct isl_union_pw_qpolynomial_fold *)v1,334 (struct isl_union_pw_qpolynomial_fold *)v2);335}336 337struct isl_obj_vtable isl_obj_union_pw_qpolynomial_fold_vtable = {338 isl_obj_union_pw_qpf_copy,339 isl_obj_union_pw_qpf_add,340 isl_obj_union_pw_qpf_print,341 isl_obj_union_pw_qpf_free342};343 344static void *isl_obj_schedule_copy(void *v)345{346 return isl_schedule_copy((isl_schedule *) v);347}348 349static void isl_obj_schedule_free(void *v)350{351 isl_schedule_free((isl_schedule *) v);352}353 354static __isl_give isl_printer *isl_obj_schedule_print(355 __isl_take isl_printer *p, void *v)356{357 return isl_printer_print_schedule(p, (isl_schedule *) v);358}359 360struct isl_obj_vtable isl_obj_schedule_vtable = {361 isl_obj_schedule_copy,362 NULL,363 isl_obj_schedule_print,364 isl_obj_schedule_free365};366