annotate libinterp/parse-tree/pt-tm-const.cc @ 31605:e88a07dec498 stable

maint: Use macros to begin/end C++ namespaces. * oct-conf-post-public.in.h: Define two macros (OCTAVE_BEGIN_NAMESPACE, OCTAVE_END_NAMESPACE) that can be used to start/end a namespace. * mk-opts.pl, build-env.h, build-env.in.cc, __betainc__.cc, __contourc__.cc, __dsearchn__.cc, __eigs__.cc, __expint__.cc, __ftp__.cc, __gammainc__.cc, __ichol__.cc, __ilu__.cc, __isprimelarge__.cc, __lin_interpn__.cc, __magick_read__.cc, __pchip_deriv__.cc, __qp__.cc, amd.cc, auto-shlib.cc, auto-shlib.h, balance.cc, base-text-renderer.cc, base-text-renderer.h, besselj.cc, bitfcns.cc, bsxfun.cc, c-file-ptr-stream.cc, c-file-ptr-stream.h, call-stack.cc, call-stack.h, ccolamd.cc, cellfun.cc, chol.cc, colamd.cc, colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, data.cc, data.h, debug.cc, defaults.cc, defaults.h, defun-int.h, defun.cc, det.cc, dirfns.cc, display.cc, display.h, dlmread.cc, dmperm.cc, dot.cc, dynamic-ld.cc, dynamic-ld.h, eig.cc, ellipj.cc, environment.cc, environment.h, error.cc, error.h, errwarn.h, event-manager.cc, event-manager.h, event-queue.cc, event-queue.h, fcn-info.cc, fcn-info.h, fft.cc, fft2.cc, fftn.cc, file-io.cc, filter.cc, find.cc, ft-text-renderer.cc, ft-text-renderer.h, gcd.cc, getgrent.cc, getpwent.cc, getrusage.cc, givens.cc, gl-render.cc, gl-render.h, gl2ps-print.cc, gl2ps-print.h, graphics-toolkit.cc, graphics-toolkit.h, graphics.cc, graphics.in.h, gsvd.cc, gtk-manager.cc, gtk-manager.h, hash.cc, help.cc, help.h, hess.cc, hex2num.cc, hook-fcn.cc, hook-fcn.h, input.cc, input.h, interpreter-private.cc, interpreter-private.h, interpreter.cc, interpreter.h, inv.cc, jsondecode.cc, jsonencode.cc, kron.cc, latex-text-renderer.cc, latex-text-renderer.h, load-path.cc, load-path.h, load-save.cc, load-save.h, lookup.cc, ls-ascii-helper.cc, ls-ascii-helper.h, ls-oct-text.cc, ls-utils.cc, ls-utils.h, lsode.cc, lu.cc, mappers.cc, matrix_type.cc, max.cc, mex-private.h, mex.cc, mgorth.cc, nproc.cc, oct-fstrm.cc, oct-fstrm.h, oct-hdf5-types.cc, oct-hdf5-types.h, oct-hist.cc, oct-hist.h, oct-iostrm.cc, oct-iostrm.h, oct-opengl.h, oct-prcstrm.cc, oct-prcstrm.h, oct-procbuf.cc, oct-procbuf.h, oct-process.cc, oct-process.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h, oct-strstrm.cc, oct-strstrm.h, oct-tex-lexer.in.ll, oct-tex-parser.yy, ordqz.cc, ordschur.cc, pager.cc, pager.h, pinv.cc, pow2.cc, pr-flt-fmt.cc, pr-output.cc, procstream.cc, procstream.h, psi.cc, qr.cc, quad.cc, quadcc.cc, qz.cc, rand.cc, rcond.cc, regexp.cc, schur.cc, settings.cc, settings.h, sighandlers.cc, sighandlers.h, sparse-xdiv.cc, sparse-xdiv.h, sparse-xpow.cc, sparse-xpow.h, sparse.cc, spparms.cc, sqrtm.cc, stack-frame.cc, stack-frame.h, stream-euler.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symbfact.cc, syminfo.cc, syminfo.h, symrcm.cc, symrec.cc, symrec.h, symscope.cc, symscope.h, symtab.cc, symtab.h, syscalls.cc, sysdep.cc, sysdep.h, text-engine.cc, text-engine.h, text-renderer.cc, text-renderer.h, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, url-handle-manager.cc, url-handle-manager.h, urlwrite.cc, utils.cc, utils.h, variables.cc, variables.h, xdiv.cc, xdiv.h, xnorm.cc, xnorm.h, xpow.cc, xpow.h, __delaunayn__.cc, __fltk_uigetfile__.cc, __glpk__.cc, __init_fltk__.cc, __init_gnuplot__.cc, __ode15__.cc, __voronoi__.cc, audiodevinfo.cc, audioread.cc, convhulln.cc, fftw.cc, gzip.cc, mk-build-env-features.sh, mk-builtins.pl, cdef-class.cc, cdef-class.h, cdef-fwd.h, cdef-manager.cc, cdef-manager.h, cdef-method.cc, cdef-method.h, cdef-object.cc, cdef-object.h, cdef-package.cc, cdef-package.h, cdef-property.cc, cdef-property.h, cdef-utils.cc, cdef-utils.h, ov-base.cc, ov-base.h, ov-bool-mat.cc, ov-builtin.h, ov-cell.cc, ov-class.cc, ov-class.h, ov-classdef.cc, ov-classdef.h, ov-complex.cc, ov-fcn-handle.cc, ov-fcn-handle.h, ov-fcn.h, ov-java.cc, ov-java.h, ov-mex-fcn.h, ov-null-mat.cc, ov-oncleanup.cc, ov-struct.cc, ov-typeinfo.cc, ov-typeinfo.h, ov-usr-fcn.cc, ov-usr-fcn.h, ov.cc, ov.h, octave.cc, octave.h, mk-ops.sh, op-b-b.cc, op-b-bm.cc, op-b-sbm.cc, op-bm-b.cc, op-bm-bm.cc, op-bm-sbm.cc, op-cdm-cdm.cc, op-cell.cc, op-chm.cc, op-class.cc, op-cm-cm.cc, op-cm-cs.cc, op-cm-m.cc, op-cm-s.cc, op-cm-scm.cc, op-cm-sm.cc, op-cs-cm.cc, op-cs-cs.cc, op-cs-m.cc, op-cs-s.cc, op-cs-scm.cc, op-cs-sm.cc, op-dm-dm.cc, op-dm-scm.cc, op-dm-sm.cc, op-dm-template.cc, op-dms-template.cc, op-fcdm-fcdm.cc, op-fcm-fcm.cc, op-fcm-fcs.cc, op-fcm-fm.cc, op-fcm-fs.cc, op-fcn.cc, op-fcs-fcm.cc, op-fcs-fcs.cc, op-fcs-fm.cc, op-fcs-fs.cc, op-fdm-fdm.cc, op-fm-fcm.cc, op-fm-fcs.cc, op-fm-fm.cc, op-fm-fs.cc, op-fs-fcm.cc, op-fs-fcs.cc, op-fs-fm.cc, op-fs-fs.cc, op-i16-i16.cc, op-i32-i32.cc, op-i64-i64.cc, op-i8-i8.cc, op-int-concat.cc, op-m-cm.cc, op-m-cs.cc, op-m-m.cc, op-m-s.cc, op-m-scm.cc, op-m-sm.cc, op-mi.cc, op-pm-pm.cc, op-pm-scm.cc, op-pm-sm.cc, op-pm-template.cc, op-range.cc, op-s-cm.cc, op-s-cs.cc, op-s-m.cc, op-s-s.cc, op-s-scm.cc, op-s-sm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-sbm-sbm.cc, op-scm-cm.cc, op-scm-cs.cc, op-scm-m.cc, op-scm-s.cc, op-scm-scm.cc, op-scm-sm.cc, op-sm-cm.cc, op-sm-cs.cc, op-sm-m.cc, op-sm-s.cc, op-sm-scm.cc, op-sm-sm.cc, op-str-m.cc, op-str-s.cc, op-str-str.cc, op-struct.cc, op-ui16-ui16.cc, op-ui32-ui32.cc, op-ui64-ui64.cc, op-ui8-ui8.cc, ops.h, anon-fcn-validator.cc, anon-fcn-validator.h, bp-table.cc, bp-table.h, comment-list.cc, comment-list.h, filepos.h, lex.h, lex.ll, oct-lvalue.cc, oct-lvalue.h, oct-parse.yy, parse.h, profiler.cc, profiler.h, pt-anon-scopes.cc, pt-anon-scopes.h, pt-arg-list.cc, pt-arg-list.h, pt-args-block.cc, pt-args-block.h, pt-array-list.cc, pt-array-list.h, pt-assign.cc, pt-assign.h, pt-binop.cc, pt-binop.h, pt-bp.cc, pt-bp.h, pt-cbinop.cc, pt-cbinop.h, pt-cell.cc, pt-cell.h, pt-check.cc, pt-check.h, pt-classdef.cc, pt-classdef.h, pt-cmd.h, pt-colon.cc, pt-colon.h, pt-const.cc, pt-const.h, pt-decl.cc, pt-decl.h, pt-eval.cc, pt-eval.h, pt-except.cc, pt-except.h, pt-exp.cc, pt-exp.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h, pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc, pt-mat.h, pt-misc.cc, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-spmd.cc, pt-spmd.h, pt-stmt.cc, pt-stmt.h, pt-tm-const.cc, pt-tm-const.h, pt-unop.cc, pt-unop.h, pt-vm-eval.cc, pt-walk.cc, pt-walk.h, pt.cc, pt.h, token.cc, token.h, Range.cc, Range.h, idx-vector.cc, idx-vector.h, range-fwd.h, CollocWt.cc, CollocWt.h, aepbalance.cc, aepbalance.h, chol.cc, chol.h, gepbalance.cc, gepbalance.h, gsvd.cc, gsvd.h, hess.cc, hess.h, lo-mappers.cc, lo-mappers.h, lo-specfun.cc, lo-specfun.h, lu.cc, lu.h, oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h, oct-norm.cc, oct-norm.h, oct-rand.cc, oct-rand.h, oct-spparms.cc, oct-spparms.h, qr.cc, qr.h, qrp.cc, qrp.h, randgamma.cc, randgamma.h, randmtzig.cc, randmtzig.h, randpoisson.cc, randpoisson.h, schur.cc, schur.h, sparse-chol.cc, sparse-chol.h, sparse-lu.cc, sparse-lu.h, sparse-qr.cc, sparse-qr.h, svd.cc, svd.h, child-list.cc, child-list.h, dir-ops.cc, dir-ops.h, file-ops.cc, file-ops.h, file-stat.cc, file-stat.h, lo-sysdep.cc, lo-sysdep.h, lo-sysinfo.cc, lo-sysinfo.h, mach-info.cc, mach-info.h, oct-env.cc, oct-env.h, oct-group.cc, oct-group.h, oct-password.cc, oct-password.h, oct-syscalls.cc, oct-syscalls.h, oct-time.cc, oct-time.h, oct-uname.cc, oct-uname.h, action-container.cc, action-container.h, base-list.h, cmd-edit.cc, cmd-edit.h, cmd-hist.cc, cmd-hist.h, f77-fcn.h, file-info.cc, file-info.h, lo-array-errwarn.cc, lo-array-errwarn.h, lo-hash.cc, lo-hash.h, lo-ieee.h, lo-regexp.cc, lo-regexp.h, lo-utils.cc, lo-utils.h, oct-base64.cc, oct-base64.h, oct-glob.cc, oct-glob.h, oct-inttypes.h, oct-mutex.cc, oct-mutex.h, oct-refcount.h, oct-shlib.cc, oct-shlib.h, oct-sparse.cc, oct-sparse.h, oct-string.h, octave-preserve-stream-state.h, pathsearch.cc, pathsearch.h, quit.cc, quit.h, unwind-prot.cc, unwind-prot.h, url-transfer.cc, url-transfer.h : Use new macros to begin/end C++ namespaces.
author Rik <rik@octave.org>
date Thu, 01 Dec 2022 14:23:45 -0800
parents 08b08b7f05b2
children aac27ad79be6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30390
diff changeset
3 // Copyright (C) 1996-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #if defined (HAVE_CONFIG_H)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 # include "config.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #endif
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include "oct-locbuf.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 #include "quit.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "data.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include "defun.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include "error.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include "errwarn.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 #include "oct-map.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "ovl.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 #include "pt-arg-list.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include "pt-bp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 #include "pt-eval.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 #include "pt-exp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #include "pt-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 #include "pt-tm-const.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 #include "utils.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 #include "ov.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47 #include "variables.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 #include "ov-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 #include "ov-flt-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 #include "ov-re-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 #include "ov-cx-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 OCTAVE_NORETURN static
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 eval_error (const char *msg, const dim_vector& x, const dim_vector& y)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58 error ("%s (%s vs %s)", msg, x.str ().c_str (), y.str ().c_str ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60
31605
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 30723
diff changeset
61 OCTAVE_BEGIN_NAMESPACE(octave)
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 30723
diff changeset
62
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
63 void tm_row_const::cellify (void)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
65 bool elt_changed = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
66
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
67 for (auto& elt : m_values)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
68 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
69 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
70
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
71 if (! elt.iscell ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
72 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
73 elt_changed = true;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
74
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
75 if (elt.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
76 elt = Cell ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
77 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
78 elt = Cell (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
79 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
80 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
81
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
82 if (! elt_changed)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
83 return;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
84
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
85 bool first_elem = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
87 for (const auto& val : m_values)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
88 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
89 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
90
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
91 dim_vector this_elt_dv = val.dims ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
92
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
93 if (! this_elt_dv.zero_by_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
94 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
95 if (first_elem)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
96 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
97 first_elem = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
98 m_dv = this_elt_dv;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
99 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
100 else if (! m_dv.hvcat (this_elt_dv, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
101 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
102 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
103 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
104 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
105
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
106 void tm_row_const::init_element (const octave_value& val, bool& first_elem)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
107 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
108 std::string this_elt_class_name
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
109 = val.isobject () ? "class" : val.class_name ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
110
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
111 m_class_name = get_concat_class (m_class_name, this_elt_class_name);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
117 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 {
23584
7ed6b258db91 maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents: 23583
diff changeset
121 if (val.isstruct ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
122 m_first_elem_is_struct = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 }
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23515
diff changeset
127 else if (val.iscell ())
23515
4d7928872999 Fix concatenation of a struct with an empty cell array (bug #39041)
Mike Miller <mtmiller@octave.org>
parents: 23435
diff changeset
128 first_elem = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
130 m_values.push_back (val);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
132 if (m_all_strings && ! val.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
133 m_all_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
135 if (m_all_sq_strings && ! val.is_sq_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
136 m_all_sq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
138 if (m_all_dq_strings && ! val.is_dq_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
139 m_all_dq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
141 if (! m_some_strings && val.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
142 m_some_strings = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
144 if (m_all_real && ! val.isreal ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
145 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
147 if (m_all_complex && ! (val.iscomplex () || val.isreal ()))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
148 m_all_complex = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
150 if (! m_any_cell && val.iscell ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
151 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
153 if (! m_any_sparse && val.issparse ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
154 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
156 if (! m_any_class && val.isobject ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
157 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 // Special treatment of sparse matrices to avoid out-of-memory error
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
160 m_all_1x1 = m_all_1x1 && ! val.issparse () && val.numel () == 1;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
163 void tm_row_const::init (const tree_argument_list& row, tree_evaluator& tw)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
167 for (auto *elt : row)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170
27371
fcaecdbc8d8a don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
171 octave_value tmp = elt->evaluate (tw);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173 if (tmp.is_undefined ())
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
174 error ("undefined element in matrix list");
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
175
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
176 if (tmp.is_cs_list ())
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
178 octave_value_list tlst = tmp.list_value ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
179
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
180 for (octave_idx_type i = 0; i < tlst.length (); i++)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
181 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
182 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
183
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
184 init_element (tlst(i), first_elem);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
185 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 else
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
188 init_element (tmp, first_elem);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
191 if (m_any_cell && ! m_any_class && ! m_first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
196 for (const auto& val : m_values)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
199
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
204 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
205
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
206 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 first_elem = false;
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
209 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
210 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
211 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 1)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
212 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
217 octave_value tm_const::concat (char string_fill_char) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
219 if (m_tm_rows.empty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
220 return Matrix ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
222 // Try to speed up the common cases.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
223
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
224 std::string result_type = m_class_name;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
226 if (m_any_class)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
227 return class_concat ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
228 else if (result_type == "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
229 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
230 if (m_any_sparse)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
232 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
233 return sparse_array_concat<SparseMatrix> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 else
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
235 return sparse_array_concat<SparseComplexMatrix> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
236 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
237 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
238 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
239 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
240 return array_concat<NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
241 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
242 return array_concat<ComplexNDArray> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
245 else if (result_type == "single")
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
247 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
248 return array_concat<FloatNDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
249 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
250 return array_concat<FloatComplexNDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
251 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
252 else if (result_type == "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
253 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
254 if (! m_all_strings)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
255 warn_implicit_conversion ("Octave:num-to-str",
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
256 "numeric", result_type);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
257 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
258 maybe_warn_string_concat (m_all_dq_strings, m_all_sq_strings);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
260 return char_array_concat (string_fill_char);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
261 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
262 else if (result_type == "logical")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
263 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
264 if (m_any_sparse)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
265 return sparse_array_concat<SparseBoolMatrix> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
266 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
267 return array_concat<boolNDArray> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
269 else if (result_type == "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
270 return array_concat<int8NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
271 else if (result_type == "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
272 return array_concat<int16NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
273 else if (result_type == "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
274 return array_concat<int32NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
275 else if (result_type == "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
276 return array_concat<int64NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
277 else if (result_type == "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
278 return array_concat<uint8NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
279 else if (result_type == "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
280 return array_concat<uint16NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
281 else if (result_type == "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
282 return array_concat<uint32NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
283 else if (result_type == "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
284 return array_concat<uint64NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
285 else if (result_type == "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
286 return array_concat<Cell> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
287 else if (result_type == "struct")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
288 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
289 if (m_all_1x1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
290 return map_concat<octave_scalar_map> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
291 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
292 return map_concat<octave_map> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
293 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
294 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
295 return generic_concat ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
296 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
298 void tm_const::init (const tree_matrix& tm)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
299 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
300 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
301 bool first_elem_is_struct = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
302
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
303 // Just eval and figure out if what we have is complex or all strings.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
304 // We can't check columns until we know that this is a numeric matrix --
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
305 // collections of strings can have elements of different lengths.
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
306
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
307 for (const auto *elt : tm)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
308 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
309 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
310
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
311 tm_row_const row (*elt, m_evaluator);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
312
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
313 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
314 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
315 first_elem_is_struct = row.first_elem_struct_p ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
316
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
317 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
318 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
319
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
320 if (row.empty ())
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
321 continue;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
323 if (m_all_strings && ! row.all_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
324 m_all_strings = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
325
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
326 if (m_all_sq_strings && ! row.all_sq_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
327 m_all_sq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
329 if (m_all_dq_strings && ! row.all_dq_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
330 m_all_dq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
332 if (! m_some_strings && row.some_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
333 m_some_strings = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
335 if (m_all_real && ! row.all_real_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
336 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
338 if (m_all_complex && ! row.all_complex_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
339 m_all_complex = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
341 if (m_all_empty && ! row.all_empty_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
342 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
344 if (! m_any_cell && row.any_cell_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
345 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
347 if (! m_any_sparse && row.any_sparse_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
348 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
350 if (! m_any_class && row.any_class_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
351 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
352
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
353 m_all_1x1 = m_all_1x1 && row.all_1x1_p ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
354
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
355 m_tm_rows.push_back (row);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
356 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
357
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
358 if (m_any_cell && ! m_any_class && ! first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
359 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
360 for (auto& elt : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
361 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
362 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
363
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364 elt.cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
369
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
370 for (const auto& elt : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
371 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
372 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
373
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374 octave_idx_type this_elt_nr = elt.rows ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
375 octave_idx_type this_elt_nc = elt.cols ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
377 std::string this_elt_class_name = elt.class_name ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
378 m_class_name = get_concat_class (m_class_name, this_elt_class_name);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
379
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
380 dim_vector this_elt_dv = elt.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
381
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
382 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
383
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
384 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
385 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
386 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
387
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
388 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
389 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
390 else if (m_all_strings && m_dv.ndims () == 2
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
391 && this_elt_dv.ndims () == 2)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
392 {
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
393 // This is Octave's specialty.
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
394 // Character matrices support rows of unequal length.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
395 if (m_dv.any_zero ())
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
396 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
397 // Empty existing element (bug #52542).
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
398 // Replace empty element with non-empty one.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
399 m_dv = this_elt_dv;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
400 }
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
401 else
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
402 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
403 if (this_elt_nc > cols ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
404 m_dv(1) = this_elt_nc;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
405 m_dv(0) += this_elt_nr;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
406 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
407 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
408 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 0)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
409 eval_error ("vertical dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
410 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
411 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
412
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
413 octave_value tm_const::char_array_concat (char string_fill_char) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
414 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
415 char type = (m_all_dq_strings ? '"' : '\'');
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
416
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
417 charNDArray result (m_dv, string_fill_char);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
418
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
419 array_concat_internal<charNDArray> (result);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
420
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
421 return octave_value (result, type);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
422 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
423
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
424 octave_value tm_const::class_concat (void) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
425 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
426 octave_value retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
427
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
428 octave_value_list rows (m_tm_rows.size (), octave_value ());
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
429
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
430 octave_idx_type j = 0;
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
431 for (const auto& tmrc : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
432 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
433 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
434
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
435 if (tmrc.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
436 rows(j++) = *(tmrc.begin ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
437 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
438 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
439 octave_value_list row (tmrc.length (), octave_value ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
440
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
441 octave_idx_type i = 0;
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
442 for (const auto& elt : tmrc)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
443 row(i++) = elt;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
444
29955
693329e53f25 move do_class_concat function inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29655
diff changeset
445 rows(j++) = do_class_concat (row, "horzcat", 1);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
446 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
447 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
448
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
449 if (rows.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
450 retval = rows(0);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
451 else
29955
693329e53f25 move do_class_concat function inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29655
diff changeset
452 retval = do_class_concat (rows, "vertcat", 0);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
453
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
454 return retval;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
455 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
456
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
457 octave_value tm_const::generic_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
458 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
459 // The line below might seem crazy, since we take a copy of the
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
460 // first argument, resize it to be empty and then resize it to be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
461 // full. This is done since it means that there is no recopying of
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
462 // data, as would happen if we used a single resize. It should be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
463 // noted that resize operation is also significantly slower than the
28631
70cdf8de553d move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents: 28579
diff changeset
464 // cat_op function, so it makes sense to have an empty matrix and
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
465 // copy all data.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
466 //
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
467 // We might also start with a empty octave_value using
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
468 //
27102
84ff9953faa1 where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
469 // ctmp = type_info::lookup_type (tmp.begin() -> begin() -> type_name());
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
470 //
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
471 // and then directly resize. However, for some types there might be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
472 // some additional setup needed, and so this should be avoided.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
473
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
474 octave_value ctmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
475
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
476 // Find the first non-empty object
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
477
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
478 if (m_any_sparse)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
479 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
480 // Start with sparse matrix to avoid issues memory issues with
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
481 // things like [ones(1,4),sprandn(1e8,4,1e-4)]
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
482
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
483 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
484 ctmp = octave_sparse_matrix ().resize (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
485 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
486 ctmp = octave_sparse_complex_matrix ().resize (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
487 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
488 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
489 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
490 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
491 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
492 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
493
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
494 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
495 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
496 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
497
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
498 ctmp = elt;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
499
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
500 if (! ctmp.all_zero_dims ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
501 goto found_non_empty;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
502 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
503 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
504
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
505 ctmp = (*(m_tm_rows.begin () -> begin ()));
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
506
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
507 found_non_empty:
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
508
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
509 if (! m_all_empty)
30390
a61e1a0f6024 maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29955
diff changeset
510 ctmp = ctmp.resize (dim_vector (0, 0)).resize (m_dv);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
511 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
512
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
513 // Now, extract the values from the individual elements and insert
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
514 // them in the result matrix.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
515
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
516 interpreter& interp = m_evaluator.get_interpreter ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
517
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
518 type_info& ti = interp.get_type_info ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
519
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
520 int dv_len = m_dv.ndims ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
521 octave_idx_type ntmp = (dv_len > 1 ? dv_len : 2);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
522 Array<octave_idx_type> ra_idx (dim_vector (ntmp, 1), 0);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
523
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
524 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
525 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
526 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
527
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
528 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
529 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
530 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
531
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
532 if (elt.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
533 continue;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
534
28631
70cdf8de553d move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents: 28579
diff changeset
535 ctmp = cat_op (ti, ctmp, elt, ra_idx);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
536
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
537 ra_idx (1) += elt.columns ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
538 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
539
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
540 ra_idx (0) += row.rows ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
541 ra_idx (1) = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
542 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
543
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
544 octave_value retval = ctmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
545
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
546 // If some elements are strings, force the result to be a string.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
547
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
548 if (m_some_strings && ! retval.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
549 retval = retval.convert_to_str ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
550
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
551 return retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
552 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
553
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
554 // The result is passed as a parameter to this function so that the
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
555 // char_array_concat function can create the array externally.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
556 // Otherwise, we would need a specialization of this function for
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
557 // character arrays just to handle string_fill_char.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
558
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
559 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
560 void tm_const::array_concat_internal (TYPE& result) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
561 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
562 octave_idx_type r = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
563 octave_idx_type c = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
564
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
565 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
566 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
567 // Skip empty arrays to allow looser rules.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
568 if (row.dims ().any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
569 continue;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
570
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
571 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
572 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
573 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
574
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
575 TYPE ra = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
576
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
577 // Skip empty arrays to allow looser rules.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
578
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
579 if (! ra.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
580 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
581 result.insert (ra, r, c);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
582
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
583 c += ra.columns ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
584 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
585 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
586
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
587 r += row.rows ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
588 c = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
589 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
590 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
591
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
592 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
593 TYPE tm_const::array_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
594 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
595 typedef typename TYPE::element_type ELT_T;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
596
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
597 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
598 return TYPE (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
599
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
600 if (m_tm_rows.size () == 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
601 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
602 // If possible, forward the operation to liboctave.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
603 // Single row.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
604 const tm_row_const& row = m_tm_rows.front ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
605 if (! (equal_types<ELT_T, char>::value
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
606 || equal_types<ELT_T, octave_value>::value)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
607 && row.all_1x1_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
608 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
609 // Optimize all scalars case.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
610 TYPE result (m_dv);
30723
08b08b7f05b2 Replace direct calls to C library assert() with Octave specialty functions in libinterp/ (bug #61753)
Arun Giridhar <arungiridhar@gmail.com> and Rik <rik@octave.org>
parents: 30564
diff changeset
611 panic_unless (static_cast<std::size_t> (result.numel ())
08b08b7f05b2 Replace direct calls to C library assert() with Octave specialty functions in libinterp/ (bug #61753)
Arun Giridhar <arungiridhar@gmail.com> and Rik <rik@octave.org>
parents: 30564
diff changeset
612 == row.length ());
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
613 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
614 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
615 result(i++) = octave_value_extract<ELT_T> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
616
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
617 return result;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
618 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
619
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
620 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
621 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
622 OCTAVE_LOCAL_BUFFER (TYPE, array_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
623
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
624 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
625 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
626 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
627
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
628 array_list[i++] = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
629 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
630
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
631 return TYPE::cat (-2, ncols, array_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
632 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
633 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
634 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
635 TYPE result (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
636 array_concat_internal<TYPE> (result);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
637 return result;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
638 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
639 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
640
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
641 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
642 TYPE tm_const::sparse_array_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
643 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
644 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
645 return TYPE (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
646
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
647 // Sparse matrices require preallocation for efficient indexing; besides,
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
648 // only horizontal concatenation can be efficiently handled by indexing.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
649 // So we just cat all rows through liboctave, then cat the final column.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
650 octave_idx_type nrows = m_tm_rows.size ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
651 octave_idx_type j = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
652 OCTAVE_LOCAL_BUFFER (TYPE, sparse_row_list, nrows);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
653 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
654 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
655 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
656 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
657 OCTAVE_LOCAL_BUFFER (TYPE, sparse_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
658
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
659 for (auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
660 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
661 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
662
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
663 sparse_list[i] = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
664 i++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
665 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
666
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
667 TYPE stmp = TYPE::cat (-2, ncols, sparse_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
668 sparse_row_list[j] = stmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
669 j++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
670 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
671
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
672 return TYPE::cat (-1, nrows, sparse_row_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
673 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
674
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
675 template <typename MAP>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
676 octave_map tm_const::map_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
677 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
678 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
679 return octave_map (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
680
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
681 octave_idx_type nrows = m_tm_rows.size ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
682 octave_idx_type j = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
683 OCTAVE_LOCAL_BUFFER (octave_map, map_row_list, nrows);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
684 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
685 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
686 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
687 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
688 OCTAVE_LOCAL_BUFFER (MAP, map_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
689
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
690 for (auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
691 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
692 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
693
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
694 map_list[i] = octave_value_extract<MAP> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
695 i++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
696 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
697
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
698 octave_map mtmp = octave_map::cat (-2, ncols, map_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
699 map_row_list[j] = mtmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
700 j++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
701 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
702
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
703 return octave_map::cat (-1, nrows, map_row_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
704 }
31605
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 30723
diff changeset
705
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 30723
diff changeset
706 OCTAVE_END_NAMESPACE(octave)
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
707
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
708 /*
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
709 ## test concatenation with all zero matrices
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
710 %!assert ([ "" 65*ones(1,10) ], "AAAAAAAAAA")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
711 %!assert ([ 65*ones(1,10) "" ], "AAAAAAAAAA")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
712
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
713 %!test
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
714 %! c = {"foo"; "bar"; "bazoloa"};
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
715 %! assert ([c; "a"; "bc"; "def"], {"foo"; "bar"; "bazoloa"; "a"; "bc"; "def"});
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
716
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
717 %!assert (class ([int64(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
718 %!assert (class ([int64(1), int32(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
719 %!assert (class ([int64(1), int16(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
720 %!assert (class ([int64(1), int8(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
721 %!assert (class ([int64(1), uint64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
722 %!assert (class ([int64(1), uint32(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
723 %!assert (class ([int64(1), uint16(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
724 %!assert (class ([int64(1), uint8(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
725 %!assert (class ([int64(1), single(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
726 %!assert (class ([int64(1), double(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
727 %!assert (class ([int64(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
728 %!assert (class ([int64(1), true]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
729 %!assert (class ([int64(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
730
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
731 %!assert (class ([int32(1), int64(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
732 %!assert (class ([int32(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
733 %!assert (class ([int32(1), int16(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
734 %!assert (class ([int32(1), int8(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
735 %!assert (class ([int32(1), uint64(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
736 %!assert (class ([int32(1), uint32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
737 %!assert (class ([int32(1), uint16(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
738 %!assert (class ([int32(1), uint8(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
739 %!assert (class ([int32(1), single(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
740 %!assert (class ([int32(1), double(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
741 %!assert (class ([int32(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
742 %!assert (class ([int32(1), true]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
743 %!assert (class ([int32(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
744
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
745 %!assert (class ([int16(1), int64(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
746 %!assert (class ([int16(1), int32(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
747 %!assert (class ([int16(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
748 %!assert (class ([int16(1), int8(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
749 %!assert (class ([int16(1), uint64(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
750 %!assert (class ([int16(1), uint32(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
751 %!assert (class ([int16(1), uint16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
752 %!assert (class ([int16(1), uint8(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
753 %!assert (class ([int16(1), single(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
754 %!assert (class ([int16(1), double(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
755 %!assert (class ([int16(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
756 %!assert (class ([int16(1), true]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
757 %!assert (class ([int16(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
758
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
759 %!assert (class ([int8(1), int64(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
760 %!assert (class ([int8(1), int32(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
761 %!assert (class ([int8(1), int16(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
762 %!assert (class ([int8(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
763 %!assert (class ([int8(1), uint64(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
764 %!assert (class ([int8(1), uint32(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
765 %!assert (class ([int8(1), uint16(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
766 %!assert (class ([int8(1), uint8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
767 %!assert (class ([int8(1), single(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
768 %!assert (class ([int8(1), double(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
769 %!assert (class ([int8(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
770 %!assert (class ([int8(1), true]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
771 %!assert (class ([int8(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
772
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
773 %!assert (class ([uint64(1), int64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
774 %!assert (class ([uint64(1), int32(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
775 %!assert (class ([uint64(1), int16(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
776 %!assert (class ([uint64(1), int8(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
777 %!assert (class ([uint64(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
778 %!assert (class ([uint64(1), uint32(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
779 %!assert (class ([uint64(1), uint16(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
780 %!assert (class ([uint64(1), uint8(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
781 %!assert (class ([uint64(1), single(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
782 %!assert (class ([uint64(1), double(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
783 %!assert (class ([uint64(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
784 %!assert (class ([uint64(1), true]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
785 %!assert (class ([uint64(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
786
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
787 %!assert (class ([uint32(1), int64(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
788 %!assert (class ([uint32(1), int32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
789 %!assert (class ([uint32(1), int16(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
790 %!assert (class ([uint32(1), int8(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
791 %!assert (class ([uint32(1), uint64(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
792 %!assert (class ([uint32(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
793 %!assert (class ([uint32(1), uint16(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
794 %!assert (class ([uint32(1), uint8(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
795 %!assert (class ([uint32(1), single(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
796 %!assert (class ([uint32(1), double(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
797 %!assert (class ([uint32(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
798 %!assert (class ([uint32(1), true]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
799 %!assert (class ([uint32(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
800
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
801 %!assert (class ([uint16(1), int64(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
802 %!assert (class ([uint16(1), int32(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
803 %!assert (class ([uint16(1), int16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
804 %!assert (class ([uint16(1), int8(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
805 %!assert (class ([uint16(1), uint64(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
806 %!assert (class ([uint16(1), uint32(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
807 %!assert (class ([uint16(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
808 %!assert (class ([uint16(1), uint8(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
809 %!assert (class ([uint16(1), single(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
810 %!assert (class ([uint16(1), double(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
811 %!assert (class ([uint16(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
812 %!assert (class ([uint16(1), true]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
813 %!assert (class ([uint16(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
814
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
815 %!assert (class ([uint8(1), int64(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
816 %!assert (class ([uint8(1), int32(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
817 %!assert (class ([uint8(1), int16(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
818 %!assert (class ([uint8(1), int8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
819 %!assert (class ([uint8(1), uint64(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
820 %!assert (class ([uint8(1), uint32(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
821 %!assert (class ([uint8(1), uint16(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
822 %!assert (class ([uint8(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
823 %!assert (class ([uint8(1), single(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
824 %!assert (class ([uint8(1), double(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
825 %!assert (class ([uint8(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
826 %!assert (class ([uint8(1), true]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
827 %!assert (class ([uint8(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
828
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
829 %!assert (class ([single(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
830 %!assert (class ([single(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
831 %!assert (class ([single(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
832 %!assert (class ([single(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
833 %!assert (class ([single(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
834 %!assert (class ([single(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
835 %!assert (class ([single(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
836 %!assert (class ([single(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
837 %!assert (class ([single(1), single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
838 %!assert (class ([single(1), double(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
839 %!assert (class ([single(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
840 %!assert (class ([single(1), true]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
841 %!assert (class ([single(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
842
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
843 %!assert (class ([double(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
844 %!assert (class ([double(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
845 %!assert (class ([double(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
846 %!assert (class ([double(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
847 %!assert (class ([double(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
848 %!assert (class ([double(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
849 %!assert (class ([double(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
850 %!assert (class ([double(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
851 %!assert (class ([double(1), single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
852 %!assert (class ([double(1), double(1)]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
853 %!assert (class ([double(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
854 %!assert (class ([double(1), true]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
855 %!assert (class ([double(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
856
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
857 %!assert (class ([cell(1), int64(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
858 %!assert (class ([cell(1), int32(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
859 %!assert (class ([cell(1), int16(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
860 %!assert (class ([cell(1), int8(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
861 %!assert (class ([cell(1), uint64(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
862 %!assert (class ([cell(1), uint32(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
863 %!assert (class ([cell(1), uint16(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
864 %!assert (class ([cell(1), uint8(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
865 %!assert (class ([cell(1), single(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
866 %!assert (class ([cell(1), double(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
867 %!assert (class ([cell(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
868 %!assert (class ([cell(1), true]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
869 %!assert (class ([cell(1), "a"]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
870
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
871 %!assert (class ([true, int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
872 %!assert (class ([true, int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
873 %!assert (class ([true, int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
874 %!assert (class ([true, int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
875 %!assert (class ([true, uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
876 %!assert (class ([true, uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
877 %!assert (class ([true, uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
878 %!assert (class ([true, uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
879 %!assert (class ([true, single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
880 %!assert (class ([true, double(1)]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
881 %!assert (class ([true, cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
882 %!assert (class ([true, true]), "logical")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
883 %!assert (class ([true, "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
884
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
885 %!assert (class (["a", int64(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
886 %!assert (class (["a", int32(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
887 %!assert (class (["a", int16(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
888 %!assert (class (["a", int8(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
889 %!assert (class (["a", int64(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
890 %!assert (class (["a", int32(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
891 %!assert (class (["a", int16(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
892 %!assert (class (["a", int8(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
893 %!assert (class (["a", single(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
894 %!assert (class (["a", double(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
895 %!assert (class (["a", cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
896 %!assert (class (["a", true]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
897 %!assert (class (["a", "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
898
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
899 %!assert (class ([cell(1), struct("foo", "bar")]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
900 %!error [struct("foo", "bar"), cell(1)]
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
901
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
902 %!test <*39041> assert (class ([cell(0), struct()]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
903 %!test <51086> assert (class ([struct(), cell(0)]), "struct")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
904
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
905 %!assert ([,1], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
906 %!assert ([1,], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
907 %!assert ([,1,], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
908 %!assert ([,1,;;], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
909 %!assert ([,1,;,;], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
910
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
911 %!assert ([1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
912 %!assert ([,1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
913 %!assert ([1,1,], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
914 %!assert ([,1,1,], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
915 %!assert ([,1,1,;;], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
916 %!assert ([,1,1,;,;], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
917 %!assert ([,;,1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
918
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
919 %!assert ([1;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
920 %!assert ([1,;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
921 %!assert ([1,;,;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
922
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
923 %!error eval ("[,,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
924 %!error eval ("[,,;,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
925 %!error eval ("[,;,,;,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
926
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
927 %!assert (isnull ([,]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
928 %!assert (isnull ([;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
929 %!assert (isnull ([;;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
930 %!assert (isnull ([;,;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
931 %!assert (isnull ([,;,;,]))
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
932
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
933 ## Undefined elements.
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
934 %!function my_undef ()
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
935 %!endfunction
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
936 %!
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
937 %!shared es
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
938 %! es = struct ("a", {});
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
939 %!
28579
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
940 %!assert <*58695> ([1; es.a; 3], [1; 3])
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
941 %!test <*58695>
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
942 %! fail ("undefined element in matrix list", "[1; my_undef(), 3]");
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
943 %!
28579
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
944 %!assert <*58695> ([es.a; es.a; 3], 3)
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
945 %!test <*58695>
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
946 %! fail ("undefined element in matrix list", "[my_undef(); my_undef(); 3]")
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
947 */