1 1.1 mrg /* 2 1.1 mrg * Copyright 2011 Sven Verdoolaege 3 1.1 mrg * Copyright 2012-2013 Ecole Normale Superieure 4 1.1 mrg * 5 1.1 mrg * Use of this software is governed by the MIT license 6 1.1 mrg * 7 1.1 mrg * Written by Sven Verdoolaege, 8 1.1 mrg * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France 9 1.1 mrg */ 10 1.1 mrg 11 1.1 mrg #include <isl/space.h> 12 1.1 mrg 13 1.1 mrg #include <isl_multi_macro.h> 14 1.1 mrg 15 1.1 mrg const char *FN(MULTI(BASE),get_tuple_name)(__isl_keep MULTI(BASE) *multi, 16 1.1 mrg enum isl_dim_type type) 17 1.1 mrg { 18 1.1 mrg return multi ? isl_space_get_tuple_name(multi->space, type) : NULL; 19 1.1 mrg } 20 1.1 mrg 21 1.1 mrg /* Does the specified tuple have an id? 22 1.1 mrg */ 23 1.1 mrg isl_bool FN(MULTI(BASE),has_tuple_id)(__isl_keep MULTI(BASE) *multi, 24 1.1 mrg enum isl_dim_type type) 25 1.1 mrg { 26 1.1 mrg if (!multi) 27 1.1 mrg return isl_bool_error; 28 1.1 mrg return isl_space_has_tuple_id(multi->space, type); 29 1.1 mrg } 30 1.1 mrg 31 1.1 mrg /* Does the (range) tuple of "multi" have an identifier? 32 1.1 mrg * 33 1.1 mrg * Technically, the implementation should use isl_dim_set if "multi" 34 1.1 mrg * lives in a set space and isl_dim_out if it lives in a map space. 35 1.1 mrg * Internally, however, it can be assumed that isl_dim_set is equal 36 1.1 mrg * to isl_dim_out. 37 1.1 mrg */ 38 1.1 mrg isl_bool FN(MULTI(BASE),has_range_tuple_id)(__isl_keep MULTI(BASE) *multi) 39 1.1 mrg { 40 1.1 mrg return FN(MULTI(BASE),has_tuple_id)(multi, isl_dim_out); 41 1.1 mrg } 42 1.1 mrg 43 1.1 mrg /* Return the id of the specified tuple. 44 1.1 mrg */ 45 1.1 mrg __isl_give isl_id *FN(MULTI(BASE),get_tuple_id)(__isl_keep MULTI(BASE) *multi, 46 1.1 mrg enum isl_dim_type type) 47 1.1 mrg { 48 1.1 mrg return multi ? isl_space_get_tuple_id(multi->space, type) : NULL; 49 1.1 mrg } 50 1.1 mrg 51 1.1 mrg /* Return the identifier of the (range) tuple of "multi", assuming it has one. 52 1.1 mrg * 53 1.1 mrg * Technically, the implementation should use isl_dim_set if "multi" 54 1.1 mrg * lives in a set space and isl_dim_out if it lives in a map space. 55 1.1 mrg * Internally, however, it can be assumed that isl_dim_set is equal 56 1.1 mrg * to isl_dim_out. 57 1.1 mrg */ 58 1.1 mrg __isl_give isl_id *FN(MULTI(BASE),get_range_tuple_id)( 59 1.1 mrg __isl_keep MULTI(BASE) *multi) 60 1.1 mrg { 61 1.1 mrg return FN(MULTI(BASE),get_tuple_id)(multi, isl_dim_out); 62 1.1 mrg } 63 1.1 mrg 64 1.1 mrg __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_name)( 65 1.1 mrg __isl_keep MULTI(BASE) *multi, enum isl_dim_type type, 66 1.1 mrg const char *s) 67 1.1 mrg { 68 1.1 mrg isl_space *space; 69 1.1 mrg 70 1.1 mrg multi = FN(MULTI(BASE),cow)(multi); 71 1.1 mrg if (!multi) 72 1.1 mrg return NULL; 73 1.1 mrg 74 1.1 mrg space = FN(MULTI(BASE),get_space)(multi); 75 1.1 mrg space = isl_space_set_tuple_name(space, type, s); 76 1.1 mrg 77 1.1 mrg return FN(MULTI(BASE),reset_space)(multi, space); 78 1.1 mrg } 79 1.1 mrg 80 1.1 mrg __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_id)( 81 1.1 mrg __isl_take MULTI(BASE) *multi, enum isl_dim_type type, 82 1.1 mrg __isl_take isl_id *id) 83 1.1 mrg { 84 1.1 mrg isl_space *space; 85 1.1 mrg 86 1.1 mrg multi = FN(MULTI(BASE),cow)(multi); 87 1.1 mrg if (!multi) 88 1.1 mrg goto error; 89 1.1 mrg 90 1.1 mrg space = FN(MULTI(BASE),get_space)(multi); 91 1.1 mrg space = isl_space_set_tuple_id(space, type, id); 92 1.1 mrg 93 1.1 mrg return FN(MULTI(BASE),reset_space)(multi, space); 94 1.1 mrg error: 95 1.1 mrg isl_id_free(id); 96 1.1 mrg return NULL; 97 1.1 mrg } 98 1.1 mrg 99 1.1 mrg /* Replace the identifier of the (range) tuple of "multi" by "id". 100 1.1 mrg * 101 1.1 mrg * Technically, the implementation should use isl_dim_set if "multi" 102 1.1 mrg * lives in a set space and isl_dim_out if it lives in a map space. 103 1.1 mrg * Internally, however, it can be assumed that isl_dim_set is equal 104 1.1 mrg * to isl_dim_out. 105 1.1 mrg */ 106 1.1 mrg __isl_give MULTI(BASE) *FN(MULTI(BASE),set_range_tuple_id)( 107 1.1 mrg __isl_take MULTI(BASE) *multi, __isl_take isl_id *id) 108 1.1 mrg { 109 1.1 mrg return FN(MULTI(BASE),set_tuple_id)(multi, isl_dim_out, id); 110 1.1 mrg } 111 1.1 mrg 112 1.1 mrg /* Drop the id on the specified tuple. 113 1.1 mrg */ 114 1.1 mrg __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_tuple_id)( 115 1.1 mrg __isl_take MULTI(BASE) *multi, enum isl_dim_type type) 116 1.1 mrg { 117 1.1 mrg isl_space *space; 118 1.1 mrg 119 1.1 mrg if (!multi) 120 1.1 mrg return NULL; 121 1.1 mrg if (!FN(MULTI(BASE),has_tuple_id)(multi, type)) 122 1.1 mrg return multi; 123 1.1 mrg 124 1.1 mrg multi = FN(MULTI(BASE),cow)(multi); 125 1.1 mrg if (!multi) 126 1.1 mrg return NULL; 127 1.1 mrg 128 1.1 mrg space = FN(MULTI(BASE),get_space)(multi); 129 1.1 mrg space = isl_space_reset_tuple_id(space, type); 130 1.1 mrg 131 1.1 mrg return FN(MULTI(BASE),reset_space)(multi, space); 132 1.1 mrg } 133 1.1 mrg 134 1.1 mrg /* Drop the identifier of the (range) tuple of "multi". 135 1.1 mrg * 136 1.1 mrg * Technically, the implementation should use isl_dim_set if "multi" 137 1.1 mrg * lives in a set space and isl_dim_out if it lives in a map space. 138 1.1 mrg * Internally, however, it can be assumed that isl_dim_set is equal 139 1.1 mrg * to isl_dim_out. 140 1.1 mrg */ 141 1.1 mrg __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_range_tuple_id)( 142 1.1 mrg __isl_take MULTI(BASE) *multi) 143 1.1 mrg { 144 1.1 mrg return FN(MULTI(BASE),reset_tuple_id)(multi, isl_dim_out); 145 1.1 mrg } 146