*_list_free: return NULL
[platform/upstream/isl.git] / include / isl / list.h
index caef4c9..765d016 100644 (file)
 #define ISL_LIST_H
 
 #include <isl/ctx.h>
+#include <isl/printer.h>
 
 #if defined(__cplusplus)
 extern "C" {
 #endif
 
-struct isl_basic_set;
-
-struct isl_basic_set_list {
-       int ref;
-       struct isl_ctx *ctx;
-
-       int n;
-
-       size_t size;
-       struct isl_basic_set *p[1];
-};
-
-struct isl_basic_set_list *isl_basic_set_list_alloc(struct isl_ctx *ctx, int n);
-void isl_basic_set_list_free(struct isl_basic_set_list *list);
-struct isl_basic_set_list *isl_basic_set_list_add(
-       struct isl_basic_set_list *list,
-       struct isl_basic_set *bset);
+#define ISL_DECLARE_LIST(EL)                                           \
+struct isl_##EL;                                                       \
+struct isl_##EL##_list;                                                        \
+typedef struct isl_##EL##_list isl_##EL##_list;                                \
+isl_ctx *isl_##EL##_list_get_ctx(__isl_keep isl_##EL##_list *list);    \
+__isl_give isl_##EL##_list *isl_##EL##_list_alloc(isl_ctx *ctx, int n);        \
+__isl_give isl_##EL##_list *isl_##EL##_list_copy(                      \
+       __isl_keep isl_##EL##_list *list);                              \
+void *isl_##EL##_list_free(__isl_take isl_##EL##_list *list);          \
+__isl_give isl_##EL##_list *isl_##EL##_list_add(                       \
+       __isl_take isl_##EL##_list *list,                               \
+       __isl_take struct isl_##EL *el);                                \
+int isl_##EL##_list_n_##EL(__isl_keep isl_##EL##_list *list);          \
+__isl_give struct isl_##EL *isl_##EL##_list_get_##EL(                  \
+       __isl_keep isl_##EL##_list *list, int index);                   \
+int isl_##EL##_list_foreach(__isl_keep isl_##EL##_list *list,          \
+       int (*fn)(__isl_take struct isl_##EL *el, void *user),          \
+       void *user);                                                    \
+__isl_give isl_printer *isl_printer_print_##EL##_list(                 \
+       __isl_take isl_printer *p, __isl_keep isl_##EL##_list *list);   \
+void isl_##EL##_list_dump(__isl_keep isl_##EL##_list *list);
+
+ISL_DECLARE_LIST(basic_set)
+ISL_DECLARE_LIST(set)
+ISL_DECLARE_LIST(aff)
+ISL_DECLARE_LIST(band)
 
 #if defined(__cplusplus)
 }