2 /**-------------------------------------------------------------------**
4 **-------------------------------------------------------------------**
6 **-------------------------------------------------------------------**
7 ** First version: october 28th 2001 **
8 **-------------------------------------------------------------------**/
11 /******************************************************************************
12 * CLooG : the Chunky Loop Generator (experimental) *
13 ******************************************************************************
15 * Copyright (C) 2001-2005 Cedric Bastoul *
17 * This is free software; you can redistribute it and/or modify it under the *
18 * terms of the GNU General Public License as published by the Free Software *
19 * Foundation; either version 2 of the License, or (at your option) any later *
22 * This software is distributed in the hope that it will be useful, but *
23 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
24 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
27 * You should have received a copy of the GNU General Public License along *
28 * with software; if not, write to the Free Software Foundation, Inc., *
29 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
31 * CLooG, the Chunky Loop Generator *
32 * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr *
34 ******************************************************************************/
37 #ifndef CLOOG_DOMAIN_H
38 #define CLOOG_DOMAIN_H
39 #if defined(__cplusplus)
46 #include <cloog/polylib/domain.h>
49 typedef struct cloogdomain CloogDomain
;
54 * CloogDomainList structure:
55 * this structure reprensents a node of a linked list of CloogDomain structures.
57 struct cloogdomainlist
58 { CloogDomain
* domain
; /**< An element of the list. */
59 struct cloogdomainlist
* next
;/**< Pointer to the next element of the list.*/
61 typedef struct cloogdomainlist CloogDomainList
;
64 /******************************************************************************
66 ******************************************************************************/
67 void cloog_domain_print(FILE *, CloogDomain
*) ;
68 void cloog_domain_print_constraints(FILE *, CloogDomain
*,
70 void cloog_domain_free(CloogDomain
*) ;
71 CloogDomain
* cloog_domain_copy(CloogDomain
*) ;
72 CloogDomain
* cloog_domain_convex(CloogDomain
* Pol
) ;
73 CloogDomain
* cloog_domain_simple_convex(CloogDomain
* domain
, int nb_par
);
74 CloogDomain
* cloog_domain_simplify(CloogDomain
*, CloogDomain
*) ;
75 CloogDomain
* cloog_domain_union(CloogDomain
*, CloogDomain
*) ;
76 CloogDomain
* cloog_domain_intersection(CloogDomain
*, CloogDomain
*) ;
77 CloogDomain
* cloog_domain_difference(CloogDomain
*, CloogDomain
*) ;
78 CloogDomain
* cloog_domain_addconstraints(CloogDomain
*, CloogDomain
*) ;
79 void cloog_domain_sort(CloogDomain
**,unsigned,unsigned,unsigned,int *);
80 CloogDomain
* cloog_domain_empty(int) ;
83 /******************************************************************************
84 * Structure display function *
85 ******************************************************************************/
86 void cloog_domain_print_structure(FILE *file
, CloogDomain
*domain
, int level
,
88 void cloog_domain_list_print(FILE *, CloogDomainList
*) ;
91 /******************************************************************************
92 * Memory deallocation function *
93 ******************************************************************************/
94 void cloog_domain_list_free(CloogDomainList
*) ;
97 /*+****************************************************************************
99 ******************************************************************************/
100 CloogDomain
* cloog_domain_read(FILE *) ;
101 CloogDomain
* cloog_domain_union_read(FILE *) ;
102 CloogDomainList
* cloog_domain_list_read(FILE *) ;
105 /******************************************************************************
106 * Processing functions *
107 ******************************************************************************/
108 CloogConstraints
*cloog_domain_constraints(CloogDomain
*);
109 int cloog_domain_isempty(CloogDomain
*) ;
110 CloogDomain
* cloog_domain_universe(unsigned dim
, CloogOptions
*options
);
111 CloogDomain
* cloog_domain_project(CloogDomain
*, int, int) ;
112 CloogDomain
* cloog_domain_extend(CloogDomain
*, int, int) ;
113 int cloog_domain_never_integral(CloogDomain
*) ;
114 void cloog_domain_stride(CloogDomain
*, int, int, cloog_int_t
*, cloog_int_t
*);
115 int cloog_domain_integral_lowerbound(CloogDomain
*, int, cloog_int_t
*);
116 void cloog_domain_lowerbound_update(CloogDomain
*, int, cloog_int_t
);
117 int cloog_domain_lazy_disjoint(CloogDomain
*, CloogDomain
*) ;
118 int cloog_domain_lazy_equal(CloogDomain
*, CloogDomain
*) ;
119 int cloog_domain_lazy_block(CloogDomain
*, CloogDomain
*,
120 CloogDomainList
*, int) ;
121 int cloog_domain_lazy_isscalar(CloogDomain
*, int) ;
122 int cloog_domain_list_lazy_same(CloogDomainList
*) ;
123 void cloog_domain_scalar(CloogDomain
*, int, cloog_int_t
*);
124 CloogDomain
* cloog_domain_cut_first(CloogDomain
*) ;
125 CloogDomain
* cloog_domain_erase_dimension(CloogDomain
*, int) ;
127 int cloog_domain_dimension(CloogDomain
*) ;
128 int cloog_domain_isconvex(CloogDomain
*) ;
129 int cloog_scattering_fully_specified(CloogDomain
*scattering
,
130 CloogDomain
*domain
);
132 #if defined(__cplusplus)
135 #endif /* define _H */