From help-octave-request at bevo dot che dot wisc dot edu Fri Oct 29 22:55:07 1999 Subject: Re: Sparse functions for octave From: "John W. Eaton" To: A+A Adler Cc: help-octave at bevo dot che dot wisc dot edu Date: Fri, 29 Oct 1999 22:54:32 -0500 (CDT) On 29-Oct-1999, A+A Adler wrote: | I've downloaded 2.1.19 and have modified my make_sparse to | work with it. I got binary operators to work ( * .* \ == ), | but got errors with unitary operators ( x' -x etc.). | | Then I tried this with the make_int.cc from 2.1.19 and | found the same problem. | | A:> cp /usr/src/octave-2.1.19/examples/make_int.cc . | A:> mkoctfile make_int.cc | A:> octave -q | octave:1> x=make_int(4);y=make_int(5); | installing integer type at type-id = 18 | installing integer type at type-id = 18 | octave:2> x+y | ans = 9 | octave:2> x==y | ans = 0 | octave:4> x' | error: unary operator `'' not implemented for `integer' operands | error: evaluating postfix operator `'' near line 4, column 1 | octave:4> -x | error: unary operator `-' not implemented for `integer' operands | error: evaluating prefix operator `-' near line 4, column 1 | | | I suspect that there is a bug in make_int.cc in 2.1.19 I'd rather say it was just an incomplete example. You can get the other operators if you add the following code: --- make_int.cc~ Wed Oct 20 01:48:03 1999 +++ make_int.cc Fri Oct 29 22:51:17 1999 at @ -140,6 +140,25 @@ octave_print_internal (os, scalar, pr_as_read_syntax); } +#ifdef DEFUNOP_OP +#undef DEFUNOP_OP +#endif + +#define DEFUNOP_OP(name, t, op) \ + UNOPDECL (name, a) \ + { \ + CAST_UNOP_ARG (const octave_ ## t&); \ + return octave_value (new octave_integer (op v.t ## _value ())); \ + } + +DEFUNOP_OP (not, integer, !) +DEFUNOP_OP (uminus, integer, -) +DEFUNOP_OP (transpose, integer, /* no-op */) +DEFUNOP_OP (hermitian, integer, /* no-op */) + +DEFNCUNOP_METHOD (incr, integer, increment) +DEFNCUNOP_METHOD (decr, integer, decrement) + #ifdef DEFBINOP_OP #undef DEFBINOP_OP #endif at @ -244,6 +263,14 @@ cerr << "installing integer type at type-id = " << octave_integer::static_type_id () << "\n"; + + INSTALL_UNOP (not, octave_integer, not); + INSTALL_UNOP (uminus, octave_integer, uminus); + INSTALL_UNOP (transpose, octave_integer, transpose); + INSTALL_UNOP (hermitian, octave_integer, hermitian); + + INSTALL_NCUNOP (incr, octave_integer, incr); + INSTALL_NCUNOP (decr, octave_integer, decr); INSTALL_BINOP (add, octave_integer, octave_integer, add); INSTALL_BINOP (sub, octave_integer, octave_integer, sub); jwe --------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. To ensure that development continues, see www.che.wisc.edu/octave/giftform.html Instructions for unsubscribing: www.che.wisc.edu/octave/archive.html ---------------------------------------------------------------------