polylib: Zpolyhedron.c File Reference

# Zpolyhedron.c File Reference

`#include <polylib/polylib.h>`
`#include <stdlib.h>`

Go to the source code of this file.

## Classes
struct | forsimplify
## Typedefs
typedef struct forsimplify | ForSimplify
## Functions
static ZPolyhedron * | ZPolyhedronIntersection (ZPolyhedron *, ZPolyhedron *)
static ZPolyhedron * | ZPolyhedron_Copy (ZPolyhedron *A)
static void | ZPolyhedron_Free (ZPolyhedron *Zpol)
static ZPolyhedron * | ZPolyhedronDifference (ZPolyhedron *, ZPolyhedron *)
static ZPolyhedron * | ZPolyhedronImage (ZPolyhedron *, Matrix *)
static ZPolyhedron * | ZPolyhedronPreimage (ZPolyhedron *, Matrix *)
static ZPolyhedron * | AddZPolytoZDomain (ZPolyhedron *A, ZPolyhedron *Head)
static void | ZPolyhedronPrint (FILE *fp, const char *format, ZPolyhedron *A)
Bool | isEmptyZPolyhedron (ZPolyhedron *Zpol)
ZPolyhedron * | ZPolyhedron_Alloc (Lattice *Lat, Polyhedron *Poly)
void | ZDomain_Free (ZPolyhedron *Head)
ZPolyhedron * | ZDomain_Copy (ZPolyhedron *Head)
static ZPolyhedron * | AddZPoly2ZDomain (ZPolyhedron *Zpol, ZPolyhedron *Result)
ZPolyhedron * | EmptyZPolyhedron (int dimension)
Bool | ZDomainIncludes (ZPolyhedron *A, ZPolyhedron *B)
Bool | ZPolyhedronIncludes (ZPolyhedron *A, ZPolyhedron *B)
void | ZDomainPrint (FILE *fp, const char *format, ZPolyhedron *A)
ZPolyhedron * | ZDomainUnion (ZPolyhedron *A, ZPolyhedron *B)
ZPolyhedron * | ZDomainIntersection (ZPolyhedron *A, ZPolyhedron *B)
ZPolyhedron * | ZDomainDifference (ZPolyhedron *A, ZPolyhedron *B)
ZPolyhedron * | ZDomainImage (ZPolyhedron *A, Matrix *Func)
ZPolyhedron * | ZDomainPreimage (ZPolyhedron *A, Matrix *Func)
void | CanonicalForm (ZPolyhedron *Zpol, ZPolyhedron **Result, Matrix **Basis)
ZPolyhedron * | IntegraliseLattice (ZPolyhedron *A)
ZPolyhedron * | ZDomainSimplify (ZPolyhedron *ZDom)
ZPolyhedron * | SplitZpolyhedron (ZPolyhedron *ZPol, Lattice *B)

## Typedef Documentation

typedef struct forsimplify ForSimplify

## Function Documentation

static ZPolyhedron* AddZPoly2ZDomain | ( | ZPolyhedron * | Zpol,
|  | ZPolyhedron * | Result |
| ) |  |  | `[static]`

Definition at line 143 of file Zpolyhedron.c.

References isEmptyZPolyhedron(), ZPolyhedron::next, ZDomain_Free(), and ZPolyhedron_Copy().

Referenced by SplitZpolyhedron(), ZDomainDifference(), and ZPolyhedronDifference().

static ZPolyhedron * AddZPolytoZDomain | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | Head |
| ) |  |  | `[static]`

Definition at line 170 of file Zpolyhedron.c.

References AffineHermite(), CanonicalForm(), Domain_Copy(), Domain_Free(), DomainImage(), DomainUnion(), False, isEmptyZPolyhedron(), ZPolyhedron::Lat, Matrix_Alloc(), Matrix_Free(), Matrix_Product(), MAXNOOFRAYS, matrix::NbColumns, matrix::NbRows, ZPolyhedron::next, polyhedron::next, ZPolyhedron::P, sameLattice(), True, ZDomain_Free(), ZPolyhedron_Alloc(), ZPolyhedron_Free(), and ZPolyhedronIncludes().

