
Module: ppl/ppl Branch: floating_point Commit: 90eaae7fe8a19eccdd7bac2763131a20ecaf616f URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=90eaae7fe8a19...
Author: Abramo Bagnara abramo.bagnara@gmail.com Date: Tue Jul 27 14:07:38 2010 +0200
Improved inheritance relations.
---
src/Concrete_Expression.defs.hh | 14 ++++---- tests/Concrete_Expression/C_Expr.defs.hh | 40 +++++++++---------------- tests/Concrete_Expression/C_Expr.inlines.hh | 42 +++++--------------------- 3 files changed, 29 insertions(+), 67 deletions(-)
diff --git a/src/Concrete_Expression.defs.hh b/src/Concrete_Expression.defs.hh index 217e239..88fbca8 100644 --- a/src/Concrete_Expression.defs.hh +++ b/src/Concrete_Expression.defs.hh @@ -116,7 +116,7 @@ private: };
template <typename Target> -class Concrete_Expression_Base { +class Concrete_Expression_Common { public: //! Returns the type of * this. Concrete_Expression_Type type() const; @@ -126,7 +126,7 @@ public: };
template <typename Target> -class Binary_Operator_Base : public Concrete_Expression<Target> { +class Binary_Operator_Common { public: //! Returns a constant identifying the operator of \p *this. Concrete_Expression_BOP binary_operator() const; @@ -139,7 +139,7 @@ public: };
template <typename Target> -class Unary_Operator_Base : public Concrete_Expression<Target> { +class Unary_Operator_Common { public: //! Returns a constant identifying the operator of \p *this. Concrete_Expression_UOP unary_operator() const; @@ -149,17 +149,17 @@ public: };
template <typename Target> -class Cast_Operator_Base : public Concrete_Expression<Target> { +class Cast_Operator_Common { //! Returns the casted expression. const Concrete_Expression<Target>* argument() const; };
template <typename Target> -class Integer_Constant_Base : public Concrete_Expression<Target> { +class Integer_Constant_Common { };
template <typename Target> -class Floating_Point_Constant_Base : public Concrete_Expression<Target> { +class Floating_Point_Constant_Common { /*! \brief Returns a string for the floating point constant as written in the analyzed program. @@ -168,7 +168,7 @@ class Floating_Point_Constant_Base : public Concrete_Expression<Target> { };
template <typename Target> -class Approximable_Reference_Base : public Concrete_Expression<Target> { +class Approximable_Reference_Common { public: /*! \brief If \p *this is a variable reference, returns the variable's diff --git a/tests/Concrete_Expression/C_Expr.defs.hh b/tests/Concrete_Expression/C_Expr.defs.hh index 1e2336e..96bc1cd 100644 --- a/tests/Concrete_Expression/C_Expr.defs.hh +++ b/tests/Concrete_Expression/C_Expr.defs.hh @@ -39,7 +39,7 @@ enum C_Expr_Kind { };
template <> -class Concrete_Expression<C_Expr> : public Concrete_Expression_Base<C_Expr> { +class Concrete_Expression<C_Expr> : public Concrete_Expression_Common<C_Expr> { public: //! Builds a concrete expression of the given kind. Concrete_Expression<C_Expr>(C_Expr_Kind KIND); @@ -48,14 +48,15 @@ public: Concrete_Expression_Type type() const;
//! Returns the kind of * this. - virtual Concrete_Expression_Kind kind() const = 0; + Concrete_Expression_Kind kind() const; private: //! The expression's kind. C_Expr_Kind expr_kind; };
template <> -class Binary_Operator<C_Expr> : public Binary_Operator_Base<C_Expr> { +class Binary_Operator<C_Expr> : public Concrete_Expression<C_Expr>, + public Binary_Operator_Common<C_Expr> { public: //! Constructor from operator, lhs and rhs. Binary_Operator<C_Expr>(Concrete_Expression_BOP binary_operator, @@ -68,9 +69,6 @@ public: //! Returns the type of \p *this. Concrete_Expression_Type type() const;
- //! Returns the kind of \p *this. - Concrete_Expression_Kind kind() const; - //! Returns the binary operator of \p *this. Concrete_Expression_BOP binary_operator() const;
@@ -111,7 +109,8 @@ private: };
template <> -class Unary_Operator<C_Expr> : public Unary_Operator_Base<C_Expr> { +class Unary_Operator<C_Expr> : public Concrete_Expression<C_Expr>, + public Unary_Operator_Common<C_Expr> { public: //! Constructor from operator and argument. Unary_Operator<C_Expr>(Concrete_Expression_UOP unary_operator, @@ -123,9 +122,6 @@ public: //! Returns the type of \p *this. Concrete_Expression_Type type() const;
- //! Returns the kind of \p *this. - Concrete_Expression_Kind kind() const; - //! Returns the unary operator of \p *this. Concrete_Expression_UOP unary_operator() const;
@@ -154,7 +150,8 @@ private:
template <> class Cast_Operator<C_Expr> - : public Cast_Operator_Base<C_Expr> { + : public Concrete_Expression<C_Expr>, + public Cast_Operator_Common<C_Expr> { public: //! Constructor from cast type and argument. Cast_Operator<C_Expr>(Concrete_Expression_Type c_type, @@ -166,9 +163,6 @@ public: //! Returns the type of \p *this. Concrete_Expression_Type type() const;
- //! Returns the kind of \p *this. - Concrete_Expression_Kind kind() const; - //! Returns the casted expression. const Concrete_Expression<C_Expr>* argument() const;
@@ -185,7 +179,8 @@ private:
template <> class Integer_Constant<C_Expr> - : public Integer_Constant_Base<C_Expr> { + : public Concrete_Expression<C_Expr>, + public Integer_Constant_Common<C_Expr> { public: //! Do-nothing destructor. ~Integer_Constant<C_Expr>(); @@ -193,16 +188,14 @@ public: //! Returns the type of \p *this. Concrete_Expression_Type type() const;
- //! Returns the kind of \p *this. - Concrete_Expression_Kind kind() const; - //! Constant identifying integer constant nodes. enum { KIND = INT_CON }; };
template <> class Floating_Point_Constant<C_Expr> - : public Floating_Point_Constant_Base<C_Expr> { + : public Concrete_Expression<C_Expr>, + public Floating_Point_Constant_Common<C_Expr> { public: //! Constructor from value. Floating_Point_Constant<C_Expr>(const char* value_string, @@ -214,9 +207,6 @@ public: //! Returns the type of \p *this. Concrete_Expression_Type type() const;
- //! Returns the kind of \p *this. - Concrete_Expression_Kind kind() const; - /*! \brief Returns a string for the floating point constant as written in the analyzed program. @@ -234,7 +224,8 @@ private: // We currently only consider references to floating point variables. template <> class Approximable_Reference<C_Expr> - : public Approximable_Reference_Base<C_Expr> { + : public Concrete_Expression<C_Expr>, + public Approximable_Reference_Common<C_Expr> { public: //! Builds a reference to the variable having the given index. Approximable_Reference<C_Expr>(dimension_type var_index); @@ -245,9 +236,6 @@ public: //! 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. diff --git a/tests/Concrete_Expression/C_Expr.inlines.hh b/tests/Concrete_Expression/C_Expr.inlines.hh index 819de51..232d38c 100644 --- a/tests/Concrete_Expression/C_Expr.inlines.hh +++ b/tests/Concrete_Expression/C_Expr.inlines.hh @@ -41,7 +41,8 @@ Binary_Operator<C_Expr> ::Binary_Operator(Concrete_Expression_BOP binary_operator, const Concrete_Expression<C_Expr>* left_hand_side, const Concrete_Expression<C_Expr>* right_hand_side) - : bop(binary_operator), + : Concrete_Expressione<C_Expr>(BOP), + bop(binary_operator), lhs(left_hand_side), rhs(right_hand_side) { } @@ -55,11 +56,6 @@ Binary_Operator<C_Expr>::type() const { return Concrete_Expression_Type::floating_point(ANALYZED_FP_FORMAT); }
-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; @@ -79,7 +75,8 @@ inline Unary_Operator<C_Expr> ::Unary_Operator(Concrete_Expression_UOP unary_operator, const Concrete_Expression<C_Expr>* argument) - : uop(unary_operator), + : Concrete_Expressione<C_Expr>(UOP), + uop(unary_operator), arg(argument) { }
@@ -92,11 +89,6 @@ Unary_Operator<C_Expr>::type() const { return Concrete_Expression_Type::floating_point(ANALYZED_FP_FORMAT); }
-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; @@ -111,7 +103,8 @@ inline Cast_Operator<C_Expr>:: Cast_Operator(Concrete_Expression_Type c_type, const Concrete_Expression<C_Expr>* ar) - : cast_type(c_type), + : Concrete_Expressione<C_Expr>(CAST), + cast_type(c_type), arg(ar) { }
@@ -124,11 +117,6 @@ Cast_Operator<C_Expr>::type() const { return cast_type; }
-inline Concrete_Expression_Kind -Cast_Operator<C_Expr>::kind() const { - return KIND; -} - inline const Concrete_Expression<C_Expr>* Cast_Operator<C_Expr>::argument() const { return arg; @@ -138,16 +126,12 @@ inline Integer_Constant<C_Expr>::~Integer_Constant<C_Expr>() { }
-inline Concrete_Expression_Kind -Integer_Constant<C_Expr>::kind() const { - return KIND; -} - inline Floating_Point_Constant<C_Expr>:: Floating_Point_Constant(const char* value_string, const unsigned int string_size) - : value(new char[string_size]) { + : Concrete_Expressione<C_Expr>(FP_CON), + value(new char[string_size]) { strcpy(value, value_string); }
@@ -161,11 +145,6 @@ Floating_Point_Constant<C_Expr>::type() const { return Concrete_Expression_Type::floating_point(ANALYZED_FP_FORMAT); }
-inline Concrete_Expression_Kind -Floating_Point_Constant<C_Expr>::kind() const { - return KIND; -} - inline const char* Floating_Point_Constant<C_Expr>::get_value_as_string() const { return value; @@ -186,11 +165,6 @@ Approximable_Reference<C_Expr>::type() const { return Concrete_Expression_Type::floating_point(ANALYZED_FP_FORMAT); }
-inline Concrete_Expression_Kind -Approximable_Reference<C_Expr>::kind() const { - return KIND; -} - inline dimension_type Approximable_Reference<C_Expr>::associated_dimension() const { return var_dimension;