# Parma_Polyhedra_Library::Shape_Preserving_Reduction< D1, D2 > Class Template Reference
[C++ Language Interface]

This class provides the reduction method for the Shape_Preserving_Product domain. More...

`#include <ppl.hh>`

List of all members.

## Public Member Functions

| Shape_Preserving_Reduction ()
| Default constructor.
void | product_reduce (D1 &d1, D2 &d2)
| The congruences reduction operator for detect emptiness or any equalities implied by each of the congruences defining one of the components and the bounds of the other component. It is assumed that the components are already constraints reduced.
| ~Shape_Preserving_Reduction ()
| Destructor.

## Detailed Description

### template<typename D1, typename D2>
class Parma_Polyhedra_Library::Shape_Preserving_Reduction< D1, D2 >

This class provides the reduction method for the Shape_Preserving_Product domain.

The reduction classes are used to instantiate the Partially_Reduced_Product domain.

This reduction method includes the congruences reduction. This class uses the minimized constraints defining each of the components. For each of the constraints, it checks the frequency and value for the same linear expression in the other component. If the constraint does not satisfy the implied congruence, the inhomogeneous term is adjusted so that it does. Note that unless the congruences reduction adds equalitites the shapes of the domains are unaltered.

## Member Function Documentation

template<typename D1 , typename D2 >

void Parma_Polyhedra_Library::Shape_Preserving_Reduction< D1, D2 >::product_reduce | ( | D1 & | d1,
|  | D2 & | d2 |
| ) |  |  | `[inline]`

The congruences reduction operator for detect emptiness or any equalities implied by each of the congruences defining one of the components and the bounds of the other component. It is assumed that the components are already constraints reduced.

The minimized congruence system defining the domain element `d1` is used to check if `d2` intersects none, one or more than one of the hyperplanes defined by the congruences: if it intersects none, then product is set empty; if it intersects one, then the equality defining this hyperplane is added to both components; otherwise, the product is unchanged. In each case, the donor domain must provide a congruence system in minimal form.

Parameters:

  | d1 | A pointset domain element;
  | d2 | A pointset domain element;

The documentation for this class was generated from the following file:

- ppl.hh