Referenced by ZDomainDifference(), ZDomainImage(), ZDomainIntersection(), ZDomainPreimage(), ZDomainUnion(), and ZPolyhedronDifference().

void CanonicalForm | ( | ZPolyhedron * | Zpol,
|  | ZPolyhedron ** | Result,
|  | Matrix ** | Basis |
| ) |  |  |

Definition at line 761 of file Zpolyhedron.c.

References AffineHermite(), ChangeLatticeDimension(), Domain_Free(), DomainImage(), FindHermiteBasisofDomain(), Identity(), isEmptyZPolyhedron(), ZPolyhedron::Lat, Matrix_Alloc(), Matrix_Copy(), Matrix_Free(), Matrix_Inverse(), Matrix_Product(), MAXNOOFRAYS, matrix::NbColumns, matrix::NbRows, matrix::p, ZPolyhedron::P, Polyhedron_Free(), value_assign, value_clear, value_init, ZDomain_Copy(), and ZPolyhedron_Alloc().

Referenced by AddZPolytoZDomain(), and main().

ZPolyhedron* EmptyZPolyhedron | ( | int | dimension | ) |

Definition at line 264 of file Zpolyhedron.c.

References Domain_Free(), Empty_Polyhedron(), EmptyLattice(), Matrix_Free(), and ZPolyhedron_Alloc().

Referenced by IntegraliseLattice(), main(), ZDomainDifference(), ZDomainImage(), ZDomainIntersection(), ZDomainPreimage(), ZDomainSimplify(), ZPolyhedronDifference(), ZPolyhedronIntersection(), and ZPolyhedronPreimage().

ZPolyhedron* IntegraliseLattice | ( | ZPolyhedron * | A | ) |

Definition at line 854 of file Zpolyhedron.c.

References Domain_Free(), DomainImage(), DomainPreimage(), EmptyZPolyhedron(), Identity(), isEmptyLattice(), ZPolyhedron::Lat, LatticeImage(), Matrix_Free(), MAXNOOFRAYS, matrix::NbRows, ZPolyhedron::P, and ZPolyhedron_Alloc().

Referenced by ZPolyhedron_Alloc().

Bool isEmptyZPolyhedron | ( | ZPolyhedron * | Zpol | ) |

Definition at line 40 of file Zpolyhedron.c.

References emptyQ, False, isEmptyLattice(), ZPolyhedron::Lat, ZPolyhedron::P, and True.

Referenced by AddZPoly2ZDomain(), AddZPolytoZDomain(), CanonicalForm(), main(), ZDomainIncludes(), and ZPolyhedronDifference().

ZPolyhedron* SplitZpolyhedron | ( | ZPolyhedron * | ZPol,
|  | Lattice * | B |
| ) |  |  |

Definition at line 971 of file Zpolyhedron.c.

References AddZPoly2ZDomain(), AffineHermite(), isEmptyLattice(), isinHnf(), ZPolyhedron::Lat, Lattice2LatticeUnion(), Matrix_Copy(), Matrix_Free(), matrix::NbColumns, matrix::NbRows, LatticeUnion::next, ZPolyhedron::P, True, ZPolyhedron_Alloc(), and ZPolyhedron_Free().

Referenced by main().

ZPolyhedron* ZDomain_Copy | ( | ZPolyhedron * | Head | ) |

Definition at line 118 of file Zpolyhedron.c.

References ZPolyhedron::next, ZDomain_Copy(), and ZPolyhedron_Copy().

Referenced by CanonicalForm(), ZDomain_Copy(), and ZPolyhedronDifference().

void ZDomain_Free | ( | ZPolyhedron * | Head | ) |

Definition at line 93 of file Zpolyhedron.c.

References ZPolyhedron::next, ZDomain_Free(), and ZPolyhedron_Free().

Referenced by AddZPoly2ZDomain(), AddZPolytoZDomain(), main(), ZDomain_Free(), ZDomainDifference(), and ZDomainIncludes().

ZPolyhedron* ZDomainDifference | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  |

Definition at line 433 of file Zpolyhedron.c.

References AddZPoly2ZDomain(), AddZPolytoZDomain(), EmptyZPolyhedron(), ZPolyhedron::Lat, matrix::NbRows, ZPolyhedron::next, ZDomain_Free(), ZPolyhedron_Copy(), and ZPolyhedronDifference().

