Mercurial > hg > octave-lyh
diff src/ov-cell.cc @ 3354:87721841efd7
[project @ 1999-11-17 19:06:11 by jwe]
author | jwe |
---|---|
date | Wed, 17 Nov 1999 19:06:15 +0000 |
parents | 6b36317855ff |
children | 0fb75d95b14f |
line wrap: on
line diff
--- a/src/ov-cell.cc +++ b/src/ov-cell.cc @@ -36,7 +36,9 @@ #include "defun.h" #include "error.h" #include "ov-cell.h" +#include "oct-obj.h" #include "unwind-prot.h" +#include "utils.h" DEFINE_OCTAVE_ALLOCATOR (octave_cell); @@ -47,16 +49,36 @@ { octave_value retval; -#if 0 - if (idx.length () == 1) + int len = idx.length (); + + switch (len) { - idx_vector i = idx (0).index_vector (); + case 2: + { + idx_vector i = idx (0).index_vector (); + idx_vector j = idx (1).index_vector (); + + retval = cell_val.index (i, j); + } + break; - retval = octave_value_list (lst.index (i)); + case 1: + { + idx_vector i = idx (0).index_vector (); + + retval = cell_val.index (i); + } + break; + + default: + { + string n = type_name (); + + error ("invalid number of indices (%d) for %s value", + len, n.c_str ()); + } + break; } - else - error ("lists may only be indexed by a single scalar"); -#endif return retval; } @@ -152,6 +174,58 @@ return false; } +DEFUN (iscell, args, , + "iscell (x): return nonzero if x is a cell array") +{ + octave_value retval; + + if (args.length () == 1) + retval = args(0).is_cell (); + else + print_usage ("iscell"); + + return retval; +} + +DEFUN (cell, args, , + "cell (N)\n\ +cell (M, N)\n\ +cell (size (A))") +{ + octave_value retval; + + int nargin = args.length (); + + switch (nargin) + { + case 1: + { + int nr, nc; + get_dimensions (args(0), "cell", nr, nc); + + if (! error_state) + retval = Cell (nr, nc, Matrix ()); + } + break; + + case 2: + { + int nr, nc; + get_dimensions (args(0), args(1), "cell", nr, nc); + + if (! error_state) + retval = Cell (nr, nc, Matrix ()); + } + break; + + default: + print_usage ("cell"); + break; + } + + return retval; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***