multi.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #ifndef ISL_MULTI_H
  2. #define ISL_MULTI_H
  3. #include <isl/val_type.h>
  4. #include <isl/space_type.h>
  5. #include <isl/list.h>
  6. #include <isl/set_type.h>
  7. #if defined(__cplusplus)
  8. extern "C" {
  9. #endif
  10. #define ISL_DECLARE_MULTI(BASE) \
  11. isl_ctx *isl_multi_##BASE##_get_ctx( \
  12. __isl_keep isl_multi_##BASE *multi); \
  13. __isl_export \
  14. __isl_give isl_space *isl_multi_##BASE##_get_space( \
  15. __isl_keep isl_multi_##BASE *multi); \
  16. __isl_give isl_space *isl_multi_##BASE##_get_domain_space( \
  17. __isl_keep isl_multi_##BASE *multi); \
  18. __isl_export \
  19. __isl_give isl_##BASE##_list *isl_multi_##BASE##_get_list( \
  20. __isl_keep isl_multi_##BASE *multi); \
  21. __isl_constructor \
  22. __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list( \
  23. __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
  24. __isl_export \
  25. __isl_give isl_multi_##BASE *isl_space_multi_##BASE( \
  26. __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \
  27. __isl_give isl_multi_##BASE *isl_multi_##BASE##_copy( \
  28. __isl_keep isl_multi_##BASE *multi); \
  29. __isl_null isl_multi_##BASE *isl_multi_##BASE##_free( \
  30. __isl_take isl_multi_##BASE *multi); \
  31. __isl_export \
  32. isl_bool isl_multi_##BASE##_plain_is_equal( \
  33. __isl_keep isl_multi_##BASE *multi1, \
  34. __isl_keep isl_multi_##BASE *multi2); \
  35. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_user( \
  36. __isl_take isl_multi_##BASE *multi); \
  37. __isl_export \
  38. isl_size isl_multi_##BASE##_size(__isl_keep isl_multi_##BASE *multi); \
  39. __isl_export \
  40. __isl_give isl_##BASE *isl_multi_##BASE##_get_at( \
  41. __isl_keep isl_multi_##BASE *multi, int pos); \
  42. __isl_give isl_##BASE *isl_multi_##BASE##_get_##BASE( \
  43. __isl_keep isl_multi_##BASE *multi, int pos); \
  44. __isl_export \
  45. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_at( \
  46. __isl_take isl_multi_##BASE *multi, int pos, \
  47. __isl_take isl_##BASE *el); \
  48. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \
  49. __isl_take isl_multi_##BASE *multi, int pos, \
  50. __isl_take isl_##BASE *el); \
  51. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_splice( \
  52. __isl_take isl_multi_##BASE *multi1, unsigned pos, \
  53. __isl_take isl_multi_##BASE *multi2); \
  54. __isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \
  55. __isl_take isl_multi_##BASE *multi); \
  56. __isl_export \
  57. __isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \
  58. __isl_take isl_multi_##BASE *multi1, \
  59. __isl_take isl_multi_##BASE *multi2); \
  60. __isl_export \
  61. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \
  62. __isl_take isl_multi_##BASE *multi1, \
  63. __isl_take isl_multi_##BASE *multi2); \
  64. __isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \
  65. __isl_take isl_multi_##BASE *multi); \
  66. isl_bool isl_multi_##BASE##_range_is_wrapping( \
  67. __isl_keep isl_multi_##BASE *multi); \
  68. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \
  69. __isl_take isl_multi_##BASE *multi); \
  70. __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_range( \
  71. __isl_take isl_multi_##BASE *multi); \
  72. __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \
  73. __isl_take isl_multi_##BASE *multi, \
  74. __isl_take isl_space *model); \
  75. __isl_give isl_multi_##BASE *isl_multi_##BASE##_from_range( \
  76. __isl_take isl_multi_##BASE *multi);
  77. #define ISL_DECLARE_MULTI_IDENTITY(BASE) \
  78. __isl_overload \
  79. __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity_multi_##BASE( \
  80. __isl_take isl_multi_##BASE *multi); \
  81. __isl_give isl_multi_##BASE *isl_multi_##BASE##_identity( \
  82. __isl_take isl_space *space); \
  83. __isl_overload \
  84. __isl_give isl_multi_##BASE * \
  85. isl_multi_##BASE##_identity_on_domain_space( \
  86. __isl_take isl_space *space); \
  87. __isl_export \
  88. __isl_give isl_multi_##BASE * \
  89. isl_space_identity_multi_##BASE##_on_domain( \
  90. __isl_take isl_space *space);
  91. #define ISL_DECLARE_MULTI_CMP(BASE) \
  92. int isl_multi_##BASE##_plain_cmp(__isl_keep isl_multi_##BASE *multi1, \
  93. __isl_keep isl_multi_##BASE *multi2);
  94. #define ISL_DECLARE_MULTI_ARITH(BASE) \
  95. __isl_overload \
  96. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \
  97. __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
  98. __isl_overload \
  99. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_val( \
  100. __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \
  101. __isl_overload \
  102. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \
  103. __isl_take isl_multi_##BASE *multi, \
  104. __isl_take isl_multi_val *mv); \
  105. __isl_overload \
  106. __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_down_multi_val( \
  107. __isl_take isl_multi_##BASE *multi, \
  108. __isl_take isl_multi_val *mv); \
  109. __isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \
  110. __isl_take isl_multi_##BASE *multi, \
  111. __isl_take isl_multi_val *mv); \
  112. __isl_export \
  113. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \
  114. __isl_take isl_multi_##BASE *multi1, \
  115. __isl_take isl_multi_##BASE *multi2); \
  116. __isl_export \
  117. __isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \
  118. __isl_take isl_multi_##BASE *multi1, \
  119. __isl_take isl_multi_##BASE *multi2); \
  120. __isl_export \
  121. __isl_give isl_multi_##BASE *isl_multi_##BASE##_neg( \
  122. __isl_take isl_multi_##BASE *multi);
  123. #define ISL_DECLARE_MULTI_MIN_MAX(BASE) \
  124. __isl_export \
  125. __isl_give isl_multi_##BASE *isl_multi_##BASE##_min( \
  126. __isl_take isl_multi_##BASE *multi1, \
  127. __isl_take isl_multi_##BASE *multi2); \
  128. __isl_export \
  129. __isl_give isl_multi_##BASE *isl_multi_##BASE##_max( \
  130. __isl_take isl_multi_##BASE *multi1, \
  131. __isl_take isl_multi_##BASE *multi2);
  132. #define ISL_DECLARE_MULTI_ADD_CONSTANT(BASE) \
  133. __isl_overload \
  134. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_val( \
  135. __isl_take isl_multi_##BASE *mpa, __isl_take isl_val *v); \
  136. __isl_overload \
  137. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_constant_multi_val( \
  138. __isl_take isl_multi_##BASE *mpa, __isl_take isl_multi_val *mv);
  139. #define ISL_DECLARE_MULTI_ZERO(BASE) \
  140. __isl_export \
  141. __isl_give isl_multi_##BASE *isl_multi_##BASE##_zero( \
  142. __isl_take isl_space *space); \
  143. __isl_export \
  144. __isl_give isl_multi_##BASE *isl_space_zero_multi_##BASE( \
  145. __isl_take isl_space *space);
  146. #define ISL_DECLARE_MULTI_NAN(BASE) \
  147. __isl_export \
  148. isl_bool isl_multi_##BASE##_involves_nan( \
  149. __isl_keep isl_multi_##BASE *multi);
  150. #define ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
  151. isl_size isl_multi_##BASE##_dim(__isl_keep isl_multi_##BASE *multi, \
  152. enum isl_dim_type type); \
  153. __isl_give isl_multi_##BASE *isl_multi_##BASE##_drop_dims( \
  154. __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
  155. unsigned first, unsigned n);
  156. #define ISL_DECLARE_MULTI_DIMS(BASE) \
  157. ISL_DECLARE_MULTI_DROP_DIMS(BASE) \
  158. isl_bool isl_multi_##BASE##_involves_dims( \
  159. __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
  160. unsigned first, unsigned n); \
  161. __isl_give isl_multi_##BASE *isl_multi_##BASE##_insert_dims( \
  162. __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
  163. unsigned first, unsigned n); \
  164. __isl_give isl_multi_##BASE *isl_multi_##BASE##_add_dims( \
  165. __isl_take isl_multi_##BASE *multi, enum isl_dim_type type, \
  166. unsigned n); \
  167. __isl_give isl_multi_##BASE * \
  168. isl_multi_##BASE##_project_domain_on_params( \
  169. __isl_take isl_multi_##BASE *multi);
  170. #define ISL_DECLARE_MULTI_INSERT_DOMAIN(BASE) \
  171. __isl_export \
  172. __isl_give isl_multi_##BASE * \
  173. isl_multi_##BASE##_insert_domain(__isl_take isl_multi_##BASE *multi, \
  174. __isl_take isl_space *domain);
  175. #define ISL_DECLARE_MULTI_LOCALS(BASE) \
  176. __isl_export \
  177. isl_bool isl_multi_##BASE##_involves_locals( \
  178. __isl_keep isl_multi_##BASE *multi);
  179. #define ISL_DECLARE_MULTI_DIM_ID(BASE) \
  180. int isl_multi_##BASE##_find_dim_by_name( \
  181. __isl_keep isl_multi_##BASE *multi, \
  182. enum isl_dim_type type, const char *name); \
  183. int isl_multi_##BASE##_find_dim_by_id( \
  184. __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type, \
  185. __isl_keep isl_id *id); \
  186. __isl_give isl_id *isl_multi_##BASE##_get_dim_id( \
  187. __isl_keep isl_multi_##BASE *multi, \
  188. enum isl_dim_type type, unsigned pos); \
  189. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_name( \
  190. __isl_take isl_multi_##BASE *multi, \
  191. enum isl_dim_type type, unsigned pos, const char *s); \
  192. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id( \
  193. __isl_take isl_multi_##BASE *multi, \
  194. enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
  195. #define ISL_DECLARE_MULTI_TUPLE_ID(BASE) \
  196. const char *isl_multi_##BASE##_get_tuple_name( \
  197. __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
  198. __isl_export \
  199. isl_bool isl_multi_##BASE##_has_range_tuple_id( \
  200. __isl_keep isl_multi_##BASE *multi); \
  201. isl_bool isl_multi_##BASE##_has_tuple_id( \
  202. __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
  203. __isl_export \
  204. __isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id( \
  205. __isl_keep isl_multi_##BASE *multi); \
  206. __isl_give isl_id *isl_multi_##BASE##_get_tuple_id( \
  207. __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); \
  208. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name( \
  209. __isl_take isl_multi_##BASE *multi, \
  210. enum isl_dim_type type, const char *s); \
  211. __isl_overload \
  212. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id( \
  213. __isl_take isl_multi_##BASE *multi, __isl_take isl_id *id); \
  214. __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id( \
  215. __isl_take isl_multi_##BASE *multi, \
  216. enum isl_dim_type type, __isl_take isl_id *id); \
  217. __isl_export \
  218. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_range_tuple_id( \
  219. __isl_take isl_multi_##BASE *multi); \
  220. __isl_give isl_multi_##BASE *isl_multi_##BASE##_reset_tuple_id( \
  221. __isl_take isl_multi_##BASE *multi, enum isl_dim_type type);
  222. #define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \
  223. __isl_export \
  224. __isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \
  225. __isl_take isl_multi_##BASE *multi1, \
  226. __isl_take isl_multi_##BASE *multi2); \
  227. __isl_give isl_multi_##BASE *isl_multi_##BASE##_splice( \
  228. __isl_take isl_multi_##BASE *multi1, unsigned in_pos, \
  229. unsigned out_pos, __isl_take isl_multi_##BASE *multi2);
  230. #define ISL_DECLARE_MULTI_BIND_DOMAIN(BASE) \
  231. __isl_export \
  232. __isl_give isl_multi_##BASE *isl_multi_##BASE##_bind_domain( \
  233. __isl_take isl_multi_##BASE *multi, \
  234. __isl_take isl_multi_id *tuple); \
  235. __isl_export \
  236. __isl_give isl_multi_##BASE * \
  237. isl_multi_##BASE##_bind_domain_wrapped_domain( \
  238. __isl_take isl_multi_##BASE *multi, \
  239. __isl_take isl_multi_id *tuple);
  240. #define ISL_DECLARE_MULTI_UNBIND_PARAMS(BASE) \
  241. __isl_export \
  242. __isl_give isl_multi_##BASE * \
  243. isl_multi_##BASE##_unbind_params_insert_domain( \
  244. __isl_take isl_multi_##BASE *multi, \
  245. __isl_take isl_multi_id *domain);
  246. #define ISL_DECLARE_MULTI_PARAM(BASE) \
  247. __isl_overload \
  248. isl_bool isl_multi_##BASE##_involves_param_id( \
  249. __isl_keep isl_multi_##BASE *multi, __isl_keep isl_id *id); \
  250. __isl_overload \
  251. isl_bool isl_multi_##BASE##_involves_param_id_list( \
  252. __isl_keep isl_multi_##BASE *multi, \
  253. __isl_keep isl_id_list *list);
  254. #if defined(__cplusplus)
  255. }
  256. #endif
  257. #endif