1 /*
2     This file is part of PolyLib.
3 
4     PolyLib is free software: you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation, either version 3 of the License, or
7     (at your option) any later version.
8 
9     PolyLib is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13 
14     You should have received a copy of the GNU General Public License
15     along with PolyLib.  If not, see <http://www.gnu.org/licenses/>.
16 */
17 
18 #ifndef _Lattice_h_
19 #define _Lattice_h_
20 
21 #if defined(__cplusplus)
22 extern "C" {
23 #endif
24 
25 extern void AffineHermite ( Lattice *A, Lattice **H, Matrix **U );
26 extern void AffineSmith ( Lattice *A, Lattice **U, Lattice **V, Lattice
27                           **Diag );
28 extern Lattice *ChangeLatticeDimension ( Lattice *A, int dimension );
29 extern Lattice *EmptyLattice ( int dimension );
30 extern Lattice *ExtractLinearPart ( Lattice *A );
31 extern int FindHermiteBasisofDomain ( Polyhedron *A, Matrix **B );
32 extern Lattice *Homogenise ( Lattice *A, Bool Forward );
33 extern int intcompare ( const void *a, const void *b );
34 extern Bool isEmptyLattice ( Lattice *A );
35 extern Bool isfulldim ( Matrix *m );
36 extern Bool IsLattice ( Matrix *m );
37 extern Bool isLinear ( Lattice *A );
38 extern LatticeUnion *LatticeDifference ( Lattice *A, Lattice *B );
39 extern Lattice *LatticeImage ( Lattice *A, Matrix *M );
40 extern Bool LatticeIncludes ( Lattice *A, Lattice *B );
41 extern Lattice *LatticeIntersection ( Lattice *X, Lattice *Y );
42 extern Lattice *LatticePreimage ( Lattice *L, Matrix *G );
43 extern LatticeUnion *LatticeSimplify ( LatticeUnion *latlist );
44 extern LatticeUnion *LatticeUnion_Alloc ( void );
45 extern void LatticeUnion_Free ( LatticeUnion *Head );
46 extern void PrintLatticeUnion ( FILE *fp, char *format, LatticeUnion
47                                 *Head );
48 extern Bool sameAffinepart ( Lattice *A, Lattice *B );
49 extern Bool sameLattice ( Lattice *A, Lattice *B );
50 extern LatticeUnion *Lattice2LatticeUnion(Lattice *X,Lattice *Y);
51 
52 #if defined(__cplusplus)
53 }
54 #endif
55 
56 #endif /* _Lattice_h_ */
57