[PPL-devel] [GIT] ppl/ppl(floating_point): Various changes.
Fabio Bossi
bossi at cs.unipr.it
Tue Jul 27 12:53:35 CEST 2010
Module: ppl/ppl
Branch: floating_point
Commit: 0ec45a70db9cc1e9829e04477ea0f3b2cc7c701d
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=0ec45a70db9cc1e9829e04477ea0f3b2cc7c701d
Author: Fabio Bossi <bossi at cs.unipr.it>
Date: Tue Jul 27 12:53:04 2010 +0200
Various changes.
---
tests/Concrete_Expression/C_Expr.defs.hh | 40 +++++++++++++++++++--------
tests/Concrete_Expression/C_Expr.inlines.hh | 17 +++++++++---
2 files changed, 41 insertions(+), 16 deletions(-)
diff --git a/tests/Concrete_Expression/C_Expr.defs.hh b/tests/Concrete_Expression/C_Expr.defs.hh
index 039d97f..1e2336e 100644
--- a/tests/Concrete_Expression/C_Expr.defs.hh
+++ b/tests/Concrete_Expression/C_Expr.defs.hh
@@ -29,21 +29,36 @@ namespace Parma_Polyhedra_Library {
struct C_Expr;
+enum C_Expr_Kind {
+ BOP,
+ UOP,
+ CAST,
+ INT_CON,
+ FP_CON,
+ APPROX_REF
+};
+
template <>
class Concrete_Expression<C_Expr> : public Concrete_Expression_Base<C_Expr> {
public:
+ //! Builds a concrete expression of the given kind.
+ Concrete_Expression<C_Expr>(C_Expr_Kind KIND);
+
//! Returns the type of \* this.
Concrete_Expression_Type type() const;
//! Returns the kind of \* this.
virtual Concrete_Expression_Kind kind() const = 0;
+private:
+ //! The expression's kind.
+ C_Expr_Kind expr_kind;
};
template <>
class Binary_Operator<C_Expr> : public Binary_Operator_Base<C_Expr> {
public:
//! Constructor from operator, lhs and rhs.
- Binary_Operator<C_Expr>(int binary_operator,
+ Binary_Operator<C_Expr>(Concrete_Expression_BOP binary_operator,
const Concrete_Expression<C_Expr>* left_hand_side,
const Concrete_Expression<C_Expr>* right_hand_side);
@@ -67,7 +82,7 @@ public:
//! Constant identifying binary operator nodes.
enum {
- KIND = 1
+ KIND = BOP
};
//! Constants encoding the different binary operators.
@@ -86,7 +101,7 @@ public:
private:
//! The operator of \p *this.
- const int bop;
+ const Concrete_Expression_BOP bop;
//! The left-hand side of \p *this.
const Concrete_Expression<C_Expr>* lhs;
@@ -99,7 +114,7 @@ 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,
+ Unary_Operator<C_Expr>(Concrete_Expression_UOP unary_operator,
const Concrete_Expression<C_Expr>* argument);
//! Do-nothing destructor.
@@ -119,7 +134,7 @@ public:
//! Constant identifying unary operator nodes.
enum {
- KIND = 2
+ KIND = UOP
};
//! Constants encoding the different unary operators.
@@ -131,7 +146,7 @@ public:
private:
//! The operator of \p *this.
- const int uop;
+ const Concrete_Expression_UOP uop;
//! The argument of \p *this.
const Concrete_Expression<C_Expr>* arg;
@@ -158,7 +173,7 @@ public:
const Concrete_Expression<C_Expr>* argument() const;
//! Constant identifying cast nodes.
- enum { KIND = 3 };
+ enum { KIND = CAST };
private:
//! The type of the cast expression.
@@ -182,7 +197,7 @@ public:
Concrete_Expression_Kind kind() const;
//! Constant identifying integer constant nodes.
- enum { KIND = 4 };
+ enum { KIND = INT_CON };
};
template <>
@@ -190,7 +205,8 @@ class Floating_Point_Constant<C_Expr>
: public Floating_Point_Constant_Base<C_Expr> {
public:
//! Constructor from value.
- Floating_Point_Constant<C_Expr>(const char* value_string);
+ Floating_Point_Constant<C_Expr>(const char* value_string,
+ unsigned int string_size);
//! Do-nothing destructor.
~Floating_Point_Constant<C_Expr>();
@@ -208,11 +224,11 @@ public:
const char* get_value_as_string() const;
//! Constant identifying floating constant nodes.
- enum { KIND = 5 };
+ enum { KIND = FP_CON };
private:
//! The floating point constant as written.
- const char* value;
+ char* value;
};
// We currently only consider references to floating point variables.
@@ -239,7 +255,7 @@ public:
dimension_type associated_dimension() const;
//! Constant identifying approximable reference nodes.
- enum { KIND = 6 };
+ enum { KIND = APPROX_REF };
private:
//! The index of the referenced variable.
diff --git a/tests/Concrete_Expression/C_Expr.inlines.hh b/tests/Concrete_Expression/C_Expr.inlines.hh
index 689fe29..819de51 100644
--- a/tests/Concrete_Expression/C_Expr.inlines.hh
+++ b/tests/Concrete_Expression/C_Expr.inlines.hh
@@ -25,6 +25,12 @@ site: http://www.cs.unipr.it/ppl/ . */
namespace Parma_Polyhedra_Library {
+inline
+Concrete_Expression<C_Expr>::
+Concrete_Expression(const C_Expr_Kind KIND)
+ : expr_kind(KIND) {
+}
+
inline Concrete_Expression_Type
Concrete_Expression<C_Expr>::type() const {
return Concrete_Expression_Type::floating_point(ANALYZED_FP_FORMAT);
@@ -32,7 +38,7 @@ Concrete_Expression<C_Expr>::type() const {
inline
Binary_Operator<C_Expr>
-::Binary_Operator(int binary_operator,
+::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),
@@ -71,7 +77,7 @@ Binary_Operator<C_Expr>::right_hand_side() const {
inline
Unary_Operator<C_Expr>
-::Unary_Operator(int unary_operator,
+::Unary_Operator(Concrete_Expression_UOP unary_operator,
const Concrete_Expression<C_Expr>* argument)
: uop(unary_operator),
arg(argument) {
@@ -139,12 +145,15 @@ Integer_Constant<C_Expr>::kind() const {
inline
Floating_Point_Constant<C_Expr>::
-Floating_Point_Constant(const char* value_string)
- : value(value_string) {
+Floating_Point_Constant(const char* value_string,
+ const unsigned int string_size)
+ : value(new char[string_size]) {
+ strcpy(value, value_string);
}
inline
Floating_Point_Constant<C_Expr>::~Floating_Point_Constant<C_Expr>() {
+ delete[] value;
}
inline Concrete_Expression_Type
More information about the PPL-devel
mailing list