File indexing completed on 2026-05-10 08:48:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef ISL_LIST_H
0011 #define ISL_LIST_H
0012
0013 #include <isl/ctx.h>
0014 #include <isl/printer_type.h>
0015
0016 #if defined(__cplusplus)
0017 extern "C" {
0018 #endif
0019
0020 #define ISL_DECLARE_LIST_TYPE2(EL,EXPORT) \
0021 struct isl_##EL; \
0022 struct EXPORT isl_##EL##_list; \
0023 typedef struct isl_##EL##_list isl_##EL##_list;
0024 #define ISL_DECLARE_LIST_TYPE(EL) \
0025 ISL_DECLARE_LIST_TYPE2(EL,)
0026 #define ISL_DECLARE_EXPORTED_LIST_TYPE(EL) \
0027 ISL_DECLARE_LIST_TYPE2(EL,__isl_export)
0028 #define ISL_DECLARE_LIST_FN3(EL,CONSTRUCTOR,EXPORT) \
0029 isl_ctx *isl_##EL##_list_get_ctx(__isl_keep isl_##EL##_list *list); \
0030 EXPORT \
0031 __isl_give isl_##EL##_list *isl_##EL##_to_list(__isl_take isl_##EL *el);\
0032 CONSTRUCTOR \
0033 __isl_give isl_##EL##_list *isl_##EL##_list_from_##EL( \
0034 __isl_take isl_##EL *el); \
0035 CONSTRUCTOR \
0036 __isl_give isl_##EL##_list *isl_##EL##_list_alloc(isl_ctx *ctx, int n); \
0037 __isl_give isl_##EL##_list *isl_##EL##_list_copy( \
0038 __isl_keep isl_##EL##_list *list); \
0039 __isl_null isl_##EL##_list *isl_##EL##_list_free( \
0040 __isl_take isl_##EL##_list *list); \
0041 EXPORT \
0042 __isl_give isl_##EL##_list *isl_##EL##_list_add( \
0043 __isl_take isl_##EL##_list *list, \
0044 __isl_take isl_##EL *el); \
0045 EXPORT \
0046 __isl_give isl_##EL##_list *isl_##EL##_list_insert( \
0047 __isl_take isl_##EL##_list *list, unsigned pos, \
0048 __isl_take isl_##EL *el); \
0049 EXPORT \
0050 __isl_give isl_##EL##_list *isl_##EL##_list_drop( \
0051 __isl_take isl_##EL##_list *list, unsigned first, unsigned n); \
0052 EXPORT \
0053 __isl_give isl_##EL##_list *isl_##EL##_list_clear( \
0054 __isl_take isl_##EL##_list *list); \
0055 __isl_give isl_##EL##_list *isl_##EL##_list_swap( \
0056 __isl_take isl_##EL##_list *list, unsigned pos1, \
0057 unsigned pos2); \
0058 __isl_give isl_##EL##_list *isl_##EL##_list_reverse( \
0059 __isl_take isl_##EL##_list *list); \
0060 EXPORT \
0061 __isl_give isl_##EL##_list *isl_##EL##_list_concat( \
0062 __isl_take isl_##EL##_list *list1, \
0063 __isl_take isl_##EL##_list *list2); \
0064 EXPORT \
0065 isl_size isl_##EL##_list_size(__isl_keep isl_##EL##_list *list); \
0066 isl_size isl_##EL##_list_n_##EL(__isl_keep isl_##EL##_list *list); \
0067 EXPORT \
0068 __isl_give isl_##EL *isl_##EL##_list_get_at( \
0069 __isl_keep isl_##EL##_list *list, int index); \
0070 __isl_give struct isl_##EL *isl_##EL##_list_get_##EL( \
0071 __isl_keep isl_##EL##_list *list, int index); \
0072 EXPORT \
0073 __isl_give isl_##EL##_list *isl_##EL##_list_set_at( \
0074 __isl_take isl_##EL##_list *list, int index, \
0075 __isl_take isl_##EL *el); \
0076 __isl_give struct isl_##EL##_list *isl_##EL##_list_set_##EL( \
0077 __isl_take struct isl_##EL##_list *list, int index, \
0078 __isl_take struct isl_##EL *el); \
0079 EXPORT \
0080 isl_stat isl_##EL##_list_foreach(__isl_keep isl_##EL##_list *list, \
0081 isl_stat (*fn)(__isl_take isl_##EL *el, void *user), \
0082 void *user); \
0083 isl_bool isl_##EL##_list_every(__isl_keep isl_##EL##_list *list, \
0084 isl_bool (*test)(__isl_keep isl_##EL *el, void *user), \
0085 void *user); \
0086 __isl_give isl_##EL##_list *isl_##EL##_list_map( \
0087 __isl_take isl_##EL##_list *list, \
0088 __isl_give isl_##EL * (*fn)(__isl_take isl_##EL *el, \
0089 void *user), \
0090 void *user); \
0091 __isl_give isl_##EL##_list *isl_##EL##_list_sort( \
0092 __isl_take isl_##EL##_list *list, \
0093 int (*cmp)(__isl_keep struct isl_##EL *a, \
0094 __isl_keep struct isl_##EL *b, \
0095 void *user), void *user); \
0096 EXPORT \
0097 isl_stat isl_##EL##_list_foreach_scc(__isl_keep isl_##EL##_list *list, \
0098 isl_bool (*follows)(__isl_keep isl_##EL *a, \
0099 __isl_keep isl_##EL *b, void *user), \
0100 void *follows_user, \
0101 isl_stat (*fn)(__isl_take isl_##EL##_list *scc, void *user), \
0102 void *fn_user); \
0103 __isl_give char *isl_##EL##_list_to_str( \
0104 __isl_keep isl_##EL##_list *list); \
0105 __isl_give isl_printer *isl_printer_print_##EL##_list( \
0106 __isl_take isl_printer *p, __isl_keep isl_##EL##_list *list); \
0107 void isl_##EL##_list_dump(__isl_keep isl_##EL##_list *list);
0108 #define ISL_DECLARE_LIST_FN(EL) \
0109 ISL_DECLARE_LIST_FN3(EL,,)
0110 #define ISL_DECLARE_EXPORTED_LIST_FN(EL) \
0111 ISL_DECLARE_LIST_FN3(EL,__isl_constructor,__isl_export)
0112 #define ISL_DECLARE_LIST_FN_READ2(EL,CONSTRUCTOR) \
0113 CONSTRUCTOR \
0114 __isl_give isl_##EL##_list *isl_##EL##_list_read_from_str( \
0115 isl_ctx *ctx, const char *str);
0116 #define ISL_DECLARE_LIST_FN_READ(EL) \
0117 ISL_DECLARE_LIST_FN_READ2(EL,)
0118 #define ISL_DECLARE_EXPORTED_LIST_FN_READ(EL) \
0119 ISL_DECLARE_LIST_FN_READ2(EL,__isl_constructor)
0120
0121 #define ISL_DECLARE_LIST(EL) \
0122 ISL_DECLARE_LIST_TYPE(EL) \
0123 ISL_DECLARE_LIST_FN(EL)
0124 #define ISL_DECLARE_EXPORTED_LIST(EL) \
0125 ISL_DECLARE_EXPORTED_LIST_TYPE(EL) \
0126 ISL_DECLARE_EXPORTED_LIST_FN(EL)
0127
0128 #if defined(__cplusplus)
0129 }
0130 #endif
0131
0132 #endif