
Module: ppl/ppl Branch: floating_point Commit: e34112b360cf60ef5be4c2464d2a40e1e2f4b553 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e34112b360cf6...
Author: Fabio Bossi bossi@cs.unipr.it Date: Mon Jul 26 15:22:50 2010 +0200
Concrete_Expression: - Added method associated_dimension().
C_Expr: - Small progress in the implementation.
---
src/Concrete_Expression.defs.hh | 6 +++++ tests/Concrete_Expression/C_Expr.defs.hh | 30 ++++++++++++++++++++++++-- tests/Concrete_Expression/C_Expr.inlines.hh | 25 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/src/Concrete_Expression.defs.hh b/src/Concrete_Expression.defs.hh index 0442195..f6777cd 100644 --- a/src/Concrete_Expression.defs.hh +++ b/src/Concrete_Expression.defs.hh @@ -162,6 +162,12 @@ class Floating_Point_Constant_Base : public Concrete_Expression<Target> {
template <typename Target> class Approximable_Reference_Base : public Concrete_Expression<Target> { +public: + /*! \brief + If \p *this is a variable reference, returns the variable's + index. Returns <CODE>not_a_dimension()</CODE> otherwise. + */ + dimension_type associated_dimension() const; };
} // namespace Parma_Polyhedra_Library diff --git a/tests/Concrete_Expression/C_Expr.defs.hh b/tests/Concrete_Expression/C_Expr.defs.hh index 2d7b4c2..41c2053 100644 --- a/tests/Concrete_Expression/C_Expr.defs.hh +++ b/tests/Concrete_Expression/C_Expr.defs.hh @@ -54,10 +54,10 @@ public: Concrete_Expression_Type type() const;
//! Returns the kind of \p *this. - int kind() const; + Concrete_Expression_Kind kind() const;
//! Returns the binary operator of \p *this. - int binary_operator() const; + Concrete_Expression_BOP binary_operator() const;
//! Returns the left-hand side of \p *this. const Concrete_Expression<C_Expr>* left_hand_side() const; @@ -97,6 +97,7 @@ private:
template <> class Unary_Operator<C_Expr> : public Unary_Operator_Base<C_Expr> { +public: //! Constructor from operator and argument. Unary_Operator<C_Expr>(int unary_operator, const Concrete_Expression<C_Expr>* argument); @@ -111,7 +112,7 @@ class Unary_Operator<C_Expr> : public Unary_Operator_Base<C_Expr> { Concrete_Expression_Kind kind() const;
//! Returns the unary operator of \p *this. - int unary_operator() const; + Concrete_Expression_UOP unary_operator() const;
//! Returns the argument of \p *this. const Concrete_Expression<C_Expr>* argument() const; @@ -160,12 +161,35 @@ public: enum { KIND = 5 }; };
+// We currently only consider variable references. template <> class Approximable_Reference<C_Expr> : public Approximable_Reference_Base<C_Expr> { public: + //! Builds a reference to the variable having the given index. + Approximable_Reference<C_Expr>(dimension_type var_index); + + //! Do-nothing destructor. + ~Approximable_Reference<C_Expr>(); + + //! Returns the type of \p *this. + Concrete_Expression_Type type() const; + + //! Returns the kind of \p *this. + Concrete_Expression_Kind kind() const; + + /*! \brief + If \p *this is a variable reference, returns the variable's + index. Returns <CODE>not_a_dimension()</CODE> otherwise. + */ + dimension_type associated_dimension() const; + //! Constant identifying approximable reference nodes. enum { KIND = 6 }; + +private: + //! The index of the referenced variable. + dimension_type var_dimension; };
} // namespace Parma_Polyhedra_Library diff --git a/tests/Concrete_Expression/C_Expr.inlines.hh b/tests/Concrete_Expression/C_Expr.inlines.hh index 41fef95..f92c79f 100644 --- a/tests/Concrete_Expression/C_Expr.inlines.hh +++ b/tests/Concrete_Expression/C_Expr.inlines.hh @@ -39,6 +39,11 @@ inline Binary_Operator<C_Expr>::~Binary_Operator<C_Expr>() { }
+inline Concrete_Expression_Kind +Binary_Operator<C_Expr>::kind() const { + return KIND; +} + inline Concrete_Expression_BOP Binary_Operator<C_Expr>::binary_operator() const { return bop; @@ -66,6 +71,11 @@ inline Unary_Operator<C_Expr>::~Unary_Operator<C_Expr>() { }
+inline Concrete_Expression_Kind +Unary_Operator<C_Expr>::kind() const { + return KIND; +} + inline Concrete_Expression_BOP Unary_Operator<C_Expr>::unary_operator() const { return uop; @@ -76,6 +86,21 @@ Unary_Operator<C_Expr>::argument() const { return arg; }
+inline +Approximable_Reference<C_Expr>:: +Approximable_Reference(dimension_type var_index) +: var_dimension(var_index) { +} + +inline +Approximable_Reference<C_Expr>::~Approximable_Reference<C_Expr>() { +} + +inline Concrete_Expression_Kind +Approximable_Reference<C_Expr>::kind() const { + return KIND; +} + } // namespace Parma_Polyhedra_Library
#endif // !defined(PPL_C_Expr_inlines_hh)