1/* 2 * Copyright 2010 INRIA Saclay 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, 7 * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, 8 * 91893 Orsay, France 9 */ 10 11#ifndef ISL_MORHP_H 12#define ISL_MORHP_H 13 14#include <stdio.h> 15#include <isl/space.h> 16#include <isl/mat.h> 17#include <isl/set.h> 18 19#if defined(__cplusplus) 20extern "C" { 21#endif 22 23/* An isl_morph is a "morphism" on (basic) sets. 24 * "map" is an affine mapping from "dom" to "ran" 25 * and "inv" is the inverse mapping. 26 */ 27struct isl_morph { 28 int ref; 29 30 isl_basic_set *dom; 31 isl_basic_set *ran; 32 33 isl_mat *map; 34 isl_mat *inv; 35}; 36typedef struct isl_morph isl_morph; 37 38__isl_give isl_morph *isl_morph_alloc( 39 __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, 40 __isl_take isl_mat *map, __isl_take isl_mat *inv); 41__isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph); 42__isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset); 43void isl_morph_free(__isl_take isl_morph *morph); 44 45__isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph); 46unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); 47unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); 48 49__isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, 50 enum isl_dim_type type, unsigned first, unsigned n); 51__isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, 52 enum isl_dim_type type, unsigned first, unsigned n); 53__isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph); 54__isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph); 55 56__isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, 57 __isl_take isl_morph *morph2); 58__isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph); 59 60void isl_morph_print_internal(__isl_take isl_morph *morph, FILE *out); 61void isl_morph_dump(__isl_take isl_morph *morph); 62 63__isl_give isl_morph *isl_basic_set_variable_compression( 64 __isl_keep isl_basic_set *bset, enum isl_dim_type type); 65__isl_give isl_morph *isl_basic_set_parameter_compression( 66 __isl_keep isl_basic_set *bset); 67__isl_give isl_morph *isl_basic_set_full_compression( 68 __isl_keep isl_basic_set *bset); 69 70__isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, 71 __isl_take isl_basic_set *bset); 72__isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, 73 __isl_take isl_set *set); 74__isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, 75 __isl_take isl_vec *vec); 76 77#if defined(__cplusplus) 78} 79#endif 80 81#endif 82