[Pkg-octave-commit] [SCM] octave-symbolic branch, master, updated. a718b53403d9f164f8c2a3df521385a01d28a11b
bensapp
bensapp at 416fae20-06d0-4450-9b69-c6c34d4b5f03
Mon Jan 3 03:40:33 UTC 2011
The following commit has been merged in the master branch:
commit 58dfe4049ccd37d88e9ee5c8b754e1459a454eed
Author: bensapp <bensapp at 416fae20-06d0-4450-9b69-c6c34d4b5f03>
Date: Mon May 20 21:29:15 2002 +0000
Added functions to handle the relational operators for the non-matrix types.
I am not sure it makes sense to allow the use of the relational operators
for symbolic matrices or symbolic variables/regular matrices.
git-svn-id: https://octave.svn.sourceforge.net/svnroot/octave/trunk/octave-forge/main/symbolic@446 416fae20-06d0-4450-9b69-c6c34d4b5f03
diff --git a/op-ex.cc b/op-ex.cc
index 73d811b..6a07fb4 100644
--- a/op-ex.cc
+++ b/op-ex.cc
@@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <octave/ov-re-mat.h>
#include <octave/ov-cx-mat.h>
#include "sym-ops.h"
+#include "ov-relational.h"
#include "ov-vpa.h"
#include "ov-ex.h"
#include "ov-ex-mat.h"
@@ -59,7 +60,7 @@ install_ex_ops()
INSTALL_MATRIX_EX_OPS(matrix, ex);
INSTALL_EX_EX_OPS(scalar, ex);
INSTALL_EX_EX_OPS(complex, ex);
-
+
#if 0
INSTALL_UNOP(op_uminus, octave_ex, uminus); // -x
diff --git a/op-vpa.cc b/op-vpa.cc
index d3e43ef..bb50be7 100644
--- a/op-vpa.cc
+++ b/op-vpa.cc
@@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <octave/ov-re-mat.h>
#include <octave/ov-cx-mat.h>
#include "sym-ops.h"
+#include "ov-relational.h"
#include "ov-vpa.h"
#include "ov-ex.h"
#include "ov-ex-mat.h"
diff --git a/ov-relational.cc b/ov-relational.cc
index 9723424..df7c994 100644
--- a/ov-relational.cc
+++ b/ov-relational.cc
@@ -32,7 +32,7 @@ octave_relational::octave_relational (const octave_ex & lhs,
const octave_ex & rhs,
GiNaC::relational::operators op=GiNaC::relational::equal)
{
- rel = GiNaC::relational(lhs.ex_value (), rhs.ex_value ());
+ rel = GiNaC::relational(lhs.ex_value (), rhs.ex_value (), op);
}
octave_relational::octave_relational (const octave_ex & lhs,
@@ -53,8 +53,8 @@ void
octave_relational::print (std::ostream& os, bool pr_as_read_syntax) const
{
GiNaC::print_context pr(os);
-
- rel.print(pr);
+
+ rel.print(pr);
}
diff --git a/sym-ops.h b/sym-ops.h
index aff41c0..1983c6a 100644
--- a/sym-ops.h
+++ b/sym-ops.h
@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#define sym_ops_h 1
#include <octave/ops.h>
+#include <octave/ov-bool.h>
/* This file defines macros used in the op-X.cc files to define functions
*/
@@ -186,6 +187,31 @@ void install_ex_matrix_ops(void);
} \
}
+#define DEFBINOP_EX_EX_BOOL_OP(name, t1, t2, op) \
+ BINOPDECL (name, a1, a2) \
+ { \
+ try \
+ { \
+ CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
+ GiNaC::ex r1 = octave_ex(v1.t1 ## _value ()).ex_value (); \
+ GiNaC::ex r2 = octave_ex(v2.t2 ## _value ()).ex_value (); \
+ if (GiNaC::is_exactly_a<GiNaC::numeric>(r1) && \
+ GiNaC::is_exactly_a<GiNaC::numeric>(r2)) \
+ { \
+ bool tmp_bool = GiNaC::relational(r1, r2, op); \
+ return octave_value(tmp_bool); \
+ } \
+ return octave_value \
+ (new octave_relational (r1, r2, op)); \
+ } \
+ catch (std::exception &e) \
+ { \
+ error (e.what ()); \
+ return octave_value (); \
+ } \
+ }
+
+
#define DEFINE_MATRIX_EX_OPS(TYPE1, TYPE2) \
DEFBINOP_MATRIX_EX_OP (TYPE1 ## _ ## TYPE2 ## _add, TYPE1, TYPE2, +) \
DEFBINOP_MATRIX_EX_OP (TYPE1 ## _ ## TYPE2 ## _sub, TYPE1, TYPE2, -) \
@@ -215,18 +241,30 @@ INSTALL_BINOP(op_div, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ##
// INSTALL_BINOP(op_pow, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _pow)
#define DEFINE_EX_EX_OPS(TYPE1, TYPE2) \
-DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _add, TYPE1, TYPE2, +) \
-DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _sub, TYPE1, TYPE2, -) \
-DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _mul, TYPE1, TYPE2, *) \
-DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _div, TYPE1, TYPE2, /) \
-DEFBINOP_EX_EX_POW (TYPE1 ## _ ## TYPE2 ## _pow, TYPE1, TYPE2)
+DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _add, TYPE1, TYPE2, +) \
+DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _sub, TYPE1, TYPE2, -) \
+DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _mul, TYPE1, TYPE2, *) \
+DEFBINOP_EX_EX_OP (TYPE1 ## _ ## TYPE2 ## _div, TYPE1, TYPE2, /) \
+DEFBINOP_EX_EX_POW (TYPE1 ## _ ## TYPE2 ## _pow, TYPE1, TYPE2) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _equal, TYPE1, TYPE2, GiNaC::relational::equal) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _not_equal, TYPE1, TYPE2, GiNaC::relational::not_equal) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _less, TYPE1, TYPE2, GiNaC::relational::less) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _less_or_equal, TYPE1, TYPE2, GiNaC::relational::less_or_equal) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _greater, TYPE1, TYPE2, GiNaC::relational::greater) \
+DEFBINOP_EX_EX_BOOL_OP(TYPE1 ## _ ## TYPE2 ## _greater_or_equal, TYPE1, TYPE2, GiNaC::relational::greater_or_equal)
#define INSTALL_EX_EX_OPS(TYPE1, TYPE2) \
INSTALL_BINOP(op_add, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _add) \
INSTALL_BINOP(op_sub, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _sub) \
INSTALL_BINOP(op_mul, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _mul) \
INSTALL_BINOP(op_div, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _div) \
-INSTALL_BINOP(op_pow, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _pow)
+INSTALL_BINOP(op_pow, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _pow) \
+INSTALL_BINOP(op_eq, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _equal) \
+INSTALL_BINOP(op_ne, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _not_equal) \
+INSTALL_BINOP(op_lt, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _less) \
+INSTALL_BINOP(op_le, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _less_or_equal) \
+INSTALL_BINOP(op_gt, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _greater) \
+INSTALL_BINOP(op_ge, octave_ ## TYPE1, octave_ ## TYPE2, TYPE1 ## _ ## TYPE2 ## _greater_or_equal);
#define DEFINE_MATRIX_MATRIX_OPS(TYPE1, TYPE2) \
DEFBINOP_MATRIX_MATRIX_OP (TYPE1 ## _ ## TYPE2 ## _add, TYPE1, TYPE2, add) \
--
octave-symbolic
More information about the Pkg-octave-commit
mailing list