[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