Referenced by main(), and ZDomainIncludes().

ZPolyhedron* ZDomainImage | ( | ZPolyhedron * | A,
|  | Matrix * | Func |
| ) |  |  |

Definition at line 486 of file Zpolyhedron.c.

References AddZPolytoZDomain(), EmptyZPolyhedron(), ZPolyhedron::Lat, matrix::NbRows, ZPolyhedron::next, ZPolyhedron_Free(), and ZPolyhedronImage().

Referenced by main().

Bool ZDomainIncludes | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  |

Definition at line 289 of file Zpolyhedron.c.

References False, isEmptyZPolyhedron(), True, ZDomain_Free(), and ZDomainDifference().

ZPolyhedron* ZDomainIntersection | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  |

Definition at line 396 of file Zpolyhedron.c.

References AddZPolytoZDomain(), EmptyZPolyhedron(), ZPolyhedron::Lat, matrix::NbRows, ZPolyhedron::next, ZPolyhedron_Free(), and ZPolyhedronIntersection().

Referenced by main().

ZPolyhedron* ZDomainPreimage | ( | ZPolyhedron * | A,
|  | Matrix * | Func |
| ) |  |  |

Definition at line 514 of file Zpolyhedron.c.

References AddZPolytoZDomain(), EmptyZPolyhedron(), ZPolyhedron::Lat, matrix::NbColumns, matrix::NbRows, ZPolyhedron::next, ZPolyhedron_Free(), and ZPolyhedronPreimage().

Referenced by main().

void ZDomainPrint | ( | FILE * | fp,
|  | const char * | format,
|  | ZPolyhedron * | A |
| ) |  |  |

Definition at line 338 of file Zpolyhedron.c.

References ZPolyhedron::next, ZDomainPrint(), and ZPolyhedronPrint().

Referenced by main(), and ZDomainPrint().

ZPolyhedron* ZDomainSimplify | ( | ZPolyhedron * | ZDom | ) |

Definition at line 887 of file Zpolyhedron.c.

References Domain_Copy(), Domain_Free(), DomainDifference(), DomainImage(), DomainPreimage(), emptyQ, EmptyZPolyhedron(), False, ZPolyhedron::Lat, LatticeSimplify(), LatticeUnion_Free(), forsimplify::LatUni, LatticeUnion::M, Matrix_Copy(), MAXNOOFRAYS, matrix::NbRows, LatticeUnion::next, forsimplify::next, ZPolyhedron::next, ZPolyhedron::P, forsimplify::Pol, True, ZDomainUnion(), ZPolyhedron_Alloc(), ZPolyhedron_Copy(), and ZPolyhedron_Free().

Referenced by main().

ZPolyhedron* ZDomainUnion | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  |

Definition at line 374 of file Zpolyhedron.c.

References AddZPolytoZDomain(), and ZPolyhedron::next.

Referenced by main(), and ZDomainSimplify().

ZPolyhedron* ZPolyhedron_Alloc | ( | Lattice * | Lat,
|  | Polyhedron * | Poly |
| ) |  |  |

Definition at line 55 of file Zpolyhedron.c.

References polyhedron::Dimension, Domain_Copy(), False, IntegraliseLattice(), isEmptyLattice(), isfulldim(), IsLattice(), ZPolyhedron::Lat, Matrix_Copy(), matrix::NbRows, ZPolyhedron::next, ZPolyhedron::P, POL_ENSURE_FACETS, POL_ENSURE_VERTICES, and ZPolyhedron_Free().

Referenced by AddZPolytoZDomain(), CanonicalForm(), EmptyZPolyhedron(), IntegraliseLattice(), main(), SplitZpolyhedron(), ZDomainSimplify(), ZPolyhedron_Copy(), ZPolyhedronDifference(), ZPolyhedronImage(), ZPolyhedronIntersection(), and ZPolyhedronPreimage().

static ZPolyhedron * ZPolyhedron_Copy | ( | ZPolyhedron * | A | ) | `[static]`

Definition at line 131 of file Zpolyhedron.c.

References ZPolyhedron::Lat, ZPolyhedron::P, and ZPolyhedron_Alloc().

