From maintainers-request at octave dot org Thu Apr 13 08:13:45 2006 Subject: Re: Beyond 2.9.5 From: "John W. Eaton" To: David dot Bateman at motorola dot com Cc: octave maintainers mailing list Date: Thu, 13 Apr 2006 09:13:31 -0400 --fVTZIq3kVI Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit On 12-Apr-2006, I wrote: | On 4-Apr-2006, David Bateman wrote: | | | For the changes for the octave_value class I'm not sure I see what we | | are winning. | | The change is not absolutely necessary (things work now) but it seems | like a somewhat cleaner way of doing things. Given that the necessary | changes to user-defined types are relatively small, I think I'd like | to go ahead with this change. I checked in a relatively large patch for this change. I'm attaching the changes I needed to adapt Octave Forge. I used some #defines to preserve compatibility with older versions of Octave. Note that the definition of OV_REP_TYPE is meant to be temporary, so when Octave Forge is cleaned for 3.0 it should be replaced by octave_base_value and the definition removed from octave/ov.h. jwe --fVTZIq3kVI Content-Type: text/plain Content-Disposition: inline; filename="of-ov-diffs" Content-Transfer-Encoding: 7bit Index: extra/linear-algebra/ov-re-tri.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/linear-algebra/ov-re-tri.cc,v retrieving revision 1.7 diff -u -r1.7 ov-re-tri.cc --- extra/linear-algebra/ov-re-tri.cc 25 May 2005 03:43:38 -0000 1.7 +++ extra/linear-algebra/ov-re-tri.cc 13 Apr 2006 13:03:51 -0000 at @ -26,28 +26,28 @@ { } -octave_value *octave_tri::clone(void) const +OV_REP_TYPE *octave_tri::clone(void) const { return new octave_tri(*this); } -static octave_value * -tri_numeric_conversion_function(const octave_value& a) +static OV_REP_TYPE * +tri_numeric_conversion_function(const OV_REP_TYPE& a) { CAST_CONV_ARG (const octave_tri &); return new octave_matrix (v.matrix_value()); } -type_conv_fcn +TYPE_CONV_FCN octave_tri::numeric_conversion_function (void) const { return tri_numeric_conversion_function; } -octave_value * octave_tri::try_narrowing_conversion(void) +OV_REP_TYPE * octave_tri::try_narrowing_conversion(void) { - octave_value *retval = octave_matrix::try_narrowing_conversion(); + OV_REP_TYPE *retval = octave_matrix::try_narrowing_conversion(); if ( retval==0){ int nr = matrix.rows (); Index: extra/linear-algebra/ov-re-tri.h =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/linear-algebra/ov-re-tri.h,v retrieving revision 1.4 diff -u -r1.4 ov-re-tri.h --- extra/linear-algebra/ov-re-tri.h 23 Nov 2003 14:21:38 -0000 1.4 +++ extra/linear-algebra/ov-re-tri.h 13 Apr 2006 13:03:51 -0000 at @ -18,6 +18,13 @@ #include #include +#ifdef OV_REP_TYPE +#define TYPE_CONV_FCN OV_REP_TYPE::type_conv_fcn +#else +#define OV_REP_TYPE octave_value +#define TYPE_CONV_FCN type_conv_fcn +#endif + class Octave_map; class octave_value_list; at @ -38,10 +45,10 @@ ~octave_tri(void); octave_tri (const octave_tri& D); - octave_value *clone (void) const; + OV_REP_TYPE *clone (void) const; - type_conv_fcn numeric_conversion_function (void) const; - octave_value * try_narrowing_conversion(void); + TYPE_CONV_FCN numeric_conversion_function (void) const; + OV_REP_TYPE * try_narrowing_conversion(void); inline tri_type tri_value(void) const { return tri;}; void assign (const octave_value_list& idx, const Matrix& rhs); Index: main/comm/ov-galois.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/comm/ov-galois.cc,v retrieving revision 1.13 diff -u -r1.13 ov-galois.cc --- main/comm/ov-galois.cc 9 Nov 2004 23:34:49 -0000 1.13 +++ main/comm/ov-galois.cc 13 Apr 2006 13:03:51 -0000 at @ -27,10 +27,14 @@ #endif #include +#include #include +#include #include "galois.h" #include "ov-galois.h" +extern int Vstruct_levels_to_print; + #ifdef CLASS_HAS_LOAD_SAVE #include #include Index: main/comm/ov-galois.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/comm/ov-galois.h,v retrieving revision 1.7 diff -u -r1.7 ov-galois.h --- main/comm/ov-galois.h 9 Nov 2004 23:34:49 -0000 1.7 +++ main/comm/ov-galois.h 13 Apr 2006 13:03:51 -0000 at @ -61,6 +61,10 @@ #define __GALOIS_INDEX_OF_STR "index_of" #endif +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class octave_value_list; class tree_walker; at @ -82,8 +86,8 @@ ~octave_galois (void) { }; - octave_value *clone (void) const { return new octave_galois (*this); } - octave_value *empty_clone (void) const { return new octave_galois (); } + OV_REP_TYPE *clone (void) const { return new octave_galois (*this); } + OV_REP_TYPE *empty_clone (void) const { return new octave_galois (); } octave_value subsref (const std::string SUBSREF_STRREF type, const LIST& idx); Index: main/fixed/ov-fixed-complex.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-complex.cc,v retrieving revision 1.4 diff -u -r1.4 ov-fixed-complex.cc --- main/fixed/ov-fixed-complex.cc 9 Nov 2004 23:34:49 -0000 1.4 +++ main/fixed/ov-fixed-complex.cc 13 Apr 2006 13:03:51 -0000 at @ -204,10 +204,10 @@ return retval; } -octave_value * +OV_REP_TYPE * octave_fixed_complex::try_narrowing_conversion (void) { - octave_value *retval = 0; + OV_REP_TYPE *retval = 0; if (imag (scalar) == FixedPoint()) retval = new octave_fixed (real (scalar)); Index: main/fixed/ov-fixed-complex.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-complex.h,v retrieving revision 1.5 diff -u -r1.5 ov-fixed-complex.h --- main/fixed/ov-fixed-complex.h 12 Feb 2006 07:15:28 -0000 1.5 +++ main/fixed/ov-fixed-complex.h 13 Apr 2006 13:03:51 -0000 at @ -60,6 +60,10 @@ #include "fixedComplex.h" #include "ov-fixed.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class Octave_map; class octave_value_list; at @ -115,11 +119,11 @@ bool is_true (void) const { return (scalar != FixedPointComplex()); } - octave_value *clone (void) const { return new octave_fixed_complex (*this); } - octave_value *empty_clone (void) const + OV_REP_TYPE *clone (void) const { return new octave_fixed_complex (*this); } + OV_REP_TYPE *empty_clone (void) const { return new octave_fixed_complex (); } - octave_value *try_narrowing_conversion (void); + OV_REP_TYPE *try_narrowing_conversion (void); octave_value do_index_op (const octave_value_list& idx, int resize_ok = 0); Index: main/fixed/ov-fixed-cx-mat.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-cx-mat.cc,v retrieving revision 1.5 diff -u -r1.5 ov-fixed-cx-mat.cc --- main/fixed/ov-fixed-cx-mat.cc 9 Nov 2004 23:34:49 -0000 1.5 +++ main/fixed/ov-fixed-cx-mat.cc 13 Apr 2006 13:03:51 -0000 at @ -318,10 +318,10 @@ return retval; } -octave_value * +OV_REP_TYPE * octave_fixed_complex_matrix::try_narrowing_conversion (void) { - octave_value *retval = 0; + OV_REP_TYPE *retval = 0; int nr = matrix.rows (); int nc = matrix.cols (); Index: main/fixed/ov-fixed-cx-mat.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-cx-mat.h,v retrieving revision 1.4 diff -u -r1.4 ov-fixed-cx-mat.h --- main/fixed/ov-fixed-cx-mat.h 9 Nov 2004 23:34:49 -0000 1.4 +++ main/fixed/ov-fixed-cx-mat.h 13 Apr 2006 13:03:51 -0000 at @ -48,6 +48,10 @@ #include "fixedCColVector.h" #include "fixedCMatrix.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class Octave_map; class octave_value_list; at @ -83,8 +87,8 @@ ~octave_fixed_complex_matrix (void) { } - octave_value *clone (void) const { return new octave_fixed_complex_matrix (*this); } - octave_value *empty_clone (void) const { return new octave_fixed_complex_matrix (); } + OV_REP_TYPE *clone (void) const { return new octave_fixed_complex_matrix (*this); } + OV_REP_TYPE *empty_clone (void) const { return new octave_fixed_complex_matrix (); } octave_value do_index_op (const octave_value_list& idx) { return do_index_op (idx, 0); } at @ -96,7 +100,7 @@ const std::list& idx, const octave_value& rhs); - octave_value *try_narrowing_conversion (void); + OV_REP_TYPE *try_narrowing_conversion (void); bool is_complex_matrix (void) const { return true; } Index: main/fixed/ov-fixed-mat.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-mat.cc,v retrieving revision 1.6 diff -u -r1.6 ov-fixed-mat.cc --- main/fixed/ov-fixed-mat.cc 9 Nov 2004 23:34:49 -0000 1.6 +++ main/fixed/ov-fixed-mat.cc 13 Apr 2006 13:03:52 -0000 at @ -290,10 +290,10 @@ return retval; } -octave_value * +OV_REP_TYPE * octave_fixed_matrix::try_narrowing_conversion (void) { - octave_value *retval = 0; + OV_REP_TYPE *retval = 0; int nr = matrix.rows (); int nc = matrix.cols (); Index: main/fixed/ov-fixed-mat.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed-mat.h,v retrieving revision 1.4 diff -u -r1.4 ov-fixed-mat.h --- main/fixed/ov-fixed-mat.h 9 Nov 2004 23:34:49 -0000 1.4 +++ main/fixed/ov-fixed-mat.h 13 Apr 2006 13:03:52 -0000 at @ -55,6 +55,10 @@ #include "fixedMatrix.h" #include "fixedCMatrix.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class Octave_map; class octave_value_list; at @ -84,8 +88,8 @@ ~octave_fixed_matrix (void) { } - octave_value *clone (void) const { return new octave_fixed_matrix (*this); } - octave_value *empty_clone (void) const { return new octave_fixed_matrix (); } + OV_REP_TYPE *clone (void) const { return new octave_fixed_matrix (*this); } + OV_REP_TYPE *empty_clone (void) const { return new octave_fixed_matrix (); } octave_value do_index_op (const octave_value_list& idx) { return do_index_op (idx, 0); } at @ -97,7 +101,7 @@ const std::list& idx, const octave_value& rhs); - octave_value *try_narrowing_conversion (void); + OV_REP_TYPE *try_narrowing_conversion (void); bool is_real_matrix (void) const { return true; } Index: main/fixed/ov-fixed.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/fixed/ov-fixed.h,v retrieving revision 1.4 diff -u -r1.4 ov-fixed.h --- main/fixed/ov-fixed.h 9 Nov 2004 23:34:49 -0000 1.4 +++ main/fixed/ov-fixed.h 13 Apr 2006 13:03:52 -0000 at @ -56,6 +56,10 @@ #include "fixedComplex.h" #include "fixedCMatrix.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class Octave_map; class octave_value_list; at @ -101,8 +105,8 @@ bool is_real_type (void) const { return true; } - octave_value *clone (void) const { return new octave_fixed (*this); } - octave_value *empty_clone (void) const { return new octave_fixed (); } + OV_REP_TYPE *clone (void) const { return new octave_fixed (*this); } + OV_REP_TYPE *empty_clone (void) const { return new octave_fixed (); } octave_value do_index_op (const octave_value_list& idx, int resize_ok = 0); idx_vector index_vector (void) const Index: main/miscellaneous/Makefile =================================================================== RCS file: /cvsroot/octave/octave-forge/main/miscellaneous/Makefile,v retrieving revision 1.20 diff -u -r1.20 Makefile --- main/miscellaneous/Makefile 29 Mar 2006 13:50:14 -0000 1.20 +++ main/miscellaneous/Makefile 13 Apr 2006 13:03:52 -0000 at @ -5,7 +5,7 @@ endif DISPATCH_LINK=$(patsubst %,%$(OCTLINK), dispatch_help builtin) -TARGETS=mfilename.oct waitbar.oct listen.oct xmlread.oct \ +TARGETS=waitbar.oct listen.oct xmlread.oct \ csvexplode.oct csv2cell.oct csvconcat.oct cell2csv.oct all: $(TARGETS) at @ -14,9 +14,6 @@ -$(RM) $ at $(MKOCTLINK) dispatch.oct $ at -mfilename.oct: mfilename.cc - $(MKOCTFILE) $(MISCDEFS) mfilename.cc - waitbar.oct: waitbar.cc $(MKOCTFILE) $(MISCDEFS) waitbar.cc $(TERM_LIB) Index: main/octcdf/ov-ncatt.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncatt.cc,v retrieving revision 1.3 diff -u -r1.3 ov-ncatt.cc --- main/octcdf/ov-ncatt.cc 9 Jan 2006 21:02:37 -0000 1.3 +++ main/octcdf/ov-ncatt.cc 13 Apr 2006 13:03:52 -0000 at @ -172,7 +172,12 @@ ov_nc_put_att(get_ncid(),get_varid(),get_name(),get_nctype(),rhs); +#ifdef OV_REP_TYPE + count++; + retval = octave_value(this); +#else retval = octave_value(this, count + 1); +#endif return retval; Index: main/octcdf/ov-ncatt.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncatt.h,v retrieving revision 1.3 diff -u -r1.3 ov-ncatt.h --- main/octcdf/ov-ncatt.h 18 Feb 2006 22:06:27 -0000 1.3 +++ main/octcdf/ov-ncatt.h 13 Apr 2006 13:03:52 -0000 at @ -22,6 +22,10 @@ #include "ov-netcdf.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + typedef struct { nc_type nctype; dim_vector dimvec; at @ -43,7 +47,7 @@ octave_ncatt(octave_ncfile* ncvarp, int attnump); octave_ncatt(octave_ncfile* ncvarp, std::string attnamep); - octave_value *clone(void) const { return new octave_ncatt(*this); } + OV_REP_TYPE *clone(void) const { return new octave_ncatt(*this); } octave_value subsasgn(const std::string & type, const LIST < octave_value_list > &idx, Index: main/octcdf/ov-ncdim.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncdim.cc,v retrieving revision 1.3 diff -u -r1.3 ov-ncdim.cc --- main/octcdf/ov-ncdim.cc 9 Jan 2006 21:02:37 -0000 1.3 +++ main/octcdf/ov-ncdim.cc 13 Apr 2006 13:03:52 -0000 at @ -75,7 +75,12 @@ // # endif +// #ifdef OV_REP_TYPE +// // count++; +// // retval = octave_value(this); +// #else // // retval = octave_value(this, count + 1); +// #endif // return retval; Index: main/octcdf/ov-ncdim.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncdim.h,v retrieving revision 1.3 diff -u -r1.3 ov-ncdim.h --- main/octcdf/ov-ncdim.h 18 Feb 2006 22:06:27 -0000 1.3 +++ main/octcdf/ov-ncdim.h 13 Apr 2006 13:03:52 -0000 at @ -22,6 +22,10 @@ #include "ov-netcdf.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + typedef struct { octave_ncfile* ncfile; std::string dimname; at @ -39,7 +43,7 @@ octave_ncdim(octave_ncfile* ncfile, int dimid); - octave_value *clone(void) const { return new octave_ncdim(*this); } + OV_REP_TYPE *clone(void) const { return new octave_ncdim(*this); } // octave_value subsasgn(const std::string & type, // const LIST < octave_value_list > &idx, Index: main/octcdf/ov-ncfile.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncfile.cc,v retrieving revision 1.3 diff -u -r1.3 ov-ncfile.cc --- main/octcdf/ov-ncfile.cc 9 Jan 2006 21:02:37 -0000 1.3 +++ main/octcdf/ov-ncfile.cc 13 Apr 2006 13:03:52 -0000 at @ -284,7 +284,13 @@ read_info(); +#ifdef OV_REP_TYPE + count++; + retval = octave_value(this); +#else retval = octave_value(this, count + 1); +#endif + return retval; Index: main/octcdf/ov-ncfile.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncfile.h,v retrieving revision 1.2 diff -u -r1.2 ov-ncfile.h --- main/octcdf/ov-ncfile.h 9 Jan 2006 21:02:37 -0000 1.2 +++ main/octcdf/ov-ncfile.h 13 Apr 2006 13:03:52 -0000 at @ -23,6 +23,9 @@ #include "ov-netcdf.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif typedef struct { int ncid; at @ -40,7 +43,7 @@ octave_ncfile(string filenamep, string open_mode); - octave_value *clone(void) const { return new octave_ncfile(*this); } + OV_REP_TYPE *clone(void) const { return new octave_ncfile(*this); } // x.v = y x(idx).v = y x{idx}.v = y Index: main/octcdf/ov-ncvar.cc =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncvar.cc,v retrieving revision 1.5 diff -u -r1.5 ov-ncvar.cc --- main/octcdf/ov-ncvar.cc 10 Feb 2006 23:13:33 -0000 1.5 +++ main/octcdf/ov-ncvar.cc 13 Apr 2006 13:03:52 -0000 at @ -232,7 +232,12 @@ // update characteristics read_info(); +#ifdef OV_REP_TYPE + count++; + retval = octave_value(this); +#else retval = octave_value(this, count + 1); +#endif return retval; }; Index: main/octcdf/ov-ncvar.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/octcdf/ov-ncvar.h,v retrieving revision 1.5 diff -u -r1.5 ov-ncvar.h --- main/octcdf/ov-ncvar.h 18 Feb 2006 22:06:27 -0000 1.5 +++ main/octcdf/ov-ncvar.h 13 Apr 2006 13:03:52 -0000 at @ -22,6 +22,10 @@ #include "ov-netcdf.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + typedef struct { std::list dimnames; int dimids[NC_MAX_VAR_DIMS]; at @ -55,7 +59,7 @@ octave_ncvar(nc_type nctypep, std::list dimnamesp):octave_base_value(), ncv(NULL) { } - octave_value *clone(void) const { return new octave_ncvar(*this); } + OV_REP_TYPE *clone(void) const { return new octave_ncvar(*this); } // x.v = y x(idx).v = y x{idx}.v = y Index: main/symbolic/ov-ex-mat.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/symbolic/ov-ex-mat.h,v retrieving revision 1.4 diff -u -r1.4 ov-ex-mat.h --- main/symbolic/ov-ex-mat.h 17 Nov 2003 17:04:40 -0000 1.4 +++ main/symbolic/ov-ex-mat.h 13 Apr 2006 13:03:52 -0000 at @ -23,6 +23,10 @@ #include +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + class octave_matrix; class octave_complex_matrix; at @ -55,7 +59,7 @@ return GiNaC::ex(x); } - octave_value *clone (void) + OV_REP_TYPE *clone (void) { return new octave_ex_matrix (*this); } Index: main/symbolic/ov-ex.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/symbolic/ov-ex.h,v retrieving revision 1.7 diff -u -r1.7 ov-ex.h --- main/symbolic/ov-ex.h 17 Nov 2003 17:04:40 -0000 1.7 +++ main/symbolic/ov-ex.h 13 Apr 2006 13:03:52 -0000 at @ -27,6 +27,9 @@ #include #include "ov-vpa.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif class octave_complex; class octave_scalar; at @ -54,7 +57,7 @@ return x; } - octave_value *clone (void) + OV_REP_TYPE *clone (void) { return new octave_ex (*this); } Index: main/symbolic/ov-relational.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/symbolic/ov-relational.h,v retrieving revision 1.4 diff -u -r1.4 ov-relational.h --- main/symbolic/ov-relational.h 17 Nov 2003 17:04:41 -0000 1.4 +++ main/symbolic/ov-relational.h 13 Apr 2006 13:03:52 -0000 at @ -26,6 +26,10 @@ #include #include "ov-ex.h" +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + // relational values. class at @ -55,7 +59,7 @@ ~octave_relational (void) { } - octave_value *clone (void) { return new octave_relational (*this); } + OV_REP_TYPE *clone (void) { return new octave_relational (*this); } #ifdef HAVE_ND_ARRAYS dim_vector dims (void) const { static dim_vector dv (1, 1); return dv; } Index: main/symbolic/ov-vpa.h =================================================================== RCS file: /cvsroot/octave/octave-forge/main/symbolic/ov-vpa.h,v retrieving revision 1.5 diff -u -r1.5 ov-vpa.h --- main/symbolic/ov-vpa.h 17 Nov 2003 17:04:41 -0000 1.5 +++ main/symbolic/ov-vpa.h 13 Apr 2006 13:03:52 -0000 at @ -25,6 +25,10 @@ #include #include +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + // vpa values. class at @ -40,7 +44,7 @@ ~octave_vpa (void) { } - octave_value *clone (void) { return new octave_vpa (*this); } + OV_REP_TYPE *clone (void) { return new octave_vpa (*this); } #if 0 void *operator new (size_t size); Index: nonfree/gpc/octave-gpc.h =================================================================== RCS file: /cvsroot/octave/octave-forge/nonfree/gpc/octave-gpc.h,v retrieving revision 1.3 diff -u -r1.3 octave-gpc.h --- nonfree/gpc/octave-gpc.h 5 Jan 2004 21:20:01 -0000 1.3 +++ nonfree/gpc/octave-gpc.h 13 Apr 2006 13:03:52 -0000 at @ -29,6 +29,10 @@ #include } +#ifndef OV_REP_TYPE +#define OV_REP_TYPE octave_value +#endif + void octave_gpc_free_polygon (gpc_polygon*); gpc_polygon* get_gpc_pt (octave_value); at @ -62,7 +66,7 @@ ~octave_gpc_polygon (void) { octave_gpc_free_polygon (polygon); } - octave_value* clone (void) { return new octave_gpc_polygon (*this); } + OV_REP_TYPE* clone (void) { return new octave_gpc_polygon (*this); } bool is_defined (void) const { return true; } --fVTZIq3kVI--