#include <Linear_Expression.defs.hh>


Public Member Functions | |
| Linear_Expression () | |
| Default constructor: returns a copy of Linear_Expression::zero(). | |
| Linear_Expression (const Linear_Expression &e) | |
| Ordinary copy-constructor. | |
| ~Linear_Expression () | |
| Destructor. | |
| Linear_Expression (Coefficient_traits::const_reference n) | |
Builds the linear expression corresponding to the inhomogeneous term n. | |
| Linear_Expression (const Constraint &c) | |
Builds the linear expression corresponding to constraint c. | |
| Linear_Expression (const Generator &g) | |
Builds the linear expression corresponding to generator g (for points and closure points, the divisor is not copied). | |
| Linear_Expression (const Congruence &cg) | |
Builds the linear expression corresponding to congruence cg. | |
| dimension_type | space_dimension () const |
Returns the dimension of the vector space enclosing *this. | |
| Coefficient_traits::const_reference | coefficient (Variable v) const |
Returns the coefficient of v in *this. | |
| Coefficient_traits::const_reference | inhomogeneous_term () const |
Returns the inhomogeneous term of *this. | |
| memory_size_type | total_memory_in_bytes () const |
Returns a lower bound to the total size in bytes of the memory occupied by *this. | |
| memory_size_type | external_memory_in_bytes () const |
Returns the size in bytes of the memory managed by *this. | |
| bool | OK () const |
| Checks if all the invariants are satisfied. | |
| void | swap (Linear_Expression &y) |
Swaps *this with y. | |
Static Public Member Functions | |
| static dimension_type | max_space_dimension () |
| Returns the maximum space dimension a Linear_Expression can handle. | |
| static const Linear_Expression & | zero () |
| Returns the (zero-dimension space) constant 0. | |
Private Member Functions | |
| Linear_Expression (const Linear_Expression &e, dimension_type sz) | |
| Copy-constructor with a specified space dimension. | |
| Linear_Expression (dimension_type sz, bool) | |
| Implementation sizing constructor. | |
Friends | |
| class | Parma_Polyhedra_Library::Scalar_Products |
| class | Parma_Polyhedra_Library::Constraint |
| class | Parma_Polyhedra_Library::Generator |
| class | Parma_Polyhedra_Library::Grid_Generator |
| class | Parma_Polyhedra_Library::Congruence |
| class | Parma_Polyhedra_Library::Polyhedron |
| class | Parma_Polyhedra_Library::Grid |
| class | Parma_Polyhedra_Library::LP_Problem |
| class | Parma_Polyhedra_Library::Constraint_System |
| class | Parma_Polyhedra_Library::Generator_System |
| class | Parma_Polyhedra_Library::Congruence_System |
| class | Parma_Polyhedra_Library::Grid_Generator_System |
| Linear_Expression | operator+ (const Linear_Expression &e1, const Linear_Expression &e2) |
Returns the linear expression e1 + e2. | |
| Linear_Expression | operator+ (Coefficient_traits::const_reference n, const Linear_Expression &e) |
Returns the linear expression n + e. | |
| Linear_Expression | operator+ (const Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression e + n. | |
| Linear_Expression | operator- (const Linear_Expression &e) |
Returns the linear expression - e. | |
| Linear_Expression | operator- (const Linear_Expression &e1, const Linear_Expression &e2) |
Returns the linear expression e1 - e2. | |
| Linear_Expression | operator- (Coefficient_traits::const_reference n, const Linear_Expression &e) |
Returns the linear expression n - e. | |
| Linear_Expression | operator- (const Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression e - n. | |
| Linear_Expression | operator* (Coefficient_traits::const_reference n, const Linear_Expression &e) |
Returns the linear expression n * e. | |
| Linear_Expression | operator* (const Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression e * n. | |
| Linear_Expression & | operator+= (Linear_Expression &e1, const Linear_Expression &e2) |
Returns the linear expression e1 + e2 and assigns it to e1. | |
| Linear_Expression & | operator+= (Linear_Expression &e, Variable v) |
Returns the linear expression e + v and assigns it to e. | |
| Linear_Expression & | operator+= (Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression e + n and assigns it to e. | |
| Linear_Expression & | operator-= (Linear_Expression &e1, const Linear_Expression &e2) |
Returns the linear expression e1 - e2 and assigns it to e1. | |
| Linear_Expression & | operator-= (Linear_Expression &e, Variable v) |
Returns the linear expression e - v and assigns it to e. | |
| Linear_Expression & | operator-= (Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression e - n and assigns it to e. | |
| Linear_Expression & | operator*= (Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the linear expression n * e and assigns it to e. | |
| std::ostream & | operator<< (std::ostream &s, const Linear_Expression &e) |
| Output operator. | |
| Congruence | operator%= (const Linear_Expression &e1, const Linear_Expression &e2) |
Returns the congruence e1 = e2 {1}. | |
| Congruence | operator%= (const Linear_Expression &e, Coefficient_traits::const_reference n) |
Returns the congruence e = n {1}. | |
Related Functions | |
| (Note that these are not member functions.) | |
| Linear_Expression (Variable v) | |
Builds the linear expression corresponding to the variable v. | |
| Linear_Expression | operator+ (Variable v, Variable w) |
Returns the linear expression v + w. | |
| Linear_Expression | operator+ (Variable v, const Linear_Expression &e) |
Returns the linear expression v + e. | |
| Linear_Expression | operator+ (const Linear_Expression &e, Variable v) |
Returns the linear expression e + v. | |
| Linear_Expression | operator+ (const Linear_Expression &e) |
Returns the linear expression e. | |
| Linear_Expression | operator- (Variable v, Variable w) |
Returns the linear expression v - w. | |
| Linear_Expression | operator- (Variable v, const Linear_Expression &e) |
Returns the linear expression v - e. | |
| Linear_Expression | operator- (const Linear_Expression &e, Variable v) |
Returns the linear expression e - v. | |
| void | swap (Parma_Polyhedra_Library::Linear_Expression &x, Parma_Polyhedra_Library::Linear_Expression &y) |
Specializes std::swap. | |
An object of the class Linear_Expression represents the linear expression
where
is the dimension of the vector space, each
is the integer coefficient of the
-th variable
and
is the integer for the inhomogeneous term.
x is defined as x.id()+1, whereas all the objects of the class Coefficient have space dimension zero.
, having space dimension
: Linear_Expression e = 4*x - 2*y - z + 14;
Linear_Expression e1 = 4*x; Linear_Expression e2 = 2*y; Linear_Expression e3 = z; Linear_Expression e = Linear_Expression(14); e += e1 - e2 - e3;
e1, e2 and e3 have space dimension 1, 2 and 3, respectively; also, in the fourth line of code, e is created with space dimension zero and then extended to space dimension 3 in the fifth line. Definition at line 247 of file Linear_Expression.defs.hh.
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | ) | [inline] |
Default constructor: returns a copy of Linear_Expression::zero().
Definition at line 38 of file Linear_Expression.inlines.hh.
Referenced by operator+(), operator-(), and zero().
00039 : Linear_Row(1, Linear_Row::Flags()) { 00040 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | const Linear_Expression & | e | ) | [inline] |
Ordinary copy-constructor.
Definition at line 61 of file Linear_Expression.inlines.hh.
00062 : Linear_Row(e) { 00063 }
| Parma_Polyhedra_Library::Linear_Expression::~Linear_Expression | ( | ) | [inline] |
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | Coefficient_traits::const_reference | n | ) | [inline, explicit] |
Builds the linear expression corresponding to the inhomogeneous term n.
Definition at line 76 of file Linear_Expression.inlines.hh.
00077 : Linear_Row(1, Linear_Row::Flags()) { 00078 (*this)[0] = n; 00079 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | const Constraint & | c | ) | [explicit] |
Builds the linear expression corresponding to constraint c.
Given the constraint
, where
, this builds the linear expression
. If c is an inequality (resp., equality) constraint, then the built linear expression is unique up to a positive (resp., non-zero) factor.
Definition at line 34 of file Linear_Expression.cc.
References Parma_Polyhedra_Library::Row::size().
00035 : Linear_Row(c.space_dimension() + 1, Linear_Row::Flags()) { 00036 Linear_Expression& e = *this; 00037 for (dimension_type i = size(); i-- > 0; ) 00038 e[i] = c[i]; 00039 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | const Generator & | g | ) | [explicit] |
Builds the linear expression corresponding to generator g (for points and closure points, the divisor is not copied).
Given the generator
(where, for lines and rays, we have
), this builds the linear expression
. The inhomogeneous term of the linear expression will always be 0. If g is a ray, point or closure point (resp., a line), then the linear expression is unique up to a positive (resp., non-zero) factor.
Definition at line 41 of file Linear_Expression.cc.
References Parma_Polyhedra_Library::Row::size().
00042 : Linear_Row(g.space_dimension() + 1, Linear_Row::Flags()) { 00043 Linear_Expression& e = *this; 00044 // Do not copy the divisor of `g'. 00045 for (dimension_type i = size(); --i > 0; ) 00046 e[i] = g[i]; 00047 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | const Congruence & | cg | ) | [explicit] |
Builds the linear expression corresponding to congruence cg.
Given the congruence
, this builds the linear expression
.
Definition at line 49 of file Linear_Expression.cc.
References Parma_Polyhedra_Library::Row::size().
00050 : Linear_Row(cg.space_dimension() + 1, Linear_Row::Flags()) { 00051 Linear_Expression& e = *this; 00052 for (dimension_type i = size(); i-- > 0; ) 00053 e[i] = cg[i]; 00054 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | const Linear_Expression & | e, | |
| dimension_type | sz | |||
| ) | [inline, private] |
Copy-constructor with a specified space dimension.
Definition at line 70 of file Linear_Expression.inlines.hh.
00072 : Linear_Row(e, sz, sz) { 00073 }
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | dimension_type | sz, | |
| bool | ||||
| ) | [inline, private] |
Implementation sizing constructor.
The bool parameter is just to avoid problems with the constructor Linear_Expression(Coefficient_traits::const_reference n).
Definition at line 43 of file Linear_Expression.inlines.hh.
00044 : Linear_Row(sz, Linear_Row::Flags()) { 00045 }
| dimension_type Parma_Polyhedra_Library::Linear_Expression::max_space_dimension | ( | ) | [inline, static] |
Returns the maximum space dimension a Linear_Expression can handle.
Reimplemented from Parma_Polyhedra_Library::Linear_Row.
Definition at line 33 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Linear_Row::max_space_dimension().
00033 { 00034 return Linear_Row::max_space_dimension(); 00035 }
| dimension_type Parma_Polyhedra_Library::Linear_Expression::space_dimension | ( | ) | const [inline] |
Returns the dimension of the vector space enclosing *this.
Reimplemented from Parma_Polyhedra_Library::Linear_Row.
Definition at line 82 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Row::size().
Referenced by Parma_Polyhedra_Library::Polyhedron::affine_image(), Parma_Polyhedra_Library::Grid::affine_image(), Parma_Polyhedra_Library::Grid_Generator_System::affine_image(), Parma_Polyhedra_Library::Generator_System::affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::affine_image(), Parma_Polyhedra_Library::Polyhedron::affine_preimage(), Parma_Polyhedra_Library::Grid::affine_preimage(), Parma_Polyhedra_Library::Constraint_System::affine_preimage(), Parma_Polyhedra_Library::Congruence_System::affine_preimage(), Parma_Polyhedra_Library::BD_Shape< T >::affine_preimage(), Parma_Polyhedra_Library::Polyhedron::bounded_affine_image(), Parma_Polyhedra_Library::Polyhedron::bounded_affine_preimage(), Parma_Polyhedra_Library::Polyhedron::bounds(), Parma_Polyhedra_Library::Grid::bounds(), coefficient(), Parma_Polyhedra_Library::LP_Problem::evaluate_objective_function(), Parma_Polyhedra_Library::Polyhedron::generalized_affine_image(), Parma_Polyhedra_Library::Grid::generalized_affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_image(), Parma_Polyhedra_Library::Polyhedron::generalized_affine_preimage(), Parma_Polyhedra_Library::Grid::generalized_affine_preimage(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_preimage(), Parma_Polyhedra_Library::Grid_Generator::line(), Parma_Polyhedra_Library::Polyhedron::max_min(), Parma_Polyhedra_Library::LP_Problem::OK(), Parma_Polyhedra_Library::Grid_Generator::point(), Parma_Polyhedra_Library::LP_Problem::set_objective_function(), Parma_Polyhedra_Library::Polyhedron::throw_dimension_incompatible(), Parma_Polyhedra_Library::Grid::throw_dimension_incompatible(), and Parma_Polyhedra_Library::BD_Shape< T >::throw_dimension_incompatible().
00082 { 00083 return size() - 1; 00084 }
| Coefficient_traits::const_reference Parma_Polyhedra_Library::Linear_Expression::coefficient | ( | Variable | v | ) | const [inline] |
Returns the coefficient of v in *this.
Definition at line 87 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Linear_Row::coefficient(), Parma_Polyhedra_Library::Coefficient_zero(), Parma_Polyhedra_Library::Variable::id(), space_dimension(), and Parma_Polyhedra_Library::Variable::space_dimension().
Referenced by Parma_Polyhedra_Library::Polyhedron::affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::affine_image(), Parma_Polyhedra_Library::Polyhedron::affine_preimage(), Parma_Polyhedra_Library::BD_Shape< T >::affine_preimage(), Parma_Polyhedra_Library::Polyhedron::bounded_affine_image(), Parma_Polyhedra_Library::Polyhedron::bounded_affine_preimage(), Parma_Polyhedra_Library::BD_Shape< T >::deduce_u_minus_v_bounds(), Parma_Polyhedra_Library::BD_Shape< T >::deduce_v_minus_u_bounds(), Parma_Polyhedra_Library::LP_Problem::evaluate_objective_function(), Parma_Polyhedra_Library::Polyhedron::generalized_affine_image(), Parma_Polyhedra_Library::Grid::generalized_affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_image(), Parma_Polyhedra_Library::Polyhedron::generalized_affine_preimage(), Parma_Polyhedra_Library::Grid::generalized_affine_preimage(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_preimage(), and ppl_Linear_Expression_coefficient().
00087 { 00088 if (v.space_dimension() > space_dimension()) 00089 return Coefficient_zero(); 00090 return Linear_Row::coefficient(v.id()); 00091 }
| Coefficient_traits::const_reference Parma_Polyhedra_Library::Linear_Expression::inhomogeneous_term | ( | ) | const [inline] |
Returns the inhomogeneous term of *this.
Reimplemented from Parma_Polyhedra_Library::Linear_Row.
Definition at line 94 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Linear_Row::inhomogeneous_term().
Referenced by Parma_Polyhedra_Library::BD_Shape< T >::affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::affine_preimage(), Parma_Polyhedra_Library::LP_Problem::evaluate_objective_function(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_image(), Parma_Polyhedra_Library::BD_Shape< T >::generalized_affine_preimage(), Parma_Polyhedra_Library::Polyhedron::max_min(), Parma_Polyhedra_Library::Grid::max_min(), and ppl_Linear_Expression_inhomogeneous_term().
00094 { 00095 return Linear_Row::inhomogeneous_term(); 00096 }
| const Linear_Expression & Parma_Polyhedra_Library::Linear_Expression::zero | ( | ) | [inline, static] |
Returns the (zero-dimension space) constant 0.
Definition at line 99 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Coefficient_zero(), and Linear_Expression().
Referenced by Parma_Polyhedra_Library::Constraint::epsilon_leq_one(), Parma_Polyhedra_Library::Constraint::zero_dim_false(), Parma_Polyhedra_Library::Congruence::zero_dim_false(), Parma_Polyhedra_Library::Congruence::zero_dim_integrality(), and Parma_Polyhedra_Library::Constraint::zero_dim_positivity().
00099 { 00100 static Linear_Expression z = Linear_Expression(Coefficient_zero()); 00101 return z; 00102 }
| memory_size_type Parma_Polyhedra_Library::Linear_Expression::total_memory_in_bytes | ( | ) | const [inline] |
Returns a lower bound to the total size in bytes of the memory occupied by *this.
Reimplemented from Parma_Polyhedra_Library::Row.
Definition at line 110 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Checked::total_memory_in_bytes().
00110 { 00111 return Linear_Row::total_memory_in_bytes(); 00112 }
| memory_size_type Parma_Polyhedra_Library::Linear_Expression::external_memory_in_bytes | ( | ) | const [inline] |
Returns the size in bytes of the memory managed by *this.
Reimplemented from Parma_Polyhedra_Library::Row.
Definition at line 105 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Checked::external_memory_in_bytes().
Referenced by Parma_Polyhedra_Library::LP_Problem::external_memory_in_bytes().
00105 { 00106 return Linear_Row::external_memory_in_bytes(); 00107 }
| bool Parma_Polyhedra_Library::Linear_Expression::OK | ( | ) | const |
Checks if all the invariants are satisfied.
Definition at line 239 of file Linear_Expression.cc.
References Parma_Polyhedra_Library::Linear_Row::OK(), and Parma_Polyhedra_Library::Row::size().
00239 { 00240 dimension_type sz = size(); 00241 return Linear_Row::OK(sz, sz); 00242 }
| void Parma_Polyhedra_Library::Linear_Expression::swap | ( | Linear_Expression & | y | ) | [inline] |
Swaps *this with y.
Definition at line 194 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Linear_Row::swap().
Referenced by swap().
00194 { 00195 Linear_Row::swap(y); 00196 }
friend class Parma_Polyhedra_Library::Scalar_Products [friend] |
Definition at line 338 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Constraint [friend] |
Reimplemented from Parma_Polyhedra_Library::Linear_Row.
Definition at line 339 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Generator [friend] |
Reimplemented from Parma_Polyhedra_Library::Linear_Row.
Definition at line 340 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Grid_Generator [friend] |
Definition at line 342 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Congruence [friend] |
Definition at line 343 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Polyhedron [friend] |
Definition at line 345 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Grid [friend] |
Definition at line 346 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::LP_Problem [friend] |
Definition at line 347 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Constraint_System [friend] |
Definition at line 351 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Generator_System [friend] |
Definition at line 355 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Congruence_System [friend] |
Definition at line 359 of file Linear_Expression.defs.hh.
friend class Parma_Polyhedra_Library::Grid_Generator_System [friend] |
Definition at line 363 of file Linear_Expression.defs.hh.
| Parma_Polyhedra_Library::Linear_Expression::Linear_Expression | ( | Variable | v | ) | [related] |
Builds the linear expression corresponding to the variable v.
| std::length_error | Thrown if the space dimension of v exceeds Linear_Expression::max_space_dimension(). |
Definition at line 48 of file Linear_Expression.inlines.hh.
References Parma_Polyhedra_Library::Variable::id().
Referenced by build_linear_expression(), ppl_new_Linear_Expression(), ppl_new_Linear_Expression_from_Constraint(), ppl_new_Linear_Expression_from_Generator(), ppl_new_Linear_Expression_from_Linear_Expression(), and ppl_new_Linear_Expression_with_dimension().
00049 : Linear_Row(v.space_dimension() <= max_space_dimension() 00050 ? v.id() + 2 00051 : (throw std::length_error("PPL::Linear_Expression::" 00052 "Linear_Expression(v):\n" 00053 "v exceeds the maximum allowed " 00054 "space dimension."), 00055 v.id() + 2) 00056 , Linear_Row::Flags()) { 00057 (*this)[v.id() + 1] = 1; 00058 }
| PPL::Linear_Expression operator+ | ( | const Linear_Expression & | e1, | |
| const Linear_Expression & | e2 | |||
| ) | [friend] |
Returns the linear expression e1 + e2.
Definition at line 59 of file Linear_Expression.cc.
00059 { 00060 dimension_type e1_size = e1.size(); 00061 dimension_type e2_size = e2.size(); 00062 dimension_type min_size; 00063 dimension_type max_size; 00064 const Linear_Expression* p_e_max; 00065 if (e1_size > e2_size) { 00066 min_size = e2_size; 00067 max_size = e1_size; 00068 p_e_max = &e1; 00069 } 00070 else { 00071 min_size = e1_size; 00072 max_size = e2_size; 00073 p_e_max = &e2; 00074 } 00075 00076 Linear_Expression r(max_size, false); 00077 dimension_type i = max_size; 00078 while (i > min_size) { 00079 --i; 00080 r[i] = (*p_e_max)[i]; 00081 } 00082 while (i > 0) { 00083 --i; 00084 r[i] = e1[i] + e2[i]; 00085 } 00086 00087 return r; 00088 }
| PPL::Linear_Expression operator+ | ( | Coefficient_traits::const_reference | n, | |
| const Linear_Expression & | e | |||
| ) | [friend] |
Returns the linear expression n + e.
Definition at line 92 of file Linear_Expression.cc.
00093 { 00094 Linear_Expression r(e); 00095 r[0] += n; 00096 return r; 00097 }
| Linear_Expression operator+ | ( | const Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
| PPL::Linear_Expression operator- | ( | const Linear_Expression & | e | ) | [friend] |
Returns the linear expression - e.
Definition at line 101 of file Linear_Expression.cc.
00101 { 00102 Linear_Expression r(e); 00103 for (dimension_type i = e.size(); i-- > 0; ) 00104 neg_assign(r[i]); 00105 return r; 00106 }
| PPL::Linear_Expression operator- | ( | const Linear_Expression & | e1, | |
| const Linear_Expression & | e2 | |||
| ) | [friend] |
Returns the linear expression e1 - e2.
Definition at line 110 of file Linear_Expression.cc.
00110 { 00111 dimension_type e1_size = e1.size(); 00112 dimension_type e2_size = e2.size(); 00113 if (e1_size > e2_size) { 00114 Linear_Expression r(e1_size, false); 00115 dimension_type i = e1_size; 00116 while (i > e2_size) { 00117 --i; 00118 r[i] = e1[i]; 00119 } 00120 while (i > 0) { 00121 --i; 00122 r[i] = e1[i] - e2[i]; 00123 } 00124 return r; 00125 } 00126 else { 00127 Linear_Expression r(e2_size, false); 00128 dimension_type i = e2_size; 00129 while (i > e1_size) { 00130 --i; 00131 r[i] = -e2[i]; 00132 } 00133 while (i > 0) { 00134 --i; 00135 r[i] = e1[i] - e2[i]; 00136 } 00137 return r; 00138 } 00139 }
| PPL::Linear_Expression operator- | ( | Coefficient_traits::const_reference | n, | |
| const Linear_Expression & | e | |||
| ) | [friend] |
Returns the linear expression n - e.
Definition at line 143 of file Linear_Expression.cc.
00144 { 00145 Linear_Expression r(e); 00146 for (dimension_type i = e.size(); i-- > 0; ) 00147 neg_assign(r[i]); 00148 r[0] += n; 00149 00150 return r; 00151 }
| Linear_Expression operator- | ( | const Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
| PPL::Linear_Expression operator* | ( | Coefficient_traits::const_reference | n, | |
| const Linear_Expression & | e | |||
| ) | [friend] |
Returns the linear expression n * e.
Definition at line 155 of file Linear_Expression.cc.
00156 { 00157 Linear_Expression r(e); 00158 for (dimension_type i = e.size(); i-- > 0; ) 00159 r[i] *= n; 00160 return r; 00161 }
| Linear_Expression operator* | ( | const Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
| PPL::Linear_Expression & operator+= | ( | Linear_Expression & | e1, | |
| const Linear_Expression & | e2 | |||
| ) | [friend] |
Returns the linear expression e1 + e2 and assigns it to e1.
Definition at line 165 of file Linear_Expression.cc.
00165 { 00166 dimension_type e1_size = e1.size(); 00167 dimension_type e2_size = e2.size(); 00168 if (e1_size >= e2_size) 00169 for (dimension_type i = e2_size; i-- > 0; ) 00170 e1[i] += e2[i]; 00171 else { 00172 Linear_Expression e(e2); 00173 for (dimension_type i = e1_size; i-- > 0; ) 00174 e[i] += e1[i]; 00175 std::swap(e1, e); 00176 } 00177 return e1; 00178 }
| PPL::Linear_Expression & operator+= | ( | Linear_Expression & | e, | |
| Variable | v | |||
| ) | [friend] |
Returns the linear expression e + v and assigns it to e.
| std::length_error | Thrown if the space dimension of v exceeds Linear_Expression::max_space_dimension(). |
Definition at line 182 of file Linear_Expression.cc.
00182 { 00183 const dimension_type v_space_dim = v.space_dimension(); 00184 if (v_space_dim > Linear_Expression::max_space_dimension()) 00185 throw std::length_error("PPL::operator+=(e, v):\n" 00186 "v exceeds the maximum allowed space dimension."); 00187 const dimension_type e_size = e.size(); 00188 if (e_size <= v_space_dim) { 00189 Linear_Expression new_e(e, v_space_dim+1); 00190 std::swap(e, new_e); 00191 } 00192 ++e[v_space_dim]; 00193 return e; 00194 }
| Linear_Expression & operator+= | ( | Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
Returns the linear expression e + n and assigns it to e.
Definition at line 181 of file Linear_Expression.inlines.hh.
| PPL::Linear_Expression & operator-= | ( | Linear_Expression & | e1, | |
| const Linear_Expression & | e2 | |||
| ) | [friend] |
Returns the linear expression e1 - e2 and assigns it to e1.
Definition at line 198 of file Linear_Expression.cc.
00198 { 00199 dimension_type e1_size = e1.size(); 00200 dimension_type e2_size = e2.size(); 00201 if (e1_size >= e2_size) 00202 for (dimension_type i = e2_size; i-- > 0; ) 00203 e1[i] -= e2[i]; 00204 else { 00205 Linear_Expression e(e1, e2_size); 00206 for (dimension_type i = e2_size; i-- > 0; ) 00207 e[i] -= e2[i]; 00208 std::swap(e1, e); 00209 } 00210 return e1; 00211 }
| PPL::Linear_Expression & operator-= | ( | Linear_Expression & | e, | |
| Variable | v | |||
| ) | [friend] |
Returns the linear expression e - v and assigns it to e.
| std::length_error | Thrown if the space dimension of v exceeds Linear_Expression::max_space_dimension(). |
Definition at line 215 of file Linear_Expression.cc.
00215 { 00216 const dimension_type v_space_dim = v.space_dimension(); 00217 if (v_space_dim > Linear_Expression::max_space_dimension()) 00218 throw std::length_error("PPL::operator-=(e, v):\n" 00219 "v exceeds the maximum allowed space dimension."); 00220 const dimension_type e_size = e.size(); 00221 if (e_size <= v_space_dim) { 00222 Linear_Expression new_e(e, v_space_dim+1); 00223 std::swap(e, new_e); 00224 } 00225 --e[v_space_dim]; 00226 return e; 00227 }
| Linear_Expression & operator-= | ( | Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
Returns the linear expression e - n and assigns it to e.
Definition at line 188 of file Linear_Expression.inlines.hh.
| PPL::Linear_Expression & operator*= | ( | Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
Returns the linear expression n * e and assigns it to e.
Definition at line 231 of file Linear_Expression.cc.
00231 { 00232 dimension_type e_size = e.size(); 00233 for (dimension_type i = e_size; i-- > 0; ) 00234 e[i] *= n; 00235 return e; 00236 }
| std::ostream & operator<< | ( | std::ostream & | s, | |
| const Linear_Expression & | e | |||
| ) | [friend] |
Output operator.
Definition at line 246 of file Linear_Expression.cc.
00246 { 00247 const int num_variables = e.space_dimension(); 00248 bool first = true; 00249 for (int v = 0; v < num_variables; ++v) { 00250 Coefficient ev = e[v+1]; 00251 if (ev != 0) { 00252 if (!first) { 00253 if (ev > 0) 00254 s << " + "; 00255 else { 00256 s << " - "; 00257 neg_assign(ev); 00258 } 00259 } 00260 else 00261 first = false; 00262 if (ev == -1) 00263 s << "-"; 00264 else if (ev != 1) 00265 s << ev << "*"; 00266 s << PPL::Variable(v); 00267 } 00268 } 00269 // Inhomogeneous term. 00270 Coefficient it = e[0]; 00271 if (it != 0) { 00272 if (!first) { 00273 if (it > 0) 00274 s << " + "; 00275 else { 00276 s << " - "; 00277 neg_assign(it); 00278 } 00279 } 00280 else 00281 first = false; 00282 s << it; 00283 } 00284 00285 if (first) 00286 // The null linear expression. 00287 s << Coefficient_zero(); 00288 return s; 00289 }
| PPL::Congruence operator%= | ( | const Linear_Expression & | e1, | |
| const Linear_Expression & | e2 | |||
| ) | [friend] |
Returns the congruence e1 = e2 {1}.
Returns the congruence
.
Definition at line 112 of file Congruence.cc.
00112 { 00113 // Ensure that diff is created with capacity for the modulus. 00114 dimension_type dim, e1_dim, e2_dim; 00115 e1_dim = e1.space_dimension(); 00116 e2_dim = e2.space_dimension(); 00117 if (e1_dim > e2_dim) 00118 dim = e1_dim; 00119 else 00120 dim = e2_dim; 00121 Linear_Expression diff(e1_dim > e2_dim ? e1 : e2, 00122 dim + 2); 00123 diff -= (e1_dim > e2_dim ? e2 : e1); 00124 Congruence cg(diff, 1, false); 00125 return cg; 00126 }
| Congruence operator%= | ( | const Linear_Expression & | e, | |
| Coefficient_traits::const_reference | n | |||
| ) | [friend] |
Returns the congruence e = n {1}.
Returns the congruence
.
Definition at line 79 of file Congruence.inlines.hh.
00080 { 00081 // Ensure that diff has capacity for the modulus. 00082 Linear_Expression diff(e, e.space_dimension() + 2); 00083 diff -= n; 00084 Congruence cg(diff, 1, false); 00085 return cg; 00086 }
| Linear_Expression operator+ | ( | Variable | v, | |
| Variable | w | |||
| ) | [related] |
Returns the linear expression v + w.
Definition at line 128 of file Linear_Expression.inlines.hh.
References Linear_Expression().
00128 { 00129 // FIXME: provide a better implementation. 00130 return Linear_Expression(v) + Linear_Expression(w); 00131 }
| Linear_Expression operator+ | ( | Variable | v, | |
| const Linear_Expression & | e | |||
| ) | [related] |
Returns the linear expression v + e.
Definition at line 135 of file Linear_Expression.inlines.hh.
References Linear_Expression().
00135 { 00136 // FIXME: provide a better implementation. 00137 return e + Linear_Expression(v); 00138 }
| Linear_Expression operator+ | ( | const Linear_Expression & | e, | |
| Variable | v | |||
| ) | [related] |
| Linear_Expression operator+ | ( | const Linear_Expression & | e | ) | [related] |
| Linear_Expression operator- | ( | Variable | v, | |
| Variable | w | |||
| ) | [related] |
Returns the linear expression v - w.
Definition at line 154 of file Linear_Expression.inlines.hh.
References Linear_Expression().
00154 { 00155 // FIXME: provide a better implementation. 00156 return Linear_Expression(v) - Linear_Expression(w); 00157 }
| Linear_Expression operator- | ( | Variable | v, | |
| const Linear_Expression & | e | |||
| ) | [related] |
Returns the linear expression v - e.
Definition at line 161 of file Linear_Expression.inlines.hh.
References Linear_Expression().
00161 { 00162 // FIXME: provide a better implementation. 00163 return Linear_Expression(v) - e; 00164 }
| Linear_Expression operator- | ( | const Linear_Expression & | e, | |
| Variable | v | |||
| ) | [related] |
Returns the linear expression e - v.
Definition at line 168 of file Linear_Expression.inlines.hh.
References Linear_Expression().
00168 { 00169 // FIXME: provide a better implementation. 00170 return e - Linear_Expression(v); 00171 }
| void swap | ( | Parma_Polyhedra_Library::Linear_Expression & | x, | |
| Parma_Polyhedra_Library::Linear_Expression & | y | |||
| ) | [related] |
Specializes std::swap.
Definition at line 205 of file Linear_Expression.inlines.hh.
References swap().
00206 { 00207 x.swap(y); 00208 }
1.5.6