Referenced by AddZPoly2ZDomain(), ZDomain_Copy(), ZDomainDifference(), and ZDomainSimplify().

static void ZPolyhedron_Free | ( | ZPolyhedron * | Zpol | ) | `[static]`

Definition at line 105 of file Zpolyhedron.c.

References Domain_Free(), ZPolyhedron::Lat, Matrix_Free(), and ZPolyhedron::P.

Referenced by AddZPolytoZDomain(), SplitZpolyhedron(), ZDomain_Free(), ZDomainImage(), ZDomainIntersection(), ZDomainPreimage(), ZDomainSimplify(), ZPolyhedron_Alloc(), ZPolyhedronDifference(), and ZPolyhedronIntersection().

static ZPolyhedron * ZPolyhedronDifference | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  | `[static]`

Definition at line 592 of file Zpolyhedron.c.

References AddZPoly2ZDomain(), AddZPolytoZDomain(), Domain_Copy(), Domain_Free(), DomainDifference(), DomainImage(), DomainIntersection(), DomainPreimage(), emptyQ, EmptyZPolyhedron(), False, isEmptyZPolyhedron(), ZPolyhedron::Lat, LatticeDifference(), LatticeUnion::M, Matrix_Free(), MAXNOOFRAYS, matrix::NbRows, LatticeUnion::next, ZPolyhedron::P, True, ZDomain_Copy(), ZPolyhedron_Alloc(), and ZPolyhedron_Free().

Referenced by ZDomainDifference().

static ZPolyhedron * ZPolyhedronImage | ( | ZPolyhedron * | ZPol,
|  | Matrix * | Func |
| ) |  |  | `[static]`

Definition at line 669 of file Zpolyhedron.c.

References Domain_Free(), DomainImage(), DomainPreimage(), emptyQ, isEmptyLattice(), ZPolyhedron::Lat, LatticeImage(), Matrix_Free(), MAXNOOFRAYS, matrix::NbColumns, matrix::NbRows, ZPolyhedron::P, forsimplify::Pol, and ZPolyhedron_Alloc().

Referenced by ZDomainImage().

Bool ZPolyhedronIncludes | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  |

Definition at line 306 of file Zpolyhedron.c.

References Domain_Free(), DomainDifference(), DomainImage(), emptyQ, False, ZPolyhedron::Lat, LatticeIncludes(), MAXNOOFRAYS, ZPolyhedron::P, and True.

Referenced by AddZPolytoZDomain(), and main().

static ZPolyhedron * ZPolyhedronIntersection | ( | ZPolyhedron * | A,
|  | ZPolyhedron * | B |
| ) |  |  | `[static]`

Definition at line 547 of file Zpolyhedron.c.

References Domain_Free(), DomainImage(), DomainIntersection(), DomainPreimage(), emptyQ, EmptyZPolyhedron(), isEmptyLattice(), ZPolyhedron::Lat, LatticeIntersection(), Matrix_Free(), MAXNOOFRAYS, matrix::NbRows, ZPolyhedron::P, True, ZPolyhedron_Alloc(), and ZPolyhedron_Free().

Referenced by ZDomainIntersection().

static ZPolyhedron * ZPolyhedronPreimage | ( | ZPolyhedron * | Zpol,
|  | Matrix * | G |
| ) |  |  | `[static]`

Definition at line 719 of file Zpolyhedron.c.

References Domain_Free(), DomainImage(), DomainPreimage(), emptyQ, EmptyZPolyhedron(), isEmptyLattice(), ZPolyhedron::Lat, LatticePreimage(), Matrix_Free(), MAXNOOFRAYS, matrix::NbColumns, matrix::NbRows, ZPolyhedron::P, and ZPolyhedron_Alloc().

Referenced by ZDomainPreimage().

static void ZPolyhedronPrint | ( | FILE * | fp,
|  | const char * | format,
|  | ZPolyhedron * | A |
| ) |  |  | `[static]`

Definition at line 358 of file Zpolyhedron.c.

References ZPolyhedron::Lat, Matrix_Print(), matrix::NbRows, ZPolyhedron::P, and Polyhedron_Print().

Referenced by ZDomainPrint().